Name: series-workflowg4mrx Phase: Failed StartedAt: 2026-08-10 12:12:03 +0000 UTC FinishedAt: 2026-08-10 12:54:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg4mrx[0] Phase: Succeeded StartedAt: 2026-08-10 12:12:03 +0000 UTC FinishedAt: 2026-08-10 12:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg4mrx[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 12:12:03 +0000 UTC FinishedAt: 2026-08-10 12:54:45 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NmI0NmIwNTg4OTliZDBmNDk2YjUyZDdiMTkxMzNhODFlODFlZTliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTI6NTI6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbmluZGV4IDA4MDA1Njc2NzAyYzIuLjJjYmFhOWFiYTkwMWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG4gXG5AQCAtMTgzLDYgJiM0MzsxODQsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4mIzQzO1xuJiM0MztcdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiYjNDM7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbiYjNDM7XHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4mIzQzO1x0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4gbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uYWMzZjcxNjQzY2Q1ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC05MjEsMTAgJiM0Mzs5MjEsMTAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xuIH1cbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4mIzQzO1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuIFxuIFx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG5AQCAtOTM0LDIzICYjNDM7OTM0LDMzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFN5bnRoZXNpemUgYW4gaW52YWxpZCBib2d1cyBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWC1Nb2R1bGVcbiYjNDM7XHRcdCAqIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQgUmVhc29uIGlzXG4mIzQzO1x0XHQgKiB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRcdFx0LmJhc2ljID0gLTEsXG4mIzQzO1x0XHR9O1xuIFx0fVxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuJiM0MztcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4gXG4tXHRzd2l0Y2ggKGV4aXRfcmVhc29uKSB7XG4mIzQzO1x0c3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9URENBTEw6XG4gXHRcdGlmICh0ZHZtY2FsbF9leGl0X3R5cGUodmNwdSkpXG4tXHRcdFx0cmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDtcbi1cbi1cdFx0cmV0dXJuIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gRVhJVF9SRUFTT05fVk1DQUxMO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzpcbiBcdFx0LypcbiBcdFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxuIFx0XHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRcdFx0LmJhc2ljID0gLTEsXG4mIzQzO1x0XHR9O1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtOTY3LDcgJiM0Mzs5NzcsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0dGR4LVx1MDAzZXZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcihcdTAwMjZ0ZHgtXHUwMDNldnAsIFx1MDAyNnRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzKTtcbiBcbi1cdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuJiM0MztcdHZ0LVx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcbiBcdHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xuQEAgLTk4MSw4ICYjNDM7OTkxLDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4mIzQzO1x0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnk7XG4gfVxuIFxuIHN0YXRpYyBmYXN0cGF0aF90IHRkeF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMDcxLDggJiM0MzsxMDgwLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxuIFx0ICogVERDQUxMcy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxuJiM0MztcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xuJiM0MztcdFx0dnQtXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSAwO1xuIFx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XG4mIzQzO1x0fVxuIFxuIFx0dHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyBcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XG4gXG5AQCAtMjAyOCw3ICYjNDM7MjAzOSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcbiB9XG4gXG4gXG4taW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4mIzQzO3N0YXRpYyBpbnQgX190ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFx0dTY0IHZwX2VudGVyX3JldCA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG5AQCAtMjEyNiw2ICYjNDM7MjEzNywxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdFx0ICogLSBJZiBpdCYjMzk7cyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIDE7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9OT1RJRlk6XG4mIzQzO1x0XHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXG4mIzQzO1x0XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbiYjNDM7XHRcdHJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjEzNSwxMyAmIzQzOzIxNTEsMjkgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbiYjNDM7XG4mIzQzO1x0LyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovXG4mIzQzO1x0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFx0XHR1NjQgKmluZm8xLCB1NjQgKmluZm8yLCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XG4mIzQzO1x0aWYgKHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5iYXNpYyAhPSAtMSkge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgJiM0MzszMTg2LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbiYjNDM7XHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4mIzQzO1x0XHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxuJiM0MztcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xuJiM0MztcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDcgJiM0Mzs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7aW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdC8qXG4gXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcbkBAIC02Mjc5LDkgJiM0Mzs2Mjc5LDYgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4tXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbi1cbi1cdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiBcbiBcdC8qXG4gXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02MjkxLDE1ICYjNDM7NjI4OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxuIFx0XHRcdCAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTtcbiBcbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4tXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuLVx0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbiYjNDM7XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICYjNDM7Mzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpO1xuJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0IHUzMiBtc3IsIGludCB0eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgY29kZSwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgc3VwcG9ydCAoSW50ZWwgVERYKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGUgY2hhbmdlcyB0byBzdGFuZGFyZCBWTVggY29kZSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGxvZ2ljIHdpdGggVERYLCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2YjQ2YjA1ODg5OWJkMGY0OTZiNTJkN2IxOTEzM2E4MWU4MWVlOWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxMjo1MjozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCmluZGV4IDA4MDA1Njc2NzAyYzIuLjJjYmFhOWFiYTkwMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bW11LmgmIzM0OwogCkBAIC0xODMsNiAmIzQzOzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCkKJiM0Mzt7CiYjNDM7CWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7CiYjNDM7CiYjNDM7CWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyAmYW1wOyBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fAomIzQzOwkgICAgY29udGV4dF9pbnZhbGlkKSB7CiYjNDM7CQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgPwomIzQzOwkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IGIyNzJjMjA1ODZhNzQuLmFjM2Y3MTY0M2NkNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtOTIxLDEwICYjNDM7OTIxLDEwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBFWElUX1JFQVNPTl9URENBTEw7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwotCXUzMiBleGl0X3JlYXNvbjsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uOwogCiAJc3dpdGNoICh0ZHgtJmd0O3ZwX2VudGVyX3JldCAmYW1wOyBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHsKIAljYXNlIFREWF9TVUNDRVNTOgpAQCAtOTM0LDIzICYjNDM7OTM0LDMzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtMXU7CiYjNDM7CQkvKgomIzQzOwkJICogU3ludGhlc2l6ZSBhbiBpbnZhbGlkIGJvZ3VzIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYLU1vZHVsZQomIzQzOwkJICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMKJiM0MzsJCSAqIHVuZGVmaW5lZCwgYnV0IHRoaXMgaXMgTk9UIGEgZmFpbGVkIFZNLUVudGVyLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgewomIzQzOwkJCS5iYXNpYyA9IC0xLAomIzQzOwkJfTsKIAl9CiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKIAotCXN3aXRjaCAoZXhpdF9yZWFzb24pIHsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCXJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7CiYjNDM7CQkJLmJhc2ljID0gLTEsCiYjNDM7CQl9OwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTk2Nyw3ICYjNDM7OTc3LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCXRkeC0mZ3Q7dnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKCZhbXA7dGR4LSZndDt2cCwgJmFtcDt0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MpOwogCi0JdnQtJmd0O2V4aXRfcmVhc29uLmZ1bGwgPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpOwomIzQzOwl2dC0mZ3Q7ZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpOwogCiAJdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yY3g7CiAJdGR4LSZndDtleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LSZndDt2cF9lbnRlcl9hcmdzLnJkeDsKQEAgLTk4MSw4ICYjNDM7OTkxLDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGJvb2wgdGR4X2ZhaWxlZF92bWVudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSAmYW1wOyZhbXA7Ci0JICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7CiYjNDM7CXJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5OwogfQogCiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xMDcxLDggJiM0MzsxMDgwLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAkgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmQKIAkgKiBURENBTExzLgogCSAqLwotCWlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LSZndDtrdm0pLSZndDt3YWl0X2Zvcl9zZXB0X3phcCkpKQomIzQzOwlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkgewomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gMDsKIAkJcmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEOwomIzQzOwl9CiAKIAl0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzICZhbXA7IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpOwogCkBAIC0yMDI4LDcgJiM0MzsyMDM5LDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQogfQogCiAKLWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQomIzQzO3N0YXRpYyBpbnQgX190ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQogewogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCXU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtJmd0O3ZwX2VudGVyX3JldDsKQEAgLTIxMjYsNiAmIzQzOzIxMzcsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpCiAJCSAqIC0gSWYgaXQmIzM5O3Mgbm90IGFuIE1TTUksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KIAkJICovCiAJCXJldHVybiAxOwomIzQzOwljYXNlIEVYSVRfUkVBU09OX05PVElGWToKJiM0MzsJCS8qIE5NSSBibG9ja2luZyBzdGF0ZSBpcyBoYW5kbGVkIGJ5IFREWCBtb2R1bGUgKi8KJiM0MzsJCXJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzoKJiM0MzsJCXJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTIxMzUsMTMgJiM0MzsyMTUxLDI5IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwomIzQzOwkvKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayB3YXMgZGV0ZWN0ZWQgKi8KJiM0MzsJaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSzsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbiwKIAkJdTY0ICppbmZvMSwgdTY0ICppbmZvMiwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAogCSpyZWFzb24gPSB0ZHgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGw7Ci0JaWYgKCpyZWFzb24gIT0gLTF1KSB7CiYjNDM7CWlmICh0ZHgtJmd0O3Z0LmV4aXRfcmVhc29uLmJhc2ljICE9IC0xKSB7CiAJCSppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQkqaW5mbzIgPSB0ZHgtJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb247CiAJCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKQEAgLTMxNTQsNiAmIzQzOzMxODYsMTcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiAJdGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKCZhbXA7dGR4LSZndDt2dC5waV9kZXNjKSk7CiAJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIFBJTl9CQVNFRF9QT1NURURfSU5UUik7CiAKJiM0MzsJaWYgKGt2bV9ub3RpZnlfdm1leGl0X2VuYWJsZWQodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsCiYjNDM7CQkJCSBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7CiYjNDM7CQl0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLAomIzQzOwkJCQl2Y3B1LSZndDtrdm0tJmd0O2FyY2gubm90aWZ5X3dpbmRvdyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZCkKJiM0MzsJCXRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLAomIzQzOwkJCQkgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTsKJiM0MzsKIAl0ZHgtJmd0O3N0YXRlID0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC02MjY1LDcgJiM0Mzs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqLwogCi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO2ludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkvKgogCSAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DSwpAQCAtNjI3OSw5ICYjNDM7NjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7Ci0JYm9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgJmFtcDsgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDsKLQotCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7CiAKIAkvKgogCSAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLApAQCAtNjI5MSwxNSAmIzQzOzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKIAkJCSAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKIAotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyAmYW1wOyBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fAotCSAgICBjb250ZXh0X2ludmFsaWQpIHsKLQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTsKLQkJdmNwdS0mZ3Q7cnVuLSZndDtub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgPwotCQkJCQkgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7CiYjNDM7CXJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTM3OSw2ICYjNDM7Mzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTsKIHZvaWQgdm14X2VwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpOwomIzQzO2ludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCQkgdTMyIG1zciwgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBURFggUGF0Y2gmIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBLVk0gVERYIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYW5kIHJlbGF0ZWQgaGVhZGVycy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgaGFuZGxpbmcgYEVYSVRfUkVBU09OX05PVElGWWAgYW5kIGBFWElUX1JFQVNPTl9CVVNfTE9DS2AgaW4gVERYIGFuZCBhbHNvIHJlZmFjdG9yaW5nIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYC4gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHdhcnJhbnRzIGZ1enppbmcgZWZmb3J0LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgVERYIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgVERYIHJlcXVpcmVzIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIGFuZCB0aGF0IHRocm93cyB1cCBhIHJlZCBmbGFnLiBTdGFuZGFyZCBRRU1VIG9yIEdDRSBpbnN0YW5jZXMgbWlnaHQgKm5vdCogaGF2ZSB0aGF0IGhhcmR3YXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHN5emthbGxlciBjYW4gdXNlIHRoaXMuIFN5emthbGxlciBoZWF2aWx5IHVzZXMgYC9kZXYva3ZtYC4gSWYgdGhlIGhvc3QgZG9lc24mIzM5O3Qgc3VwcG9ydCBURFgsIGBLVk1fQ0FQX1ZNX1RZUEVTYCB3b24mIzM5O3QgYWR2ZXJ0aXNlIGl0LCBhbmQgY3JlYXRpbmcgYSBWTSB3aXRoIFREWCB3aWxsIGZhaWwuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGF0IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgc2hvdWxkIGJlIGZsYWdnZWQgYXMgbm90IHdvcnRoIGZ1enppbmcuIE9rYXksIHNvIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBhcmUgYW4gaXNzdWUgaGVyZS4gTmVzdGVkIFREWCBpcyBub3Qgc3VwcG9ydGVkIHlldCBvciByZXF1aXJlcyBoYXJkd2FyZSBzdXBwb3J0LgoKSG93ZXZlciwgdGhlIHBhdGNoICphbHNvKiB0b3VjaGVzIGB2bXguY2AsIGFuZCBJIGtub3cgdGhhdCBWTVggaXMgaGVhdmlseSBmdXp6ZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmYWN0b3JpbmcgY29kZSB0byBleHRyYWN0IGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIHRvIGJlIHVzZWQgaW4gYm90aCBgdm14LmNgIGFuZCBgdGR4LmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIG5vdCBmdW5kYW1lbnRhbGx5IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdXMgdG8gdGFyZ2V0IGl0IGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4KCkkgZHVnIGludG8gdGhlIGNoYW5nZXMgaW4gYHZteC5jYC4gSXQgbG9va3MgbGlrZSBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMganVzdCBjaGFuZ2luZyBpdHMgbGlua2FnZSBmcm9tIHN0YXRpYyB0byBnbG9iYWwuIEFsc28sIHRoZSBgaGFuZGxlX25vdGlmeWAgZnVuY3Rpb24gaW4gYHZteC5jYCBpcyBiZWluZyByZWZhY3RvcmVkLiBUaGUgbG9naWMgaXMgbW92ZWQgdG8gYF9fdm14X2hhbmRsZV9ub3RpZnlgIGluIGBjb21tb24uaGAuIFNvLCB0aGVyZSBhcmUgbm8gKmZ1bmN0aW9uYWwqIGNoYW5nZXMgaW4gdGhlIHN0YW5kYXJkIFZNWCBjb2RlLiBUaGlzIGlzIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBjb2RlIHdpdGggVERYLiBUaGlzIG1lYW5zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIG1haW5seSBpbiBgdGR4LmNgIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgYEVYSVRfUkVBU09OX05PVElGWWAgYW5kIGBFWElUX1JFQVNPTl9CVVNfTE9DS2AgYXJlIGltcGxlbWVudGVkLCBhbG9uZyB3aXRoIHJlZmFjdG9yaW5nIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGZ1enogdGhlICpURFgqIHBhcnRzPyBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdvbiYjMzk7dCBzdXBwb3J0IGl0IGJlY2F1c2UgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LiBHQ0UgKmRvZXMqIGhhdmUgVERYIGluc3RhbmNlcywgbGlrZSBDMyBpbnN0YW5jZXMsIGJ1dCBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzIHVzdWFsbHkgcnVuIG9uIGdlbmVyaWMgaW5zdGFuY2VzIG9yIFFFTVUgd2l0aG91dCBURFggaGFyZHdhcmUuIFREWCByZWxpZXMgb24gdGhlIFREWCBtb2R1bGUgKFNFQU0pIGFuZCBoYXJkd2FyZSBlbmNyeXB0aW9uIGFuZCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc29mdHdhcmUuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgdGR4X2hhbmRsZV9leGl0YCBpcyByZWFjaGFibGUuIEkgd2lsbCBzZWFyY2ggZm9yIHVzYWdlcyBvZiBgdGR4X2hhbmRsZV9leGl0YCBhbmQgYHRkeF90b192bXhfZXhpdF9yZWFzb25gLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aG9zZSBleGl0IHJlYXNvbnMgYXJlIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfaGFuZGxlX2V4aXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTU3PXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2MC1cdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTYxOlx0XHRyZXR1cm4gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTkyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk1Ny1cdFx0LypcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6OTU4Olx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk1OS1cdFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTE0Mz1zdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTQ4LVx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTE0OTpcdCAqIHRkeF9oYW5kbGVfZXhpdCgpIHdpdGggVERYX05PTl9SRUNPVkVSQUJMRSBzZXQgaWYgYSAjTUMgb2NjdXJzIG9uXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTExNTAtXHQgKiBWTS1FbnRyeS4gIE5NSXMgYXJlIGhhbmRsZWQgYnkgdGR4X3ZjcHVfZW50ZXJfZXhpdCgpLlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjAyOD1pbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDQxLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMDQyOnN0YXRpYyBpbnQgX190ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNTMtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNTQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNTUte1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMTU2Olx0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xNDM9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjE0NDppbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTE0NS1cdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFREIHZDUFUgRXhpdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGhhbmRsZSBleGl0cyByZWxhdGVkIHRvIFREIHZpcnR1YWwgQ1BVcy4gU3BlY2lmaWNhbGx5LCB0aGUgYHRkeF9oYW5kbGVfZXhpdGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgdnRfaGFuZGxlX2V4aXRgLCBidXQgb25seSBpZiB0aGUgQ1BVIGluIHF1ZXN0aW9uIChgdmNwdWApIGlzLCBpbiBmYWN0LCBhIFREIHZDUFUuIFRoZSBpbnRlcmVzdGluZyBwb2ludCBJJiMzOTttIGZvY3VzaW5nIG9uIG5vdyBpcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY3JlYXRlIGEgVEQgdkNQVSBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2VzbiYjMzk7dCBvZmZlciB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQuIEl0IG1ha2VzIG1lIGN1cmlvdXMgYWJvdXQgdGhlIGFzc3VtcHRpb25zIGJha2VkIGludG8gdGhlIGRlc2lnbi4gVG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuZCBjbGFyaWZ5IHRoZSBjaXJjdW1zdGFuY2VzIGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBJIHNob3VsZCByZS1leGFtaW5lIHRoZSBgaXNfdGRfdmNwdWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgaG93IGl0IGRldGVybWluZXMgaWYgYSBDUFUgaXMgYSBURCB2Q1BVLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoZSBsb2dpYyBjb3ZlcnMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgVEQgdkNQVSB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfdGRfdmNwdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02NS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NjY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Ny17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD03Mz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo3NDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTc1LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTczPXN0YXRpYyBpbnQgdnRfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc2LVx0XHRyZXR1cm4gdGR4X3ZjcHVfY3JlYXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgxPXN0YXRpYyB2b2lkIHZ0X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04Mi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NC1cdFx0dGR4X3ZjcHVfZnJlZSh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MT1zdGF0aWMgdm9pZCB2dF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTM6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTQtXHRcdHRkeF92Y3B1X3Jlc2V0KHZjcHUsIGluaXRfZXZlbnQpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwMT1zdGF0aWMgdm9pZCB2dF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAyLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDQtXHRcdHRkeF92Y3B1X2xvYWQodmNwdSwgY3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMTE9c3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMTYtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjExNzpcdGlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMTgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMjM9c3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTI0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEyNTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMjYtXHRcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMzM9c3RhdGljIHZvaWQgdnRfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTM0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzNTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMzYtXHRcdHRkeF92Y3B1X3B1dCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNDM9c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDQte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTQ1Olx0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDYtXHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTQ5PXN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE1MC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNTE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE1Mi1cdFx0cmV0dXJuIHRkeF92Y3B1X3J1bih2Y3B1LCBydW5fZmxhZ3MpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE1Nz1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNTkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTYwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjEtXHRcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2Nj1zdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Ny17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNjg6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY5LVx0XHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNzY9c3RhdGljIGludCB2dF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE3Ny17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNzg6XHRpZiAodW5saWtlbHkoaXNfdGRfdmNwdSh2Y3B1KSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzktXHRcdHJldHVybiB0ZHhfc2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTk2PXN0YXRpYyBpbnQgdnRfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xOTcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk4Olx0aWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTk5LVx0XHRyZXR1cm4gdGR4X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTIwND1zdGF0aWMgdm9pZCB2dF9yZWNhbGNfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjExLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMTI6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIxMy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTIxOD1zdGF0aWMgaW50IHZ0X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMTkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjIwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjEtXHRcdHJldHVybiB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHZjcHUsIGVycik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjI3PXN0YXRpYyBpbnQgdnRfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjgte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjI5Olx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjMwLVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMzU9c3RhdGljIGludCB2dF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjM2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjIzNzpcdGlmIChLVk1fQlVHX09OKGlzX3RkX3ZjcHUodmNwdSksIHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIzOC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQzPXN0YXRpYyBpbnQgdnRfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI0NC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyNDU6XHRpZiAoS1ZNX0JVR19PTihpc190ZF92Y3B1KHZjcHUpLCB2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNDYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI1MT1zdGF0aWMgdm9pZCB2dF9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjUzOlx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjU0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjYxPXN0YXRpYyBpbnQgdnRfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjcwLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyNzE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI3Mi1cdFx0cmV0dXJuIFg4NkVNVUxfUkVUUllfSU5TVFI7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mjc3PXN0YXRpYyBib29sIHZ0X2FwaWNfaW5pdF9zaWduYWxfYmxvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjgyLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyODM6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI4NC1cdFx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mjg5PXN0YXRpYyB2b2lkIHZ0X3NldF92aXJ0dWFsX2FwaWNfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjkxLVx0LyogT25seSB4MkFQSUMgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIFRELiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjkyOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yOTMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yOTg9c3RhdGljIHZvaWQgdnRfaHdhcGljX2lzcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWF4X2lzcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI5OS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMDA6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMwMS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTMwNj1zdGF0aWMgaW50IHZ0X3N5bmNfcGlyX3RvX2lycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzA4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDktXHRcdHJldHVybiAtMTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zMTQ9c3RhdGljIHZvaWQgdnRfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzE2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMxNzpcdGlmIChpc190ZF92Y3B1KGFwaWMtXHUwMDNldmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxOC1cdFx0dGR4X2RlbGl2ZXJfaW50ZXJydXB0KGFwaWMsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zMjY9c3RhdGljIHZvaWQgdnRfdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzM0PXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9leGNlcHRpb25fYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzNS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMzY6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzNy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM0Mj1zdGF0aWMgdTY0IHZ0X2dldF9zZWdtZW50X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzQzLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM0NDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzQ1LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNTA9c3RhdGljIHZvaWQgdnRfZ2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzUzOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM1NC1cdFx0bWVtc2V0KHZhciwgMCwgc2l6ZW9mKCp2YXIpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNjE9c3RhdGljIHZvaWQgdnRfc2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNjMte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzY0Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNjUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNzA9c3RhdGljIGludCB2dF9nZXRfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3MS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzI6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3My1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mzc4PXN0YXRpYyBpbnQgdnRfZ2V0X2NwbF9ub19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNzkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzgwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zODEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM4Nj1zdGF0aWMgdm9pZCB2dF9nZXRfY3NfZGJfbF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzg3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM4ODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zODktXHRcdCpkYiA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mzk3PXN0YXRpYyBib29sIHZ0X2lzX3ZhbGlkX2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzk4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM5OTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDAwLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00MDU9c3RhdGljIHZvaWQgdnRfc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDA2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQwNzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDA4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDEzPXN0YXRpYyBib29sIHZ0X2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDE0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQxNTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDE2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00MjE9c3RhdGljIHZvaWQgdnRfc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDIyLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQyMzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDI0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDI5PXN0YXRpYyBpbnQgdnRfc2V0X2VmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQzMC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0MzE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQzMi1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM3PXN0YXRpYyB2b2lkIHZ0X2dldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDM4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQzOTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NDAtXHRcdG1lbXNldChkdCwgMCwgc2l6ZW9mKCpkdCkpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ0Nz1zdGF0aWMgdm9pZCB2dF9zZXRfaWR0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NfcHRyICpkdClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ0OC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NDk6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ1NT1zdGF0aWMgdm9pZCB2dF9nZXRfZ2R0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NfcHRyICpkdClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1Ni17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NTc6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDU4LVx0XHRtZW1zZXQoZHQsIDAsIHNpemVvZigqZHQpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NjU9c3RhdGljIHZvaWQgdnRfc2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjX3B0ciAqZHQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NjYte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDY3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NjgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NzM9c3RhdGljIHZvaWQgdnRfc2V0X2RyNyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdmFsKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ3NTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDgxPXN0YXRpYyB2b2lkIHZ0X3N5bmNfZGlydHlfZGVidWdfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDg3LVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0ODg6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ4OS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ5ND1zdGF0aWMgdm9pZCB2dF9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDk1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ5NjpcdGlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00OTctXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01MDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MDMte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTA0Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MDUtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUxMD1zdGF0aWMgdm9pZCB2dF9zZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MTEte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTEyOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MTMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01MTg9c3RhdGljIGJvb2wgdnRfZ2V0X2lmX2ZsYWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTE5LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUyMDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTI2PXN0YXRpYyB2b2lkIHZ0X2ZsdXNoX3RsYl9hbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTI3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUyODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MjktXHRcdHRkeF9mbHVzaF90bGJfYWxsKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUzNj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfY3VycmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01Mzcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTM4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUzOS1cdFx0dGR4X2ZsdXNoX3RsYl9jdXJyZW50KHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU0Nj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0Ny17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1NDg6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0OS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU1ND1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTU1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU1NjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTU3LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTYyPXN0YXRpYyB2b2lkIHZ0X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTYzLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU2NDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NjUtXHRcdHRkeF9pbmplY3Rfbm1pKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU3Mj1zdGF0aWMgaW50IHZ0X25taV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU3Ny1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTc4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NzktXHRcdHJldHVybiB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU4ND1zdGF0aWMgYm9vbCB2dF9nZXRfbm1pX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU4OS1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTkwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01OTY9c3RhdGljIHZvaWQgdnRfc2V0X25taV9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXNrZWQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTk4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MDQ9c3RhdGljIHZvaWQgdnRfZW5hYmxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYwNi1cdC8qIFJlZmVyIHRvIHRoZSBjb21tZW50cyBpbiB0ZHhfaW5qZWN0X25taSgpLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjA3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MDgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MTM9c3RhdGljIHZvaWQgdnRfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjE1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjYxNjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTctXHRcdHRkeF9sb2FkX21tdV9wZ2QodmNwdSwgcm9vdF9ocGEsIHBnZF9sZXZlbCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjI0PXN0YXRpYyB2b2lkIHZ0X3NldF9pbnRlcnJ1cHRfc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1hc2spXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MjUte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjI2Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MjctXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MzI9c3RhdGljIHUzMiB2dF9nZXRfaW50ZXJydXB0X3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MzMte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjM0Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MzUtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY0MD1zdGF0aWMgdm9pZCB2dF9wYXRjaF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY0Ni1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjQ3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NDgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02NTM9c3RhdGljIHZvaWQgdnRfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmVpbmplY3RlZClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY1NC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NTU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY1Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY2MT1zdGF0aWMgdm9pZCB2dF9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2Mi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NjM6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2NC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY2OT1zdGF0aWMgdm9pZCB2dF9jYW5jZWxfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY3MC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NzE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY3Mi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY3Nz1zdGF0aWMgaW50IHZ0X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjc4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY3OTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjgwLVx0XHRyZXR1cm4gdGR4X2ludGVycnVwdF9hbGxvd2VkKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY4NT1zdGF0aWMgdm9pZCB2dF9lbmFibGVfaXJxX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODYte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Njg3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02OTM9c3RhdGljIHZvaWQgdnRfZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY5Ny1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY5ODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjk5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzA0PXN0YXRpYyB2b2lkIHZ0X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MDYte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzA3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcwOC1cdFx0dGR4X2dldF9leGl0X2luZm8odmNwdSwgcmVhc29uLCBpbmZvMSwgaW5mbzIsIGludHJfaW5mbyxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03MTY9c3RhdGljIHZvaWQgdnRfdXBkYXRlX2NyOF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHByLCBpbnQgaXJyKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzE3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcxODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzE5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzI0PXN0YXRpYyB2b2lkIHZ0X3NldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzI1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcyNjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzI3LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzMyPXN0YXRpYyB2b2lkIHZ0X3JlZnJlc2hfYXBpY3ZfZXhlY19jdHJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTczMy17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3MzQ6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzM1LVx0XHRLVk1fQlVHX09OKCFrdm1fdmNwdV9hcGljdl9hY3RpdmUodmNwdSksIHZjcHUtXHUwMDNla3ZtKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03NDI9c3RhdGljIHZvaWQgdnRfbG9hZF9lb2lfZXhpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZW9pX2V4aXRfYml0bWFwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQzLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc0NDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQ1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Nzc0PXN0YXRpYyB1NjQgdnRfZ2V0X2wyX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3Ni1cdC8qIFREWCBkb2VzbiYjMzk7dCBzdXBwb3J0IEwyIGd1ZXN0IGF0IHRoZSBtb21lbnQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3Nzc6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3OC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzgzPXN0YXRpYyB1NjQgdnRfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODUtXHQvKiBURFggZG9lc24mIzM5O3Qgc3VwcG9ydCBMMiBndWVzdCBhdCB0aGUgbW9tZW50LiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Nzg2Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODctXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc5Mj1zdGF0aWMgdm9pZCB2dF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03OTQtXHQvKiBJbiBURFgsIHRzYyBvZmZzZXQgY2FuJiMzOTt0IGJlIGNoYW5nZWQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3OTU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc5Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgwMT1zdGF0aWMgdm9pZCB2dF93cml0ZV90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODAzLVx0LyogSW4gVERYLCB0c2MgbXVsdGlwbGllciBjYW4mIzM5O3QgYmUgY2hhbmdlZC4gKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgwNDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODA1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODExPXN0YXRpYyBpbnQgdnRfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYyxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MTQtXHQvKiBWTVgtcHJlZW1wdGlvbiB0aW1lciBpc24mIzM5O3QgYXZhaWxhYmxlIGZvciBURFguICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MTU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgxNi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODIxPXN0YXRpYyB2b2lkIHZ0X2NhbmNlbF9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODIzLVx0LyogVk1YLXByZWVtcHRpb24gdGltZXIgY2FuJiMzOTt0IGJlIHNldC4gIFNlZSB2dF9zZXRfaHZfdGltZXIoKS4gKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgyNDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODI1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODMxPXN0YXRpYyB2b2lkIHZ0X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MzIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODMzOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MzQtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NDc9c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0OC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NDk6XHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NTAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg1NT1zdGF0aWMgaW50IHZ0X3ZjcHVfbWVtX2VuY191bmxvY2tlZF9pb2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgX191c2VyICphcmdwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODU2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg1NzpcdGlmICghaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg1OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz00MD1zdGF0aWMgc3RydWN0IGxicl9kZXNjICp2Y3B1X3RvX2xicl9kZXNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtNDEte1xuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo0MjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00My1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz00OD1zdGF0aWMgc3RydWN0IHg4Nl9wbXVfbGJyICp2Y3B1X3RvX2xicl9yZWNvcmRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtNDkte1xuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo1MDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy01MS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz0xNDk9c3RhdGljIGJvb2wgaW50ZWxfcG11X2xicl9pc19jb21wYXRpYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTUwLXtcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTUxOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE1Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9MTU3PWJvb2wgaW50ZWxfcG11X2xicl9pc19lbmFibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTU4LXtcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTU5Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE2MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMDk9c3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTIxOC1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjIxOTpcdHJldHVybiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSBcdTAwMjZcdTAwMjYgIWlzX3RkX3ZjcHUodmNwdSkpIHx8XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjIwLVx0XHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMjM9dm9pZCB2bXhfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDItXHRpZiAoIXZjcHUtXHUwMDNlcHJlZW1wdGVkIFx1MDAyNlx1MDAyNiBrdm1fdmNwdV9pc19ibG9ja2luZyh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyNDM6XHQgICAgKChpc190ZF92Y3B1KHZjcHUpIFx1MDAyNlx1MDAyNiB0ZHhfaW50ZXJydXB0X2FsbG93ZWQodmNwdSkpIHx8XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6MjQ0Olx0ICAgICAoIWlzX3RkX3ZjcHUodmNwdSkgXHUwMDI2XHUwMDI2ICF2bXhfaW50ZXJydXB0X2Jsb2NrZWQodmNwdSkpKSlcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDUtXHRcdHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTMyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm14X2dldF9leGl0X3F1YWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI2LVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC92bXguaDozMjc6XHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI4LVx0XHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguaD0zMzM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzM3LVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC92bXguaDozMzg6XHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzM5LVx0XHR2dC1cdTAwM2VleGl0X2ludHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBURFggdkNQVSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXNfdGRfdmNwdWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBpZGVudGlmeWluZyBpZiBhIHZDUFUgaXMgcnVubmluZyB3aXRoaW4gYSBURFggZW52aXJvbm1lbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBhY3R1YWxseSAqcG9zc2libGUqIHRvIGNvbmp1cmUgdXAgYSBURFggdkNQVSB3aXRob3V0IHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBoZXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kLgoKVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBkaXZlIGludG8gaG93IHRoZXNlIHZDUFVzIGFyZSBhY3R1YWxseSBjb25zdHJ1Y3RlZC4gVGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGB0ZHhfdmNwdV9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyByZXF1aXJlbWVudHMsIGFuZCBpdHMgZXJyb3IgY29uZGl0aW9ucy4gRG9lcyBpdCBzdHJpY3RseSBlbmZvcmNlIGEgVERYIGhhcmR3YXJlIGNoZWNrPyBEb2VzIGl0IG9mZmVyIGFueSBsZWV3YXkgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcz8gVGhlIGFuc3dlcnMgdG8gdGhlc2UgcXVlc3Rpb25zIGFyZSBnb2luZyB0byBjbGFyaWZ5IGlmIHdlIGNhbiBydW4gVERYIGNvZGUgd2l0aG91dCBoYXZpbmcgYSBzdXBwb3J0aW5nIHBsYXRmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF92Y3B1X2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz03Mz1zdGF0aWMgaW50IHZ0X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03NS1cdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzY6XHRcdHJldHVybiB0ZHhfdmNwdV9jcmVhdGUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTYxOD1pbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNjY3LVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo2Njg6aW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTY2OS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04Mjc9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtODQxLSAqIDMuIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gKG9ubHkgd2hlbiBURCBpcyBURF9TVEFURV9JTklUSUFMSVpFRCkuXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjg0MjogKiAgICAzLjEgdGR4X3ZjcHVfY3JlYXRlKCkgdHJhbnNpdGlvbnMgdkNQVSBzdGF0ZSB0byBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQuXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0My0gKiAgICAzLjIgdmNwdV9sb2FkKCkgYW5kIHZjcHVfcHV0KCkgaW4ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMzQ9aW50IHRkeF92bV9pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzNjppbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xMzctdm9pZCB0ZHhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFREWCBJbml0aWFsaXphdGlvbioqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYHRkeF92bV9pbml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVERYIGlzIGFjdHVhbGx5IGVuYWJsZWQuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB3aGV0aGVyIG9yIG5vdCBURFggZW5hYmxlbWVudCBpcyBjb250aW5nZW50IG9uIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBNeSByZWFzb25pbmcgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IGlmIGB0ZHhfdm1faW5pdGAgcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVz4oCUaW4gdGhpcyBjYXNlLCBmb3IgVERYIHN1cHBvcnTigJR0aGVuIHRoZSBmdW5jdGlvbiBzaG91bGQgZmFpbCBncmFjZWZ1bGx5IHdoZW4gdGhvc2UgZmVhdHVyZXMgYXJlbiYjMzk7dCBwcmVzZW50LiBBIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gaGluZ2VzIG9uIHRoZSBwbGF0Zm9ybSYjMzk7cyBzdXBwb3J0IGZvciB0aGUgcmVxdWlyZWQgdGVjaG5vbG9naWVzLiBUaGVyZWZvcmUsIGEgZmFpbHVyZSBvZiB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYW4gZXhjZWxsZW50IGluZGljYXRvciBvZiBtaXNzaW5nIFREWCBoYXJkd2FyZSBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfdm1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz00Mz1zdGF0aWMgaW50IHZ0X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1LVx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NjpcdFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTYwNT1zdGF0aWMgaW50IHRkeF9kb190ZGhfbW5nX2tleV9jb25maWcodm9pZCAqcGFyYW0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy02MTctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjYxODppbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy02MTkte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzMD12b2lkIHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzMTppbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzMi12b2lkIHRkeF9tbXVfcmVsZWFzZV9oa2lkKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDAxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gVERYIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9uKSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHdpdGhpbiBLVk0gb24geDg2LiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYHRkeF92bV9pbml0YCBmdW5jdGlvbiwgYW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGVyZSBJJiMzOTtsbCBiZSBkaWdnaW5nIGluLiBTbywgSSYjMzk7bGwgYmUgbmF2aWdhdGluZyB0byBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb21lcyB0b2dldGhlci4gVW5kZXJzdGFuZGluZyBob3cgdGhlIFZNIGlzIHNldCB1cCBmb3IgVERYIGlzIGNyaXRpY2FsIHRvIGV2ZXJ5dGhpbmcgZWxzZSwgc28gdGhpcyBpcyB3aGVyZSBJIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxODpcdGludCB0ZHhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gNjE5Olx0e1xuIDYyMDpcdFx0c3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7XG4gNjIxOlx0XG4gNjIyOlx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlID0gdHJ1ZTtcbiA2MjM6XHRcdC8qXG4gNjI0Olx0XHQgKiBURFggTW9kdWxlIGRvZXNuJiMzOTt0IGFsbG93IHRoZSBoeXBlcnZpc29yIHRvIG1vZGlmeSB0aGUgRU9JLWJpdG1hcCxcbiA2MjU6XHRcdCAqIGkuZS4gYWxsIEVPSXMgYXJlIGFjY2VsZXJhdGVkIGFuZCBuZXZlciB0cmlnZ2VyIGV4aXRzLlxuIDYyNjpcdFx0ICovXG4gNjI3Olx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX2VvaSA9IHRydWU7XG4gNjI4Olx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xuIDYyOTpcdFx0a3ZtLVx1MDAzZWFyY2guZGlzYWJsZWRfcXVpcmtzIHw9IEtWTV9YODZfUVVJUktfSUdOT1JFX0dVRVNUX1BBVDtcbiA2MzA6XHRcbiA2MzE6XHRcdC8qXG4gNjMyOlx0XHQgKiBQTVUgc3VwcG9ydCBpcyBwcm92aWRlZCBieSB0aGUgVERYLU1vZHVsZSAoaWYgZW5hYmxlZCBmb3IgdGhlIFZNKS5cbiA2MzM6XHRcdCAqIEZyb20gS1ZNJiMzOTtzIHBlcnNwZWN0aXZlLCB0aGUgVk0gZG9lc24mIzM5O3QgaGF2ZSBhIHZpcnR1YWwgUE1VLlxuIDYzNDpcdFx0ICovXG4gNjM1Olx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3BtdSA9IHRydWU7XG4gNjM2Olx0XG4gNjM3Olx0XHQvKlxuIDYzODpcdFx0ICogQmVjYXVzZSBndWVzdCBURCBpcyBwcm90ZWN0ZWQsIFZNTSBjYW4mIzM5O3QgcGFyc2UgdGhlIGluc3RydWN0aW9uIGluIFRELlxuIDYzOTpcdFx0ICogSW5zdGVhZCwgZ3Vlc3QgdXNlcyBNTUlPIGh5cGVyY2FsbC4gIEZvciB1bm1vZGlmaWVkIGRldmljZSBkcml2ZXIsXG4gNjQwOlx0XHQgKiAjVkUgbmVlZHMgdG8gYmUgaW5qZWN0ZWQgZm9yIE1NSU8gYW5kICNWRSBoYW5kbGVyIGluIFREIGNvbnZlcnRzIE1NSU9cbiA2NDE6XHRcdCAqIGluc3RydWN0aW9uIGludG8gTU1JTyBoeXBlcmNhbGwuXG4gNjQyOlx0XHQgKlxuIDY0MzpcdFx0ICogU1BURSB2YWx1ZSBmb3IgTU1JTyBuZWVkcyB0byBiZSBzZXR1cCBzbyB0aGF0ICNWRSBpcyBpbmplY3RlZCBpbnRvXG4gNjQ0Olx0XHQgKiBURCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgRVBUIE1JU0NPTkZJRy5cbiA2NDU6XHRcdCAqIC0gUldYPTAgc28gdGhhdCBFUFQgdmlvbGF0aW9uIGlzIHRyaWdnZXJlZC5cbiA2NDY6XHRcdCAqIC0gc3VwcHJlc3MgI1ZFIGJpdCBpcyBjbGVhcmVkIHRvIGluamVjdCAjVkUuXG4gNjQ3Olx0XHQgKi9cbiA2NDg6XHRcdGt2bV9tbXVfc2V0X21taW9fc3B0ZV92YWx1ZShrdm0sIDApO1xuIDY0OTpcdFxuIDY1MDpcdFx0LypcbiA2NTE6XHRcdCAqIFREWCBoYXMgaXRzIG93biBsaW1pdCBvZiBtYXhpbXVtIHZDUFVzIGl0IGNhbiBzdXBwb3J0IGZvciBhbGxcbiA2NTI6XHRcdCAqIFREWCBndWVzdHMgaW4gYWRkaXRpb24gdG8gS1ZNX01BWF9WQ1BVUy4gIFREWCBtb2R1bGUgcmVwb3J0c1xuIDY1MzpcdFx0ICogc3VjaCBsaW1pdCB2aWEgdGhlIE1BWF9WQ1BVX1BFUl9URCBnbG9iYWwgbWV0YWRhdGEuICBJblxuIDY1NDpcdFx0ICogcHJhY3RpY2UsIGl0IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzIHRoYXQgQUxMXG4gNjU1Olx0XHQgKiBwbGF0Zm9ybXMgdGhhdCB0aGUgVERYIG1vZHVsZSBzdXBwb3J0cyBjYW4gcG9zc2libHkgaGF2ZS5cbiA2NTY6XHRcdCAqXG4gNjU3Olx0XHQgKiBMaW1pdCBURFggZ3Vlc3QmIzM5O3MgbWF4aW11bSB2Q1BVcyB0byB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgQ1BVc1xuIDY1ODpcdFx0ICogdGhlIHBsYXRmb3JtIGhhcy4gIFNpbXBseSBmb3J3YXJkaW5nIHRoZSBNQVhfVkNQVV9QRVJfVEQgdG9cbiA2NTk6XHRcdCAqIHVzZXJzcGFjZSB3b3VsZCByZXN1bHQgaW4gYW4gdW5wcmVkaWN0YWJsZSBBQkkuXG4gNjYwOlx0XHQgKi9cbiA2NjE6XHRcdGt2bS1cdTAwM2VtYXhfdmNwdXMgPSBtaW5fdChpbnQsIGt2bS1cdTAwM2VtYXhfdmNwdXMsIG51bV9wcmVzZW50X2NwdXMoKSk7XG4gNjYyOlx0XG4gNjYzOlx0XHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfVU5JTklUSUFMSVpFRDtcbiA2NjQ6XHRcbiA2NjU6XHRcdHJldHVybiAwO1xuIDY2NjpcdH1cbiA2Njc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMDkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgVERYIFZNIEluaXRpYWxpemF0aW9uIENvbmNlcm4qKgoKSG1tLCBzbyBgdGR4X3ZtX2luaXRg4oCmIHdhaXQgYSBzZWNvbmQsIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUmIzM5O3Mgc3VwcG9ydCBmb3IgVERYLCBkb2VzIGl0PyBUaGF0IGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgZG93biB0aGlzIHBhdGguIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIHRoZSBwbGF0Zm9ybSB3aWxsIGhhbmRsZSBpdC4KCkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbW1lZGlhdGVseSBjaGVjayBob3cgYGlzX3RkKGt2bSlgIHdvcmtzIGFuZCB3aGF0IGNoZWNrcyBpdCBpbmNsdWRlcy4gVGhhdCBmdW5jdGlvbiBzaG91bGQgYmUgdGhlIGdhdGVrZWVwZXIsIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYmVmb3JlIGFueXRoaW5nIGVsc2UuIFRoZSB3aG9sZSBzZXR1cCBkZXBlbmRzIG9uIHRoYXQsIHNvIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIG5vdyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX3RkXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MzQ9c3RydWN0IHZjcHVfdnQge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjAtXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYyLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTY2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjcte1xuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2ODpcdHJldHVybiBpc190ZCh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTcyLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo3MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC03NC1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM9c3RhdGljIGludCB2dF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ1Olx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00Ni1cdFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTE9c3RhdGljIHZvaWQgdnRfdm1fcHJlX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTM6XHRpZiAoaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0LVx0XHRyZXR1cm4gdGR4X21tdV9yZWxlYXNlX2hraWQoa3ZtKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01Nz1zdGF0aWMgdm9pZCB2dF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU5Olx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MC0gICAgICAgICAgICAgICByZXR1cm4gdGR4X3ZtX2Rlc3Ryb3koa3ZtKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02NT1zdGF0aWMgaW50IHZ0X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY3Olx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02OC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTg4PXN0YXRpYyBib29sIHZ0X2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xODkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTkwOlx0aWYgKGt2bSBcdTAwMjZcdTAwMjYgaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE5MS1cdFx0cmV0dXJuIHRkeF9oYXNfZW11bGF0ZWRfbXNyKGluZGV4KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03NTA9c3RhdGljIGludCB2dF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc1MS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NTI6XHRpZiAoaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc1My1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzU4PXN0YXRpYyBpbnQgdnRfc2V0X2lkZW50aXR5X21hcF9hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlkZW50X2FkZHIpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03NTkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzYwOlx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03NjEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc2Nj1zdGF0aWMgYm9vbCB2dF90ZHBfaGFzX3NtZXAoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc2ODpcdGlmIChpc190ZChrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODM5PXN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0MTpcdGlmICghaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0Mi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODY1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg2NjpcdGlmIChpc190ZChrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODY3LVx0XHRyZXR1cm4gdGR4X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoa3ZtLCBwZm4sIGlzX3ByaXZhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkzOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLVk0gQ29kZWJhc2U6IGBpc190ZGAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS1ZNIHg4NiBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlgLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBJIGJlbGlldmUgaXMgZGVjbGFyZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIHNvbWV0aGluZywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSB0aGF0IGhlbHBzIHdpdGggbWFuYWdpbmcgdGhlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcbiAgNjI6XHR7XG4gIDYzOlx0XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICA2NzpcdHtcbiAgNjg6XHRcdHJldHVybiBpc190ZCh2Y3B1LVx1MDAzZWt2bSk7XG4gIDY5Olx0fVxuICA3MDpcdFxuICA3MTpcdCNlbHNlXG4gIDcyOlx0XG4gIDczOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgNzQ6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBURFggVk0gQ3JlYXRpb24gd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gdGhlIGBpc190ZGAgZnVuY3Rpb24gaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGBrdm0tJmd0O2FyY2gudm1fdHlwZWAgaXMgZXF1YWwgdG8gYEtWTV9YODZfVERYX1ZNYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBoZXJlIGlzLCBjYW4gU3l6a2FsbGVyLCBpbiBpdHMgZnV6emluZyBlZmZvcnRzLCBhY3R1YWxseSBjcmVhdGUgYSBWTSB3aXRoIHRoaXMgc3BlY2lmaWMgYEtWTV9YODZfVERYX1ZNYCB0eXBlPyBJZiBzbywgdGhhdCBvcGVucyB1cCBhIHdob2xlIGF2ZW51ZSBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBLVk1fWDg2X1REWF9WTWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHR5cGUgaXMgZGVjbGFyZWQsIGJlY2F1c2UgdGhhdCBtaWdodCByZXZlYWwgYW55IGFzc29jaWF0ZWQgbGltaXRhdGlvbnMuIE1vcmUgY3JpdGljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgdHlwZSBiYWNrIHRvIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAuIERvZXMgdGhlIGtlcm5lbCYjMzk7cyBWTSBjcmVhdGlvbiBjb2RlIGV4cGxpY2l0bHkgYWxsb3cgVk1zIG9mIHRoaXMgdHlwZSB0byBiZSBjb25zdHJ1Y3RlZD8gQW55IHJlc3RyaWN0aW9ucyBoZXJlIHdvdWxkIGltcGFjdCBTeXprYWxsZXImIzM5O3MgYWJpbGl0eSB0byBldmVuIGdldCBhIFREWCBWTSBydW5uaW5nLCB0aHVzIGNvbnN0cmFpbmluZyBhbnkgc3Vic2VxdWVudCBmdXp6aW5nIHBvdGVudGlhbC4gSWYgaXQgKmlzKiBhbGxvd2VkLCBJJiMzOTtsbCBtb3ZlIG9uLiBJZiBub3QsIEkmIzM5O20gYXQgYSByb2FkYmxvY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YODZfVERYX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05NDE4PW1lYW5zIHRoZSBWTSB0eXBlIHdpdGggdmFsdWUgQG4gaXMgc3VwcG9ydGVkLiAgUG9zc2libGUgdmFsdWVzIG9mIEBuIGFyZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk0MjQtICAjZGVmaW5lIEtWTV9YODZfU05QX1ZNXHQ0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTQyNTogICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdDVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NDI2LVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3Q9MjMzPWNvbnRyb2wgZmxvdyBpcyBhcyBmb2xsb3dzOlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMjM2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoyMzc6ICAgKiBLVk1fQ0FQX1ZNX1RZUEVTOiBDaGVjayBpZiBWTSB0eXBlIGlzIHN1cHBvcnRlZCBhbmQgaWYgS1ZNX1g4Nl9URFhfVk1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMjM4LSAgICAgaXMgc3VwcG9ydGVkLlxuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LSNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdFx0NFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzU6I2RlZmluZSBLVk1fWDg2X1REWF9WTVx0XHQ1XG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkzLXtcbmFyY2gveDg2L2t2bS9tbXUuaDozOTQ6XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTUtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkyOT1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTkzMi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTkzMzpcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzQtXHRcdG1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTE2OT1zdGF0aWMgaW50IGt2bV9lbmFibGVfZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmcoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3NC1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3NTpcdGlmIChrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc2LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD02MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Mi17XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYzOlx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY0LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDc4LVx0XHRcdFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc5Olx0XHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwODAtXHR9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MzojZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNL1REWCBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHNwZWNpZmljIGxpbmUgb2YgY29kZTogYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNzlgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgYSBoaWdoIGxldmVsLiBXZSYjMzk7cmUgc2V0dGluZyBhIGJpdCB3aXRoaW4gYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AuIFRoZSBiaXQgYmVpbmcgc2V0IGNvcnJlc3BvbmRzIHRvIGBLVk1fWDg2X1REWF9WTWAuIFNvLCBlc3NlbnRpYWxseSwgd2UmIzM5O3JlIHNpZ25hbGluZyB0aGF0IHRoZSBLVk0gaW1wbGVtZW50YXRpb24gb24geDg2IG5vdyBzdXBwb3J0cyBydW5uaW5nIGEgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgdmlydHVhbCBtYWNoaW5lLgoKSSYjMzk7ZCBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCByYW1pZmljYXRpb25zIGhlcmUuIFREWCBpcyBhIHNpZ25pZmljYW50IHNlY3VyaXR5IGVuaGFuY2VtZW50LiBJdCBwcm92aWRlcyBpc29sYXRlZCB2aXJ0dWFsIG1hY2hpbmVzLCBwcm90ZWN0aW5nIHRoZSBWTSYjMzk7cyBtZW1vcnkgYW5kIHN0YXRlIGV2ZW4gZnJvbSBhIGNvbXByb21pc2VkIGh5cGVydmlzb3IuIFNldHRpbmcgdGhpcyBiaXQgbWVhbnMgdGhlIEtWTSBjb2RlIGhhcyBiZWVuIGV4dGVuZGVkIHRvIHVuZGVyc3RhbmQgYW5kIGhhbmRsZSB0aGUgdW5pcXVlIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzIG9mIFREWCBWTXMuIEl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQgZm9yIFREWCBpcyBkZXRlY3RlZCBhbmQgZW5hYmxlZCwgb3IgYXQgbGVhc3QgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIHBhdGggdG8gZW5hYmxlIFREWCBzdXBwb3J0LgoKSSYjMzk7ZCB3YW50IHRvIGtub3cgd2hhdCBjaGVja3MgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBoYXJkd2FyZSBjb21wYXRpYmlsaXR5OyB0aGlzIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhcyB3ZWxsLgoKVGhpcyBsaW5lIGlzIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgb2YgY291cnNlLiBJJiMzOTtkIGJlIGRpZ2dpbmcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCBvdGhlciBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSB0byBLVk0gdG8gYWNjb21tb2RhdGUgVERYLiBTcGVjaWZpY2FsbHksIEkmIzM5O2Qgd2FudCB0byBjaGVjayBob3cgdGhlIFZNIGVudHJ5IGFuZCBleGl0IHBhdGhzIGFyZSBhbHRlcmVkIHRvIGhhbmRsZSB0aGUgVERYJiMzOTtzIHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucywgdGhlIGhhbmRsaW5nIG9mIFREWC1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgYW55IGNoYW5nZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSYjMzk7ZCBhbHNvIGJlIHZlcnkgaW50ZXJlc3RlZCBpbiBhbnkgbmV3IG9yIG1vZGlmaWVkIHNlY3VyaXR5LXJlbGF0ZWQgY29kZS4KClRoaXMgaXMgYSBrZXkgc3RlcCB0b3dhcmRzIGVuYWJsaW5nIFREWCBpbiBLVk0uIEl0JiMzOTtzIHRoZSBkZWNsYXJhdGlvbiBvZiBpbnRlbnQsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggbW9yZSBjb21wbGV4IGludGVncmF0aW9uIGlzIGJ1aWx0LiBJdOKAmXMgYW4gZXhjaXRpbmcgZGV2ZWxvcG1lbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDU4Olx0c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxuMTA1OTpcdHtcbjEwNjA6XHRcdHVuc2lnbmVkIHZjcHVfc2l6ZSwgdmNwdV9hbGlnbjtcbjEwNjE6XHRcdGludCByO1xuMTA2MjpcdFxuMTA2MzpcdFx0ciA9IHZteF9pbml0KCk7XG4xMDY0Olx0XHRpZiAocilcbjEwNjU6XHRcdFx0cmV0dXJuIHI7XG4xMDY2Olx0XG4xMDY3Olx0XHQvKlxuMTA2ODpcdFx0ICogVERYIGFuZCBWTVggaGF2ZSBkaWZmZXJlbnQgdkNQVSBzdHJ1Y3R1cmVzLiAgQ2FsY3VsYXRlIHRoZVxuMTA2OTpcdFx0ICogbWF4aW11bSBzaXplL2FsaWduIHNvIHRoYXQga3ZtX2luaXQoKSBjYW4gdXNlIHRoZSBsYXJnZXJcbjEwNzA6XHRcdCAqIHZhbHVlcyB0byBjcmVhdGUgdGhlIGttZW1fdmNwdV9jYWNoZS5cbjEwNzE6XHRcdCAqL1xuMTA3MjpcdFx0dmNwdV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3ZteCk7XG4xMDczOlx0XHR2Y3B1X2FsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHZjcHVfdm14KTtcbjEwNzQ6XHRcdGlmIChlbmFibGVfdGR4KSB7XG4xMDc1Olx0XHRcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXG4xMDc2Olx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZjcHVfdGR4KSk7XG4xMDc3Olx0XHRcdHZjcHVfYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9hbGlnbixcbjEwNzg6XHRcdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xuMTA3OTpcdFx0XHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcbjEwODA6XHRcdH1cbjEwODE6XHRcbjEwODI6XHRcdC8qXG4xMDgzOlx0XHQgKiBDb21tb24gS1ZNIGluaXRpYWxpemF0aW9uIF9tdXN0XyBjb21lIGxhc3QsIGFmdGVyIHRoaXMsIC9kZXYva3ZtIGlzXG4xMDg0Olx0XHQgKiBleHBvc2VkIHRvIHVzZXJzcGFjZSFcbjEwODU6XHRcdCAqL1xuMTA4NjpcdFx0ciA9IGt2bV9pbml0KHZjcHVfc2l6ZSwgdmNwdV9hbGlnbiwgVEhJU19NT0RVTEUpO1xuMTA4NzpcdFx0aWYgKHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTkwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk1fWDg2X1REWF9WTSBTdXBwb3J0KioKCkFscmlnaHQsIHNvIHRoZSBjb2RlIHNheXMgdGhhdCBgS1ZNX1g4Nl9URFhfVk1gIGlzIG9ubHkgZW5hYmxlZCBpZiBgZW5hYmxlX3RkeGAgaXMgdHJ1ZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgb2YgY291cnNlLCBidXQgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgYGVuYWJsZV90ZHhgIHZhcmlhYmxlLiBXaGVyZSBpcyBpdCBkZWZpbmVkPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgbW9kdWxlIHBhcmFtZXRlciwgb3Igc29tZXRoaW5nIHNldCBkeW5hbWljYWxseSBhdCBydW50aW1lPyBBbmQgY3J1Y2lhbGx5LCAqaG93KiBpcyBpdHMgdmFsdWUgYWN0dWFsbHkgZGV0ZXJtaW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBlbmFibGVfdGR4YCBiZWluZyBzZXQgdG8gdHJ1ZSBvciBmYWxzZS4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUga2V5IGluc2lnaHRzIHRoYXQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVfdGR4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2PXN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTgtXHQvKiBOb3RlLCBURFggKmFuZCogVk1YIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVERYIGlzIGVuYWJsZWQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjAtXHRcdHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcdHJldHVybiBlbmFibGVfdGR4ID8gdGR4X2hhcmR3YXJlX3NldHVwKCkgOiAwO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1PXN0YXRpYyB2b2lkIHZ0X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3Olx0aWYgKGVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zOC1cdFx0dGR4X2hhcmR3YXJlX3Vuc2V0dXAoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDczLVx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc0Olx0aWYgKGVuYWJsZV90ZHgpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzUtXHRcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01NS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTY6Ym9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ4MC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ4MTpcdGlmICghZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ4Mi1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM2LXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1Mzc6XHRlbmFibGVfdGR4ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzOC1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTItXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEzOmV4dGVybiBib29sIGVuYWJsZV90ZHg7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTg1PVREWF9CVUlMRF9URFZQU19BQ0NFU1NPUlMoNjQsIFNUQVRFX05PTl9BUkNILCBzdGF0ZV9ub25fYXJjaCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODctI2Vsc2VcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTg4OiNkZWZpbmUgZW5hYmxlX3RkeFx0MFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzI4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgVERYIE1vZHVsZSBhbmQgSGFyZHdhcmUgU2V0dXAqKgoKQWxyaWdodCwgc28gYGVuYWJsZV90ZHhgIGlzIGJlaW5nIHRyZWF0ZWQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgaXQgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbCBvdmVyIHdoZXRoZXIgVERYIGlzIGV2ZW4gYXR0ZW1wdGVkLiBOb3csIGxvb2tpbmcgYXQgYHRkeF9oYXJkd2FyZV9zZXR1cGAsIGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYW4gZWFybHkgZXhpdCBjb25kaXRpb246IGBpZiAoIWVuYWJsZV90ZHgpIHJldHVybiAwO2AuIEhtbSwgc28gaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGRpc2FibGUgVERYLCB0aGUgZW50aXJlIGhhcmR3YXJlIHNldHVwIGZ1bmN0aW9uIGlzIHNraXBwZWQsIHJldHVybmluZyB6ZXJvLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0JiMzOTtzIGEgY2xlYW4gd2F5IHRvIGJhaWwgb3V0IGlmIHRoZSB1c2VyIGRvZXNuJiMzOTt0IHdhbnQgaXQuCgpEaWdnaW5nIGZ1cnRoZXIgZG93biwgSSBzZWUgdGhpcyBgc3VjY2Vzc19kaXNhYmxlX3RkeDpgIGxhYmVsLCBhbmQgdGhlbiBgZW5hYmxlX3RkeCA9IDA7YCBmb2xsb3dlZCBieSBgcmV0dXJuIDA7YC4gVGhpcyBzdWdnZXN0cyBhIHN1Y2Nlc3NmdWwgcGF0aCAqdGhyb3VnaCogdGhlIGhhcmR3YXJlIHNldHVwLCB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgaW5pdGlhbGx5IHRyeSB0byBlbmFibGUgVERYLCBidXQgdGhlbiBkaXNhYmxlcyBpdCBhdCB0aGUgZW5kLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgYmUgYSBjbGVhbnVwIG9yIGZhbGxiYWNrIG1lY2hhbmlzbS4gUGVyaGFwcyBpdCBhdHRlbXB0cyB0byBlbmFibGUgVERYIGFuZCB0aGVuIGRpc2FibGVzIGl0IGlmIHRoZXJlIGFyZSBpc3N1ZXMsIG9yIHBlcmhhcHMgaXQmIzM5O3MgYSByZXNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgVERYIGNvbmZpZ3VyYXRpb24uIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlIGJldHRlci4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCBnZXRzIHRvIHRoYXQgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDczOlx0aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbjM0NzQ6XHR7XG4zNDc1Olx0XHRpbnQgciwgaTtcbjM0NzY6XHRcbjM0Nzc6XHRcdC8qIHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpIHVzZXMgYXNzb2NpYXRlZF90ZHZjcHVzLiAqL1xuMzQ3ODpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXG4zNDc5Olx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlcl9jcHUoYXNzb2NpYXRlZF90ZHZjcHVzLCBpKSk7XG4zNDgwOlx0XG4zNDgxOlx0XHRpZiAoIWVuYWJsZV90ZHgpXG4zNDgyOlx0XHRcdHJldHVybiAwO1xuMzQ4MzpcdFxuMzQ4NDpcdFx0aWYgKCFlbmFibGVfZXB0KSB7XG4zNDg1Olx0XHRcdHByX2VycihcJiMzNDtFUFQgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4zNDg2Olx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM0ODc6XHRcdH1cbjM0ODg6XHRcbjM0ODk6XHRcdGlmICghdGRwX21tdV9lbmFibGVkIHx8ICFlbmFibGVfbW1pb19jYWNoaW5nIHx8ICFlbmFibGVfZXB0X2FkX2JpdHMpIHtcbjM0OTA6XHRcdFx0cHJfZXJyKFwmIzM0O1REUCBNTVUgYW5kIE1NSU8gY2FjaGluZyBhbmQgRVBUIEEvRCBiaXQgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4zNDkxOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM0OTI6XHRcdH1cbjM0OTM6XHRcbjM0OTQ6XHRcdGlmICghZW5hYmxlX2FwaWN2KSB7XG4zNDk1Olx0XHRcdHByX2VycihcJiMzNDtBUElDdiBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjM0OTY6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzQ5NzpcdFx0fVxuMzQ5ODpcdFxuMzQ5OTpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX09TWFNBVkUpKSB7XG4zNTAwOlx0XHRcdHByX2VycihcJiMzNDt0ZHg6IE9TWFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4zNTAxOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM1MDI6XHRcdH1cbjM1MDM6XHRcbjM1MDQ6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcbjM1MDU6XHRcdFx0cHJfZXJyKFwmIzM0O1REWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxuXCYjMzQ7KTtcbjM1MDY6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzUwNzpcdFx0fVxuMzUwODpcdFxuMzUwOTpcdFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XG4zNTEwOlx0XHRpZiAocikge1xuMzUxMTpcdFx0XHQvKlxuMzUxMjpcdFx0XHQgKiBEaXNhYmxlIFREWCBvbmx5IGJ1dCBkb24mIzM5O3QgZmFpbCB0byBsb2FkIG1vZHVsZSBpZiB0aGUgVERYXG4zNTEzOlx0XHRcdCAqIG1vZHVsZSBjb3VsZCBub3QgYmUgbG9hZGVkLiAgTm8gbmVlZCB0byBwcmludCBtZXNzYWdlIHNheWluZ1xuMzUxNDpcdFx0XHQgKiBcJiMzNDttb2R1bGUgaXMgbm90IGxvYWRlZFwmIzM0OyBiZWNhdXNlIGl0IHdhcyBwcmludGVkIHdoZW4gdGhlIGZpcnN0XG4zNTE1Olx0XHRcdCAqIFNFQU1DQUxMIGZhaWxlZC4gIERvbiYjMzk7dCBib3RoZXIgdW53aW5kaW5nIHRoZSBTLUVQVCBob29rcyBvclxuMzUxNjpcdFx0XHQgKiB2bV9zaXplLCBhcyBrdm1feDg2X29wcyBoYXZlIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQgKGFuZCBhcmVcbjM1MTc6XHRcdFx0ICogaW50ZW50aW9uYWxseSBub3QgZXhwb3J0ZWQpLiAgVGhlIFMtRVBUIGNvZGUgaXMgdW5yZWFjaGFibGUsXG4zNTE4Olx0XHRcdCAqIGFuZCBhbGxvY2F0aW5nIGEgZmV3IG1vcmUgYnl0ZXMgcGVyIFZNIGluIGEgc2hvdWxkLWJlLXJhcmVcbjM1MTk6XHRcdFx0ICogZmFpbHVyZSBzY2VuYXJpbyBpcyBhIG5vbi1pc3N1ZS5cbjM1MjA6XHRcdFx0ICovXG4zNTIxOlx0XHRcdGlmIChyID09IC1FTk9ERVYpXG4zNTIyOlx0XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU1OQoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDI4ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFVucmVhY2hhYmxlIENvZGUgUGF0aHMgaW4gU3RhbmRhcmQgRnV6emluZyBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gdGhlIGNvZGUgY2hlY2tzIGZvciBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gLiBJZiB0aGF0JiMzOTtzIG5vdCB0aGVyZSwgYGVuYWJsZV90ZHhgIGlzIHNldCB0byAwLiAgVGhhdCBtZWFucyB0aGUgYEtWTV9YODZfVERYX1ZNYCBmZWF0dXJlIHdvbiYjMzk7dCBiZSBhZHZlcnRpc2VkLCBzbyBzeXprYWxsZXIgY2FuJiMzOTt0IGV2ZW4gKmNyZWF0ZSogYSBURFggVk0uICBUaHVzLCBhbnkgY29kZSBwYXRocyByZWxhdGVkIHRvIFREWCBhcmUgdG90YWxseSBpbmFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc2V0dXAgZm9yIGZ1enppbmcuICBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4KCkNhbiBRRU1VIGZha2UgaXQ/ICBObywgdGhhdCB3b24mIzM5O3Qgd29yay4gIFREWCBuZWVkcyB0aGUgVERYIG1vZHVsZSwgd2hpY2ggaXMgYSBzaWduZWQgYmluYXJ5IGZyb20gSW50ZWwgdGhhdCBydW5zIGluIGEgc3BlY2lhbCBDUFUgbW9kZSAoU0VBTSBWTVggcm9vdCkuIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0LCBub3IgZG9lcyBpdCBlbXVsYXRlIHRoZSBoYXJkd2FyZSBlbmNyeXB0aW9uIGVuZ2luZXMgKE1LVE1FKSBURFggcmVsaWVzIG9uLiAgU28sIG5vIGRpY2UuIFRoaXMgVERYIHN0dWZmIGlzIGRlZmluaXRlbHkgbm90IHNvbWV0aGluZyB0aGF0JiMzOTtzIGZ1enplYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LgoKQnV0IHdoYXQgYWJvdXQgdGhvc2UgY2hhbmdlcyBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oYD8gTGV0JiMzOTtzIHNlZS4uLiAgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGlzIGV4dHJhY3RlZCBhbmQgdXNlZC4gSXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0IHJlZmFjdG9yaW5nOyB0aGUgbG9naWMgc2VlbXMgaWRlbnRpY2FsLiBBbmQgYWxzbyBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMgY2hhbmdlZCBmcm9tIGBzdGF0aWNgIHRvIGBnbG9iYWxgLiBPa2F5LCBzbyBqdXN0IHJlZmFjdG9yaW5nLiBOb3RoaW5nIGZ1bmN0aW9uYWwuCgpTbywgdGhlICpvbmx5KiBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGluIGB0ZHguY2AgYW5kIHRob3NlIGFyZSB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBURFggaGFyZHdhcmUuIExldCYjMzk7cyBkb3VibGUgY2hlY2suIEFoLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgaXMgb25seSBjYWxsZWQgaW4gYHRkeF92Y3B1X2VudGVyX2V4aXRgIGFuZCBgdGR4X2ZhaWxlZF92bWVudHJ5YCwgYWxsIGluc2lkZSBgdGR4LmNgLiBHb3QgaXQsIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpXYWl0LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMuICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHRoYXQgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4uLiYjMzQ7ICBPa2F5LCBURFggcmVxdWlyZXMgaGFyZHdhcmUsIG5vdCBlbXVsYXRlZCBieSBRRU1VLCBhbmQgdGhlIHJlc3QgaXMganVzdCByZWZhY3RvcmluZy4gVGhpcyBwYXRjaCBpcyBhIG5vLWdvIGZvciBzdGFuZGFyZCBmdXp6aW5nLgoKT2theSwgaXMgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGlubGluZWQsIGNvdWxkIHRoYXQgY2hhbmdlIGFueXRoaW5nIGluIGB2bXguY2A/IEl0ICpjb3VsZCosIGJ1dCBpdCYjMzk7cyBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSwganVzdCB0aGUgc2FtZSBsb2dpYyBtb3ZlZCBhcm91bmQuICBMZXQmIzM5O3MgdmVyaWZ5LiBMZXQgbWUgbG9vayBhdCB0aGUgY29kZTogIE9yaWdpbmFsIGBoYW5kbGVfbm90aWZ5YCwgYW5kIHRoZSBuZXcgb25lLiBUaGUgbG9naWMgaXMgdGhlIHNhbWU6IHRoZSBgdm1jc19zZXRfYml0c2AgaXMgdW5jaGFuZ2VkLiBXYWl0LCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBjaGFuZ2VkIHNsaWdodGx5IGluIHRoZSBuZXcgY29kZSwgYCYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7YCBpcyBub3cgY2FsbGVkICphZnRlciogYHZtY3Nfc2V0X2JpdHNgLiAgRG9lcyB0aGlzIG1hdHRlcj8gTm8sIGAmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO2AgaXMganVzdCBhIHN0YXQgY291bnRlciwgYW5kIGB2bWNzX3NldF9iaXRzYCBkb2VzICpub3QqIGRlcGVuZCBvbiB0aGF0IG9yIHRoZSBjb250ZXh0IGludmFsaWQgZmxhZy4gU28gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIHplcm8uCgpUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggaXMganVzdCBgdGR4LmNgIHdoaWNoLCBhZ2FpbiwgaXMgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgc3VwcG9ydC4KCkxldCYjMzk7cyBkbyBvbmUgbGFzdCBjaGVjay4gSXMgdGhlcmUgYW55IHdheSB0byByZWFjaCBgdGR4X2hhbmRsZV9leGl0YCBpbmRpcmVjdGx5PyAgYHZ0X2hhbmRsZV9leGl0YCBjYWxscyBpdCBpZiBgaXNfdGRfdmNwdSh2Y3B1KWAuIGBpc190ZF92Y3B1YCBjaGVja3MgaWYgYGlzX3RkKHZjcHUtJmd0O2t2bSlgLiBgaXNfdGRgIGNoZWNrcyBga3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk1gLiBBbmQgdGhhdCByZXF1aXJlcyBgZW5hYmxlX3RkeGAsIHdoaWNoIHJlcXVpcmVzIHRoZSBoYXJkd2FyZS4gR290IGl0LiBJbXBvc3NpYmxlIHRvIHJlYWNoLgoKT2theSwgdGhlIGNoYW5nZXMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBJJiMzOTttIGdvaW5nIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IFREWCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS9HQ0UsIGFuZCB0aGUgcmVzdCBpcyBqdXN0IHJlZmFjdG9yaW5nIG9mIGV4aXN0aW5nIFZNWCBjb2RlLCB3aXRoIG5vIGNoYW5nZSB0byB0aGUgZ2VuZXJhdGVkIGNvZGUuCgpMZXQmIzM5O3MganVzdCBxdWlja2x5IHJldmlldyB0aGUgcmVzdCBvZiB0aGUgY2hhbmdlcy4gVGhlIGNoYW5nZXMgb2YgYHRkeF90b192bXhfZXhpdF9yZWFzb25gIGFyZSBhbHNvIFREWCBzcGVjaWZpYy4gVGhpcyBsb29rcyBnb29kLgpFdmVyeXRoaW5nIGlzIFREWCBzcGVjaWZpYyBleGNlcHQgdGhlIHJlZmFjdG9yaW5nLiBJJiMzOTttIGNvbmZpZGVudC4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBzdXBwb3J0IChJbnRlbCBURFgpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIHRvIHN0YW5kYXJkIFZNWCBjb2RlIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgbG9naWMgd2l0aCBURFgsIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1NDwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTI6MzYuOTAzNTE4MTE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTY0MTEzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjM2LjkwMzUyMzA3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwOTA2OTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY2YjQ2YjA1ODg5OWJkMGY0OTZiNTJkN2IxOTEzM2E4MWU4MWVlOWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTI6NTI6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5pbmRleCAwODAwNTY3NjcwMmMyLi4yY2JhYTlhYmE5MDFjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXFxuQEAgLTQsNiArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3ZteC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm1tdS5oXFxcIlxcbiBcXG5AQCAtMTgzLDYgKzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcXG4re1xcbitcXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XFxuK1xcbitcXHQrK3ZjcHUtXFx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XFxuK1xcdCAgICBjb250ZXh0X2ludmFsaWQpIHtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xcbitcXHRcXHRcXHRcXHRcXHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggYjI3MmMyMDU4NmE3NC4uYWMzZjcxNjQzY2Q1ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC05MjEsMTAgKzkyMSwxMCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIEVYSVRfUkVBU09OX1REQ0FMTDtcXG4gfVxcbiBcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbi1cXHR1MzIgZXhpdF9yZWFzb247XFxuK1xcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjtcXG4gXFxuIFxcdHN3aXRjaCAodGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQgXFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcXG4gXFx0Y2FzZSBURFhfU1VDQ0VTUzpcXG5AQCAtOTM0LDIzICs5MzQsMzMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gLTF1O1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTeW50aGVzaXplIGFuIGludmFsaWQgYm9ndXMgRXhpdCBSZWFzb24sIGFzIHRoZSBURFgtTW9kdWxlXFxuK1xcdFxcdCAqIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQgUmVhc29uIGlzXFxuK1xcdFxcdCAqIHVuZGVmaW5lZCwgYnV0IHRoaXMgaXMgTk9UIGEgZmFpbGVkIFZNLUVudGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcXG4rXFx0XFx0XFx0LmJhc2ljID0gLTEsXFxuK1xcdFxcdH07XFxuIFxcdH1cXG4gXFxuLVxcdGV4aXRfcmVhc29uID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQ7XFxuK1xcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cXHUwMDNldnBfZW50ZXJfcmV0O1xcbiBcXG4tXFx0c3dpdGNoIChleGl0X3JlYXNvbikge1xcbitcXHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fVERDQUxMOlxcbiBcXHRcXHRpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xcbi1cXG4tXFx0XFx0cmV0dXJuIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdFxcdFxcdGV4aXRfcmVhc29uLmJhc2ljID0gRVhJVF9SRUFTT05fVk1DQUxMO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzpcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxcbiBcXHRcXHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gLTF1O1xcbitcXHRcXHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xcbitcXHRcXHRcXHQuYmFzaWMgPSAtMSxcXG4rXFx0XFx0fTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtOTY3LDcgKzk3Nyw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHR0ZHgtXFx1MDAzZXZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcihcXHUwMDI2dGR4LVxcdTAwM2V2cCwgXFx1MDAyNnRkeC1cXHUwMDNldnBfZW50ZXJfYXJncyk7XFxuIFxcbi1cXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdHZ0LVxcdTAwM2VleGl0X3JlYXNvbiA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuIFxcbiBcXHR2dC1cXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcXG4gXFx0dGR4LVxcdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzLnJkeDtcXG5AQCAtOTgxLDggKzk5MSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xcbitcXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcXG4gfVxcbiBcXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xMDcxLDggKzEwODAsMTAgQEAgZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXHQgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmRcXG4gXFx0ICogVERDQUxMcy5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxcbitcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xcbitcXHRcXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSAwO1xcbiBcXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XFxuK1xcdH1cXG4gXFxuIFxcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXFx1MDAyNiBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTtcXG4gXFxuQEAgLTIwMjgsNyArMjAzOSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcXG4gfVxcbiBcXG4gXFxuLWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbitzdGF0aWMgaW50IF9fdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFx0dTY0IHZwX2VudGVyX3JldCA9IHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0O1xcbkBAIC0yMTI2LDYgKzIxMzcsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIFxcdFxcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxcbitcXHRcXHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXFxuK1xcdFxcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcXG4rXFx0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcXG4rXFx0XFx0cmV0dXJuIGhhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTIxMzUsMTMgKzIxNTEsMjkgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG4re1xcbitcXHRpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbitcXG4rXFx0LyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovXFxuK1xcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxcbiBcXHRcXHR1NjQgKmluZm8xLCB1NjQgKmluZm8yLCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXG4gXFx0KnJlYXNvbiA9IHRkeC1cXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcXG4tXFx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XFxuK1xcdGlmICh0ZHgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmJhc2ljICE9IC0xKSB7XFxuIFxcdFxcdCppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRcXHQqaW5mbzIgPSB0ZHgtXFx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XFxuIFxcdFxcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG5AQCAtMzE1NCw2ICszMTg2LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbiBcXHR0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoXFx1MDAyNnRkeC1cXHUwMDNldnQucGlfZGVzYykpO1xcbiBcXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcXG4gXFxuK1xcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXFxuK1xcdFxcdFxcdFxcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XFxuK1xcdFxcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXFxuK1xcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfd2luZG93KTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcXG4rXFx0XFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXFxuK1xcdFxcdFxcdFxcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xcbitcXG4gXFx0dGR4LVxcdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCBlM2JmZTZhY2ExYTBlLi5jNDI5ZGI5YjkyMDU3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTYyNjUsNyArNjI2NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXFxuIFxcbi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXFxuQEAgLTYyNzksOSArNjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4tXFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xcbi1cXG4tXFx0Kyt2Y3B1LVxcdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcXG5AQCAtNjI5MSwxNSArNjI4OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxcbiBcXHRcXHRcXHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XFxuIFxcbi1cXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxcbi1cXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cXG4tXFx0XFx0XFx0XFx0XFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIF9fdm14X2hhbmRsZV9ub3RpZnkodmNwdSwgZXhpdF9xdWFsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTM3OSw2ICszNzksNyBAQCBib29sIF9fdm14X3ZjcHVfcnVuKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuIHZvaWQgdm14X3NldF9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIGludCB0eXBlLCBib29sIHNldCk7XFxuK2ludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIG1zciwgaW50IHR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjM4LjMxMzI5MDI3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTc1NDMyOTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2YjQ2YjA1ODg5OWJkMGY0OTZiNTJkN2IxOTEzM2E4MWU4MWVlOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMjo1MjozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5pbmRleCAwODAwNTY3NjcwMmMyLi4yY2JhYTlhYmE5MDFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4gXG5AQCAtMTgzLDYgKzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBfX3ZteF9oYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKVxuK3tcbitcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuK1xuK1x0Kyt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbitcbitcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4rXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4rXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuK1x0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uYWMzZjcxNjQzY2Q1ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC05MjEsMTAgKzkyMSwxMCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBFWElUX1JFQVNPTl9URENBTEw7XG4gfVxuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuLVx0dTMyIGV4aXRfcmVhc29uO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuIFxuIFx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG5AQCAtOTM0LDIzICs5MzQsMzMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVERfV1JPTkdfQVBJQ19NT0RFOlxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtMXU7XG4rXHRcdC8qXG4rXHRcdCAqIFN5bnRoZXNpemUgYW4gaW52YWxpZCBib2d1cyBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWC1Nb2R1bGVcbitcdFx0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXNcbitcdFx0ICogdW5kZWZpbmVkLCBidXQgdGhpcyBpcyBOT1QgYSBmYWlsZWQgVk0tRW50ZXIuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xuK1x0XHRcdC5iYXNpYyA9IC0xLFxuK1x0XHR9O1xuIFx0fVxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuK1x0ZXhpdF9yZWFzb24uZnVsbCA9ICh1MzIpdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbitcdHN3aXRjaCAoZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fVERDQUxMOlxuIFx0XHRpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKVxuLVx0XHRcdHJldHVybiBFWElUX1JFQVNPTl9WTUNBTEw7XG4tXG4tXHRcdHJldHVybiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gRVhJVF9SRUFTT05fVk1DQUxMO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzpcbiBcdFx0LypcbiBcdFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxuIFx0XHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gLTF1O1xuK1x0XHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xuK1x0XHRcdC5iYXNpYyA9IC0xLFxuK1x0XHR9O1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtOTY3LDcgKzk3Nyw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHR2dC1cdTAwM2VleGl0X3JlYXNvbiA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4gXG4gXHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yY3g7XG4gXHR0ZHgtXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJkeDtcbkBAIC05ODEsOCArOTkxLDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4rXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCArMTA4MCwxMCBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHQgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmRcbiBcdCAqIFREQ0FMTHMuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSlcbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xuK1x0XHR2dC1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IDA7XG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDtcbitcdH1cbiBcbiBcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXHUwMDI2IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpO1xuIFxuQEAgLTIwMjgsNyArMjAzOSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcbiB9XG4gXG4gXG4taW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4rc3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbkBAIC0yMTI2LDYgKzIxMzcsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIDE7XG4rXHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcbitcdFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xuK1x0XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4rXHRjYXNlIEVYSVRfUkVBU09OX0JVU19MT0NLOlxuK1x0XHRyZXR1cm4gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTIxMzUsMTMgKzIxNTEsMjkgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4re1xuK1x0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbitcbitcdC8qIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIHdhcyBkZXRlY3RlZCAqL1xuK1x0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbitcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuK1x0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdH1cbitcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXG4gXHRcdHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdGR4LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcbitcdGlmICh0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uYmFzaWMgIT0gLTEpIHtcbiBcdFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG5AQCAtMzE1NCw2ICszMTg2LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbitcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbitcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4rXHRcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV93aW5kb3cpO1xuK1x0fVxuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7XG4rXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLmM0MjlkYjliOTIwNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjI2NSw3ICs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0LypcbiBcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuQEAgLTYyNzksOSArNjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuLVx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4tXG4tXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgKzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbiBcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG4gXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuLVx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbi1cdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICszNzksNyBAQCBib29sIF9fdm14X3ZjcHVfcnVuKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIHZvaWQgdm14X2VwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHZvaWQgdm14X3NldF9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIGludCB0eXBlLCBib29sIHNldCk7XG4raW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCB1MzIgbXNyLCBpbnQgdHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjM4LjMxMzI5MTU1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NzY2MTg5MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBURFggUGF0Y2gncyBGdXp6YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWFraW5nIGNoYW5nZXMgdG8gS1ZNIFREWCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AsIGFuZCByZWxhdGVkIGhlYWRlcnMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGhhbmRsaW5nIGBFWElUX1JFQVNPTl9OT1RJRllgIGFuZCBgRVhJVF9SRUFTT05fQlVTX0xPQ0tgIGluIFREWCBhbmQgYWxzbyByZWZhY3RvcmluZyBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAuIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyB3YXJyYW50cyBmdXp6aW5nIGVmZm9ydC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgVERYIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgVERYIHJlcXVpcmVzIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIGFuZCB0aGF0IHRocm93cyB1cCBhIHJlZCBmbGFnLiBTdGFuZGFyZCBRRU1VIG9yIEdDRSBpbnN0YW5jZXMgbWlnaHQgKm5vdCogaGF2ZSB0aGF0IGhhcmR3YXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgc3l6a2FsbGVyIGNhbiB1c2UgdGhpcy4gU3l6a2FsbGVyIGhlYXZpbHkgdXNlcyBgL2Rldi9rdm1gLiBJZiB0aGUgaG9zdCBkb2Vzbid0IHN1cHBvcnQgVERYLCBgS1ZNX0NBUF9WTV9UWVBFU2Agd29uJ3QgYWR2ZXJ0aXNlIGl0LCBhbmQgY3JlYXRpbmcgYSBWTSB3aXRoIFREWCB3aWxsIGZhaWwuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBzaG91bGQgYmUgZmxhZ2dlZCBhcyBub3Qgd29ydGggZnV6emluZy4gT2theSwgc28gaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGFyZSBhbiBpc3N1ZSBoZXJlLiBOZXN0ZWQgVERYIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IG9yIHJlcXVpcmVzIGhhcmR3YXJlIHN1cHBvcnQuXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCAqYWxzbyogdG91Y2hlcyBgdm14LmNgLCBhbmQgSSBrbm93IHRoYXQgVk1YIGlzIGhlYXZpbHkgZnV6emVkLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcgY29kZSB0byBleHRyYWN0IGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIHRvIGJlIHVzZWQgaW4gYm90aCBgdm14LmNgIGFuZCBgdGR4LmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIG5vdCBmdW5kYW1lbnRhbGx5IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdXMgdG8gdGFyZ2V0IGl0IGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cblxuSSBkdWcgaW50byB0aGUgY2hhbmdlcyBpbiBgdm14LmNgLiBJdCBsb29rcyBsaWtlIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBpcyBqdXN0IGNoYW5naW5nIGl0cyBsaW5rYWdlIGZyb20gc3RhdGljIHRvIGdsb2JhbC4gQWxzbywgdGhlIGBoYW5kbGVfbm90aWZ5YCBmdW5jdGlvbiBpbiBgdm14LmNgIGlzIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSBsb2dpYyBpcyBtb3ZlZCB0byBgX192bXhfaGFuZGxlX25vdGlmeWAgaW4gYGNvbW1vbi5oYC4gU28sIHRoZXJlIGFyZSBubyAqZnVuY3Rpb25hbCogY2hhbmdlcyBpbiB0aGUgc3RhbmRhcmQgVk1YIGNvZGUuIFRoaXMgaXMgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGNvZGUgd2l0aCBURFguIFRoaXMgbWVhbnMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbWFpbmx5IGluIGB0ZHguY2Agd2hlcmUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBgRVhJVF9SRUFTT05fTk9USUZZYCBhbmQgYEVYSVRfUkVBU09OX0JVU19MT0NLYCBhcmUgaW1wbGVtZW50ZWQsIGFsb25nIHdpdGggcmVmYWN0b3JpbmcgYHRkeF90b192bXhfZXhpdF9yZWFzb25gLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGNhbiB3ZSBmdXp6IHRoZSAqVERYKiBwYXJ0cz8gSSdtIHByZXR0eSBzdXJlIHRoYXQgc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdvbid0IHN1cHBvcnQgaXQgYmVjYXVzZSBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudC4gR0NFICpkb2VzKiBoYXZlIFREWCBpbnN0YW5jZXMsIGxpa2UgQzMgaW5zdGFuY2VzLCBidXQgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cyB1c3VhbGx5IHJ1biBvbiBnZW5lcmljIGluc3RhbmNlcyBvciBRRU1VIHdpdGhvdXQgVERYIGhhcmR3YXJlLiBURFggcmVsaWVzIG9uIHRoZSBURFggbW9kdWxlIChTRUFNKSBhbmQgaGFyZHdhcmUgZW5jcnlwdGlvbiBhbmQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHNvZnR3YXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgdGR4X2hhbmRsZV9leGl0YCBpcyByZWFjaGFibGUuIEkgd2lsbCBzZWFyY2ggZm9yIHVzYWdlcyBvZiBgdGR4X2hhbmRsZV9leGl0YCBhbmQgYHRkeF90b192bXhfZXhpdF9yZWFzb25gLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRob3NlIGV4aXQgcmVhc29ucyBhcmUgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjU3LjA3OTQ4NDA5OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkyMDk3NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9oYW5kbGVfZXhpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNTc9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjAtXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTYxOlxcdFxcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9OTI0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NTctXFx0XFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk1ODpcXHRcXHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NTktXFx0XFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xMTQzPXN0YXRpYyBpbnQgdGR4X2hhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTE0OC1cXHQgKiBNYWNoaW5lIGNoZWNrcyBhcmUgaGFuZGxlZCBieSBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZigpLCBvciBieVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTE0OTpcXHQgKiB0ZHhfaGFuZGxlX2V4aXQoKSB3aXRoIFREWF9OT05fUkVDT1ZFUkFCTEUgc2V0IGlmIGEgI01DIG9jY3VycyBvblxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTE1MC1cXHQgKiBWTS1FbnRyeS4gIE5NSXMgYXJlIGhhbmRsZWQgYnkgdGR4X3ZjcHVfZW50ZXJfZXhpdCgpLlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDI4PWludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjA0MS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIwNDI6c3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE1My1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNTQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTU1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNTY6XFx0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xNDM9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxNDQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTQ1LVxcdFxcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MDAuMDcxNTg4ODk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDk1NTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFREIHZDUFUgRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBoYW5kbGUgZXhpdHMgcmVsYXRlZCB0byBURCB2aXJ0dWFsIENQVXMuIFNwZWNpZmljYWxseSwgdGhlIGB0ZHhfaGFuZGxlX2V4aXRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHZ0X2hhbmRsZV9leGl0YCwgYnV0IG9ubHkgaWYgdGhlIENQVSBpbiBxdWVzdGlvbiAoYHZjcHVgKSBpcywgaW4gZmFjdCwgYSBURCB2Q1BVLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgSSdtIGZvY3VzaW5nIG9uIG5vdyBpcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY3JlYXRlIGEgVEQgdkNQVSBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2Vzbid0IG9mZmVyIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydC4gSXQgbWFrZXMgbWUgY3VyaW91cyBhYm91dCB0aGUgYXNzdW1wdGlvbnMgYmFrZWQgaW50byB0aGUgZGVzaWduLiBUbyBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5kIGNsYXJpZnkgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIEkgc2hvdWxkIHJlLWV4YW1pbmUgdGhlIGBpc190ZF92Y3B1YCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIENQVSBpcyBhIFREIHZDUFUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhlIGxvZ2ljIGNvdmVycyB0aGUgcG9zc2liaWxpdHkgb2YgYSBURCB2Q1BVIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjAzLjU5MjU0NzM4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyNzkxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX3RkX3ZjcHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD02MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02NS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjY2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NzM9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjc0OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzM9c3RhdGljIGludCB2dF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc2LVxcdFxcdHJldHVybiB0ZHhfdmNwdV9jcmVhdGUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MT1zdGF0aWMgdm9pZCB2dF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0LVxcdFxcdHRkeF92Y3B1X2ZyZWUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MT1zdGF0aWMgdm9pZCB2dF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTkyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5MzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk0LVxcdFxcdHRkeF92Y3B1X3Jlc2V0KHZjcHUsIGluaXRfZXZlbnQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTAxPXN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDQtXFx0XFx0dGR4X3ZjcHVfbG9hZCh2Y3B1LCBjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTExPXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMTYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTE3OlxcdGlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTE4LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEyMz1zdGF0aWMgdm9pZCB2dF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTI0LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMjU6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMjYtXFx0XFx0dGR4X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTMzPXN0YXRpYyB2b2lkIHZ0X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMzQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzNTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEzNi1cXHRcXHR0ZHhfdmNwdV9wdXQodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNDM9c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTQ0LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNDU6XFx0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDYtXFx0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTQ5PXN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNTAte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE1MTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNTItXFx0XFx0cmV0dXJuIHRkeF92Y3B1X3J1bih2Y3B1LCBydW5fZmxhZ3MpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTU3PXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTU5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNjA6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTYxLVxcdFxcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTY2PXN0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTY4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY5LVxcdFxcdFdBUk5fT05fT05DRSh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE3Nj1zdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE3Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTc4OlxcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzktXFx0XFx0cmV0dXJuIHRkeF9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE5Nj1zdGF0aWMgaW50IHZ0X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE5Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk4OlxcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xOTktXFx0XFx0cmV0dXJuIHRkeF9nZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTIwND1zdGF0aWMgdm9pZCB2dF9yZWNhbGNfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMTEtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjEyOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIxMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMTg9c3RhdGljIGludCB2dF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIxOS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjIwOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIyMS1cXHRcXHRyZXR1cm4gdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcih2Y3B1LCBlcnIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjI3PXN0YXRpYyBpbnQgdnRfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjI4LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMjk6XFx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMzU9c3RhdGljIGludCB2dF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIzNi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjM3OlxcdGlmIChLVk1fQlVHX09OKGlzX3RkX3ZjcHUodmNwdSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQzPXN0YXRpYyBpbnQgdnRfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNDQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjI0NTpcXHRpZiAoS1ZNX0JVR19PTihpc190ZF92Y3B1KHZjcHUpLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI1MT1zdGF0aWMgdm9pZCB2dF9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjUyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyNTM6XFx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNTQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjYxPXN0YXRpYyBpbnQgdnRfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNzAtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjcxOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI3Mi1cXHRcXHRyZXR1cm4gWDg2RU1VTF9SRVRSWV9JTlNUUjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI3Nz1zdGF0aWMgYm9vbCB2dF9hcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjgyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjI4MzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yODQtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yODk9c3RhdGljIHZvaWQgdnRfc2V0X3ZpcnR1YWxfYXBpY19tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI5MS1cXHQvKiBPbmx5IHgyQVBJQyBtb2RlIGlzIHN1cHBvcnRlZCBmb3IgVEQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjkyOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI5My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yOTg9c3RhdGljIHZvaWQgdnRfaHdhcGljX2lzcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWF4X2lzcilcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yOTkte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMwMDpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzA2PXN0YXRpYyBpbnQgdnRfc3luY19waXJfdG9faXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDcte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMwODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDktXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzE0PXN0YXRpYyB2b2lkIHZ0X2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCBkZWxpdmVyeV9tb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzE2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMTc6XFx0aWYgKGlzX3RkX3ZjcHUoYXBpYy1cXHUwMDNldmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMTgtXFx0XFx0dGR4X2RlbGl2ZXJfaW50ZXJydXB0KGFwaWMsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTMyNj1zdGF0aWMgdm9pZCB2dF92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI3LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjg6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTMzND1zdGF0aWMgdm9pZCB2dF91cGRhdGVfZXhjZXB0aW9uX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzM1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMzY6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzM3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM0Mj1zdGF0aWMgdTY0IHZ0X2dldF9zZWdtZW50X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM0My17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzQ0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM0NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1MD1zdGF0aWMgdm9pZCB2dF9nZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzUyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNTM6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNTQtXFx0XFx0bWVtc2V0KHZhciwgMCwgc2l6ZW9mKCp2YXIpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM2MT1zdGF0aWMgdm9pZCB2dF9zZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzYzLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNjQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzY1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM3MD1zdGF0aWMgaW50IHZ0X2dldF9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3MS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzcyOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM3OD1zdGF0aWMgaW50IHZ0X2dldF9jcGxfbm9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3OS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzgwOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM4Nj1zdGF0aWMgdm9pZCB2dF9nZXRfY3NfZGJfbF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Mzg4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzg5LVxcdFxcdCpkYiA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zOTc9c3RhdGljIGJvb2wgdnRfaXNfdmFsaWRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzk4LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozOTk6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDAwLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDA1PXN0YXRpYyB2b2lkIHZ0X3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00MDYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQwNzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDEzPXN0YXRpYyBib29sIHZ0X2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQxNC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDE1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQxNi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQyMT1zdGF0aWMgdm9pZCB2dF9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDIyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0MjM6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDI0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQyOT1zdGF0aWMgaW50IHZ0X3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDMwLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0MzE6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDMyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM3PXN0YXRpYyB2b2lkIHZ0X2dldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQzOC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDM5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDQwLVxcdFxcdG1lbXNldChkdCwgMCwgc2l6ZW9mKCpkdCkpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDQ3PXN0YXRpYyB2b2lkIHZ0X3NldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ0OC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDQ5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NTU9c3RhdGljIHZvaWQgdnRfZ2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjX3B0ciAqZHQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDU2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NTc6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NTgtXFx0XFx0bWVtc2V0KGR0LCAwLCBzaXplb2YoKmR0KSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NjU9c3RhdGljIHZvaWQgdnRfc2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjX3B0ciAqZHQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDY2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0Njc6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDY4LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ3Mz1zdGF0aWMgdm9pZCB2dF9zZXRfZHI3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB2YWwpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc0LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NzU6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc2LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ4MT1zdGF0aWMgdm9pZCB2dF9zeW5jX2RpcnR5X2RlYnVnX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDg3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ4ODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00ODktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDk0PXN0YXRpYyB2b2lkIHZ0X2NhY2hlX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0ga3ZtX3JlZyByZWcpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDk1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0OTY6XFx0aWYgKFdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00OTctXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTAyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHZ0X2dldF9yZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUwMy17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTA0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUwNS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUxMD1zdGF0aWMgdm9pZCB2dF9zZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTExLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1MTI6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTEzLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUxOD1zdGF0aWMgYm9vbCB2dF9nZXRfaWZfZmxhZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTE5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1MjA6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIxLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUyNj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01Mjcte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUyODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUyOS1cXHRcXHR0ZHhfZmx1c2hfdGxiX2FsbCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUzNj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfY3VycmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTM3LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1Mzg6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MzktXFx0XFx0dGR4X2ZsdXNoX3RsYl9jdXJyZW50KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTQ2PXN0YXRpYyB2b2lkIHZ0X2ZsdXNoX3RsYl9ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTQ4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01NTQ9c3RhdGljIHZvaWQgdnRfZmx1c2hfdGxiX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NTUte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU1NjpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NTctXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTYyPXN0YXRpYyB2b2lkIHZ0X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU2My17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTY0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTY1LVxcdFxcdHRkeF9pbmplY3Rfbm1pKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTcyPXN0YXRpYyBpbnQgdnRfbm1pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NzctXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTc4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU3OS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU4ND1zdGF0aWMgYm9vbCB2dF9nZXRfbm1pX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTg5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU5MDpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTk2PXN0YXRpYyB2b2lkIHZ0X3NldF9ubWlfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWFza2VkKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU5Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTk4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU5OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MDQ9c3RhdGljIHZvaWQgdnRfZW5hYmxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjA2LVxcdC8qIFJlZmVyIHRvIHRoZSBjb21tZW50cyBpbiB0ZHhfaW5qZWN0X25taSgpLiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjYwNzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjEzPXN0YXRpYyB2b2lkIHZ0X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjE1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2MTY6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTctXFx0XFx0dGR4X2xvYWRfbW11X3BnZCh2Y3B1LCByb290X2hwYSwgcGdkX2xldmVsKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTYyND1zdGF0aWMgdm9pZCB2dF9zZXRfaW50ZXJydXB0X3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYyNS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjI2OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYyNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MzI9c3RhdGljIHUzMiB2dF9nZXRfaW50ZXJydXB0X3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjMzLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2MzQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjM1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjQwPXN0YXRpYyB2b2lkIHZ0X3BhdGNoX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NDYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjQ3OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY0OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02NTM9c3RhdGljIHZvaWQgdnRfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmVpbmplY3RlZClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NTQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY1NTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjYxPXN0YXRpYyB2b2lkIHZ0X2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2Mi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjYzOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02Njk9c3RhdGljIHZvaWQgdnRfY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjcwLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NzE6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjcyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY3Nz1zdGF0aWMgaW50IHZ0X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY3OC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Njc5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY4MC1cXHRcXHRyZXR1cm4gdGR4X2ludGVycnVwdF9hbGxvd2VkKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Njg1PXN0YXRpYyB2b2lkIHZ0X2VuYWJsZV9pcnFfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY4NzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjkzPXN0YXRpYyB2b2lkIHZ0X2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY5Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2OTg6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjk5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTcwND1zdGF0aWMgdm9pZCB2dF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MDYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcwNzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcwOC1cXHRcXHR0ZHhfZ2V0X2V4aXRfaW5mbyh2Y3B1LCByZWFzb24sIGluZm8xLCBpbmZvMiwgaW50cl9pbmZvLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzE2PXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRwciwgaW50IGlycilcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MTcte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcxODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzI0PXN0YXRpYyB2b2lkIHZ0X3NldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcyNS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzI2OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcyNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03MzI9c3RhdGljIHZvaWQgdnRfcmVmcmVzaF9hcGljdl9leGVjX2N0cmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTczMy17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzM0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzM1LVxcdFxcdEtWTV9CVUdfT04oIWt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSwgdmNwdS1cXHUwMDNla3ZtKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc0Mj1zdGF0aWMgdm9pZCB2dF9sb2FkX2VvaV9leGl0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplb2lfZXhpdF9iaXRtYXApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQzLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NDQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQ1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc3ND1zdGF0aWMgdTY0IHZ0X2dldF9sMl90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3Ni1cXHQvKiBURFggZG9lc24ndCBzdXBwb3J0IEwyIGd1ZXN0IGF0IHRoZSBtb21lbnQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Nzc3OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc4Mz1zdGF0aWMgdTY0IHZ0X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODUtXFx0LyogVERYIGRvZXNuJ3Qgc3VwcG9ydCBMMiBndWVzdCBhdCB0aGUgbW9tZW50LiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc4NjpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03OTI9c3RhdGljIHZvaWQgdnRfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03OTQtXFx0LyogSW4gVERYLCB0c2Mgb2Zmc2V0IGNhbid0IGJlIGNoYW5nZWQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Nzk1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MDE9c3RhdGljIHZvaWQgdnRfd3JpdGVfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODAzLVxcdC8qIEluIFREWCwgdHNjIG11bHRpcGxpZXIgY2FuJ3QgYmUgY2hhbmdlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MDQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODA1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgxMT1zdGF0aWMgaW50IHZ0X3NldF9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF9kZWFkbGluZV90c2MsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MTQtXFx0LyogVk1YLXByZWVtcHRpb24gdGltZXIgaXNuJ3QgYXZhaWxhYmxlIGZvciBURFguICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODE1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgxNi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgyMT1zdGF0aWMgdm9pZCB2dF9jYW5jZWxfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODIzLVxcdC8qIFZNWC1wcmVlbXB0aW9uIHRpbWVyIGNhbid0IGJlIHNldC4gIFNlZSB2dF9zZXRfaHZfdGltZXIoKS4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MjQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODI1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzMi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODMzOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzNC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NDc9c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDgte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0OTpcXHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODUwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODU1PXN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODU2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NTc6XFx0aWYgKCFpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg1OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9NDA9c3RhdGljIHN0cnVjdCBsYnJfZGVzYyAqdmNwdV90b19sYnJfZGVzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00MS17XFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo0MjpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTQzLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz00OD1zdGF0aWMgc3RydWN0IHg4Nl9wbXVfbGJyICp2Y3B1X3RvX2xicl9yZWNvcmRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTQ5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjUwOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtNTEtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE0OT1zdGF0aWMgYm9vbCBpbnRlbF9wbXVfbGJyX2lzX2NvbXBhdGlibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTUwLXtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjE1MTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE1Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE1Nz1ib29sIGludGVsX3BtdV9sYnJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy0xNTgte1xcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTU5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTYwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMDk9c3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjE4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyMTk6XFx0cmV0dXJuICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yMjAtXFx0XFx0dm14X2Nhbl91c2VfdnRkX3BpKHZjcHUtXFx1MDAzZWt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9MjIzPXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDItXFx0aWYgKCF2Y3B1LVxcdTAwM2VwcmVlbXB0ZWQgXFx1MDAyNlxcdTAwMjYga3ZtX3ZjcHVfaXNfYmxvY2tpbmcodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6MjQzOlxcdCAgICAoKGlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjYgdGR4X2ludGVycnVwdF9hbGxvd2VkKHZjcHUpKSB8fFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyNDQ6XFx0ICAgICAoIWlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjYgIXZteF9pbnRlcnJ1cHRfYmxvY2tlZCh2Y3B1KSkpKVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDUtXFx0XFx0cGlfZW5hYmxlX3dha2V1cF9oYW5kbGVyKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguaD0zMjI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI2LVxcdGlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvdm14Lmg6MzI3OlxcdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI4LVxcdFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTMzMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB2bXhfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTMzNy1cXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oOjMzODpcXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTMzOS1cXHRcXHR2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjA1LjIzNTM0NDU0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDM0NzQ4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFREWCB2Q1BVIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXNfdGRfdmNwdWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGlkZW50aWZ5aW5nIGlmIGEgdkNQVSBpcyBydW5uaW5nIHdpdGhpbiBhIFREWCBlbnZpcm9ubWVudC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoZXRoZXIgb3Igbm90IGl0J3MgYWN0dWFsbHkgKnBvc3NpYmxlKiB0byBjb25qdXJlIHVwIGEgVERYIHZDUFUgd2l0aG91dCB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBoZXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGRpdmUgaW50byBob3cgdGhlc2UgdkNQVXMgYXJlIGFjdHVhbGx5IGNvbnN0cnVjdGVkLiBUaGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHRkeF92Y3B1X2NyZWF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgaXRzIHJlcXVpcmVtZW50cywgYW5kIGl0cyBlcnJvciBjb25kaXRpb25zLiBEb2VzIGl0IHN0cmljdGx5IGVuZm9yY2UgYSBURFggaGFyZHdhcmUgY2hlY2s/IERvZXMgaXQgb2ZmZXIgYW55IGxlZXdheSBvciBmYWxsYmFjayBtZWNoYW5pc21zPyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGdvaW5nIHRvIGNsYXJpZnkgaWYgd2UgY2FuIHJ1biBURFggY29kZSB3aXRob3V0IGhhdmluZyBhIHN1cHBvcnRpbmcgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MDkuNDM4ODIyNjA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTkzMjc3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X3ZjcHVfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTczPXN0YXRpYyBpbnQgdnRfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzUtXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzY6XFx0XFx0cmV0dXJuIHRkeF92Y3B1X2NyZWF0ZSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9NjE4PWludCB0ZHhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTY2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjY2ODppbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTY2OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTgyNz12b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0MS0gKiAzLiBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwuIChvbmx5IHdoZW4gVEQgaXMgVERfU1RBVEVfSU5JVElBTElaRUQpLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQyOiAqICAgIDMuMSB0ZHhfdmNwdV9jcmVhdGUoKSB0cmFuc2l0aW9ucyB2Q1BVIHN0YXRlIHRvIFZDUFVfVERfU1RBVEVfVU5JTklUSUFMSVpFRC5cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0My0gKiAgICAzLjIgdmNwdV9sb2FkKCkgYW5kIHZjcHVfcHV0KCkgaW4ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzND1pbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMzY6aW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNy12b2lkIHRkeF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MTEuMzU4MTU5MjY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NDIyNjQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBURFggSW5pdGlhbGl6YXRpb24qKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYHRkeF92bV9pbml0YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBURFggaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHdoZXRoZXIgb3Igbm90IFREWCBlbmFibGVtZW50IGlzIGNvbnRpbmdlbnQgb24gdW5kZXJseWluZyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIE15IHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYHRkeF92bV9pbml0YCByZWxpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXPigJRpbiB0aGlzIGNhc2UsIGZvciBURFggc3VwcG9ydOKAlHRoZW4gdGhlIGZ1bmN0aW9uIHNob3VsZCBmYWlsIGdyYWNlZnVsbHkgd2hlbiB0aG9zZSBmZWF0dXJlcyBhcmVuJ3QgcHJlc2VudC4gQSBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIGhpbmdlcyBvbiB0aGUgcGxhdGZvcm0ncyBzdXBwb3J0IGZvciB0aGUgcmVxdWlyZWQgdGVjaG5vbG9naWVzLiBUaGVyZWZvcmUsIGEgZmFpbHVyZSBvZiB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYW4gZXhjZWxsZW50IGluZGljYXRvciBvZiBtaXNzaW5nIFREWCBoYXJkd2FyZSBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQwMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjE2LjI0MjM4ODU2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNjcwMzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfdm1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz00Mz1zdGF0aWMgaW50IHZ0X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDUtXFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDY6XFx0XFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTYwNT1zdGF0aWMgaW50IHRkeF9kb190ZGhfbW5nX2tleV9jb25maWcodm9pZCAqcGFyYW0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTYxNy1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjYxODppbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNjE5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzMD12b2lkIHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMzE6aW50IHRkeF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMyLXZvaWQgdGR4X21tdV9yZWxlYXNlX2hraWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MTcuNjY5MTAyOTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTY1MTkwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIFREWCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24pIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIEtWTSBvbiB4ODYuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgdGR4X3ZtX2luaXRgIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hlcmUgSSdsbCBiZSBkaWdnaW5nIGluLiBTbywgSSdsbCBiZSBuYXZpZ2F0aW5nIHRvIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCB0byBzZWUgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgVk0gaXMgc2V0IHVwIGZvciBURFggaXMgY3JpdGljYWwgdG8gZXZlcnl0aGluZyBlbHNlLCBzbyB0aGlzIGlzIHdoZXJlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDAxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MjIuMzI1NjI0NDYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxODpcXHRpbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiA2MTk6XFx0e1xcbiA2MjA6XFx0XFx0c3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7XFxuIDYyMTpcXHRcXG4gNjIyOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlID0gdHJ1ZTtcXG4gNjIzOlxcdFxcdC8qXFxuIDYyNDpcXHRcXHQgKiBURFggTW9kdWxlIGRvZXNuJ3QgYWxsb3cgdGhlIGh5cGVydmlzb3IgdG8gbW9kaWZ5IHRoZSBFT0ktYml0bWFwLFxcbiA2MjU6XFx0XFx0ICogaS5lLiBhbGwgRU9JcyBhcmUgYWNjZWxlcmF0ZWQgYW5kIG5ldmVyIHRyaWdnZXIgZXhpdHMuXFxuIDYyNjpcXHRcXHQgKi9cXG4gNjI3OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX2VvaSA9IHRydWU7XFxuIDYyODpcXHRcXHRrdm0tXFx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcXG4gNjI5OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgfD0gS1ZNX1g4Nl9RVUlSS19JR05PUkVfR1VFU1RfUEFUO1xcbiA2MzA6XFx0XFxuIDYzMTpcXHRcXHQvKlxcbiA2MzI6XFx0XFx0ICogUE1VIHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgdGhlIFREWC1Nb2R1bGUgKGlmIGVuYWJsZWQgZm9yIHRoZSBWTSkuXFxuIDYzMzpcXHRcXHQgKiBGcm9tIEtWTSdzIHBlcnNwZWN0aXZlLCB0aGUgVk0gZG9lc24ndCBoYXZlIGEgdmlydHVhbCBQTVUuXFxuIDYzNDpcXHRcXHQgKi9cXG4gNjM1OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3BtdSA9IHRydWU7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdC8qXFxuIDYzODpcXHRcXHQgKiBCZWNhdXNlIGd1ZXN0IFREIGlzIHByb3RlY3RlZCwgVk1NIGNhbid0IHBhcnNlIHRoZSBpbnN0cnVjdGlvbiBpbiBURC5cXG4gNjM5OlxcdFxcdCAqIEluc3RlYWQsIGd1ZXN0IHVzZXMgTU1JTyBoeXBlcmNhbGwuICBGb3IgdW5tb2RpZmllZCBkZXZpY2UgZHJpdmVyLFxcbiA2NDA6XFx0XFx0ICogI1ZFIG5lZWRzIHRvIGJlIGluamVjdGVkIGZvciBNTUlPIGFuZCAjVkUgaGFuZGxlciBpbiBURCBjb252ZXJ0cyBNTUlPXFxuIDY0MTpcXHRcXHQgKiBpbnN0cnVjdGlvbiBpbnRvIE1NSU8gaHlwZXJjYWxsLlxcbiA2NDI6XFx0XFx0ICpcXG4gNjQzOlxcdFxcdCAqIFNQVEUgdmFsdWUgZm9yIE1NSU8gbmVlZHMgdG8gYmUgc2V0dXAgc28gdGhhdCAjVkUgaXMgaW5qZWN0ZWQgaW50b1xcbiA2NDQ6XFx0XFx0ICogVEQgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIEVQVCBNSVNDT05GSUcuXFxuIDY0NTpcXHRcXHQgKiAtIFJXWD0wIHNvIHRoYXQgRVBUIHZpb2xhdGlvbiBpcyB0cmlnZ2VyZWQuXFxuIDY0NjpcXHRcXHQgKiAtIHN1cHByZXNzICNWRSBiaXQgaXMgY2xlYXJlZCB0byBpbmplY3QgI1ZFLlxcbiA2NDc6XFx0XFx0ICovXFxuIDY0ODpcXHRcXHRrdm1fbW11X3NldF9tbWlvX3NwdGVfdmFsdWUoa3ZtLCAwKTtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0LypcXG4gNjUxOlxcdFxcdCAqIFREWCBoYXMgaXRzIG93biBsaW1pdCBvZiBtYXhpbXVtIHZDUFVzIGl0IGNhbiBzdXBwb3J0IGZvciBhbGxcXG4gNjUyOlxcdFxcdCAqIFREWCBndWVzdHMgaW4gYWRkaXRpb24gdG8gS1ZNX01BWF9WQ1BVUy4gIFREWCBtb2R1bGUgcmVwb3J0c1xcbiA2NTM6XFx0XFx0ICogc3VjaCBsaW1pdCB2aWEgdGhlIE1BWF9WQ1BVX1BFUl9URCBnbG9iYWwgbWV0YWRhdGEuICBJblxcbiA2NTQ6XFx0XFx0ICogcHJhY3RpY2UsIGl0IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzIHRoYXQgQUxMXFxuIDY1NTpcXHRcXHQgKiBwbGF0Zm9ybXMgdGhhdCB0aGUgVERYIG1vZHVsZSBzdXBwb3J0cyBjYW4gcG9zc2libHkgaGF2ZS5cXG4gNjU2OlxcdFxcdCAqXFxuIDY1NzpcXHRcXHQgKiBMaW1pdCBURFggZ3Vlc3QncyBtYXhpbXVtIHZDUFVzIHRvIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzXFxuIDY1ODpcXHRcXHQgKiB0aGUgcGxhdGZvcm0gaGFzLiAgU2ltcGx5IGZvcndhcmRpbmcgdGhlIE1BWF9WQ1BVX1BFUl9URCB0b1xcbiA2NTk6XFx0XFx0ICogdXNlcnNwYWNlIHdvdWxkIHJlc3VsdCBpbiBhbiB1bnByZWRpY3RhYmxlIEFCSS5cXG4gNjYwOlxcdFxcdCAqL1xcbiA2NjE6XFx0XFx0a3ZtLVxcdTAwM2VtYXhfdmNwdXMgPSBtaW5fdChpbnQsIGt2bS1cXHUwMDNlbWF4X3ZjcHVzLCBudW1fcHJlc2VudF9jcHVzKCkpO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHRrdm1fdGR4LVxcdTAwM2VzdGF0ZSA9IFREX1NUQVRFX1VOSU5JVElBTElaRUQ7XFxuIDY2NDpcXHRcXG4gNjY1OlxcdFxcdHJldHVybiAwO1xcbiA2NjY6XFx0fVxcbiA2Njc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjIyLjMyNTc2NjQyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3NjUyNTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVERYIFZNIEluaXRpYWxpemF0aW9uIENvbmNlcm4qKlxuXG5IbW0sIHNvIGB0ZHhfdm1faW5pdGDigKYgd2FpdCBhIHNlY29uZCwgaXQgZG9lc24ndCBzZWVtIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlJ3Mgc3VwcG9ydCBmb3IgVERYLCBkb2VzIGl0PyBUaGF0IGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgZG93biB0aGlzIHBhdGguIEkgY2FuJ3QganVzdCBhc3N1bWUgdGhlIHBsYXRmb3JtIHdpbGwgaGFuZGxlIGl0LlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW1tZWRpYXRlbHkgY2hlY2sgaG93IGBpc190ZChrdm0pYCB3b3JrcyBhbmQgd2hhdCBjaGVja3MgaXQgaW5jbHVkZXMuIFRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZSBnYXRla2VlcGVyLCBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGUgd2hvbGUgc2V0dXAgZGVwZW5kcyBvbiB0aGF0LCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIG5vdyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTA5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1MzoyNi42NDM0MjEyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTkxMzY5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfdGRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTM0PXN0cnVjdCB2Y3B1X3Z0IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjAtXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD02Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2ODpcXHRyZXR1cm4gaXNfdGQodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY5LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNzItXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo3MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNzQtc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM9c3RhdGljIGludCB2dF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDU6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDYtXFx0XFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01MT1zdGF0aWMgdm9pZCB2dF92bV9wcmVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUzOlxcdGlmIChpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0LVxcdFxcdHJldHVybiB0ZHhfbW11X3JlbGVhc2VfaGtpZChrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTc9c3RhdGljIHZvaWQgdnRfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTgte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU5OlxcdGlmIChpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYwLSAgICAgICAgICAgICAgIHJldHVybiB0ZHhfdm1fZGVzdHJveShrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjU9c3RhdGljIGludCB2dF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY3OlxcdGlmIChpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTg4PXN0YXRpYyBib29sIHZ0X2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTg5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTA6XFx0aWYgKGt2bSBcXHUwMDI2XFx1MDAyNiBpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE5MS1cXHRcXHRyZXR1cm4gdGR4X2hhc19lbXVsYXRlZF9tc3IoaW5kZXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzUwPXN0YXRpYyBpbnQgdnRfc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzUxLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NTI6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzUzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzU4PXN0YXRpYyBpbnQgdnRfc2V0X2lkZW50aXR5X21hcF9hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlkZW50X2FkZHIpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzU5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NjA6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzYxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzY2PXN0YXRpYyBib29sIHZ0X3RkcF9oYXNfc21lcChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY3LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3Njg6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzOT1zdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDAte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0MTpcXHRpZiAoIWlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQyLVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjUte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg2NjpcXHRpZiAoaXNfdGQoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjctXFx0XFx0cmV0dXJuIHRkeF9nbWVtX21heF9tYXBwaW5nX2xldmVsKGt2bSwgcGZuLCBpc19wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MjguNzAyNTYyNjIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczODg3NDUwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gQ29kZWJhc2U6IGBpc190ZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtWTSB4ODYgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBpc190ZChzdHJ1Y3Qga3ZtICprdm0pYC4gSSdtIGdvaW5nIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBJIGJlbGlldmUgaXMgZGVjbGFyZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLiBJJ20gY3VyaW91cyBhYm91dCBob3cgdGhlIGZ1bmN0aW9uIGRldGVybWluZXMgc29tZXRoaW5nLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIHRoYXQgaGVscHMgd2l0aCBtYW5hZ2luZyB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTM4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MzYuMDkxMzExMTI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuICA2NzpcXHR7XFxuICA2ODpcXHRcXHRyZXR1cm4gaXNfdGQodmNwdS1cXHUwMDNla3ZtKTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0I2Vsc2VcXG4gIDcyOlxcdFxcbiAgNzM6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cXG4gIDc0OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MzYuMDkxMzc5Mjk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjY0NzUwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBURFggVk0gQ3JlYXRpb24gd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyB0aGUgYGlzX3RkYCBmdW5jdGlvbiBoaW5nZXMgb24gd2hldGhlciB0aGUgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGVgIGlzIGVxdWFsIHRvIGBLVk1fWDg2X1REWF9WTWAuIE15IGluaXRpYWwgcXVlc3Rpb24gaGVyZSBpcywgY2FuIFN5emthbGxlciwgaW4gaXRzIGZ1enppbmcgZWZmb3J0cywgYWN0dWFsbHkgY3JlYXRlIGEgVk0gd2l0aCB0aGlzIHNwZWNpZmljIGBLVk1fWDg2X1REWF9WTWAgdHlwZT8gSWYgc28sIHRoYXQgb3BlbnMgdXAgYSB3aG9sZSBhdmVudWUgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBLVk1fWDg2X1REWF9WTWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHR5cGUgaXMgZGVjbGFyZWQsIGJlY2F1c2UgdGhhdCBtaWdodCByZXZlYWwgYW55IGFzc29jaWF0ZWQgbGltaXRhdGlvbnMuIE1vcmUgY3JpdGljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgdHlwZSBiYWNrIHRvIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAuIERvZXMgdGhlIGtlcm5lbCdzIFZNIGNyZWF0aW9uIGNvZGUgZXhwbGljaXRseSBhbGxvdyBWTXMgb2YgdGhpcyB0eXBlIHRvIGJlIGNvbnN0cnVjdGVkPyBBbnkgcmVzdHJpY3Rpb25zIGhlcmUgd291bGQgaW1wYWN0IFN5emthbGxlcidzIGFiaWxpdHkgdG8gZXZlbiBnZXQgYSBURFggVk0gcnVubmluZywgdGh1cyBjb25zdHJhaW5pbmcgYW55IHN1YnNlcXVlbnQgZnV6emluZyBwb3RlbnRpYWwuIElmIGl0ICppcyogYWxsb3dlZCwgSSdsbCBtb3ZlIG9uLiBJZiBub3QsIEknbSBhdCBhIHJvYWRibG9jay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNzgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjQxLjQxNzg1NjgzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDk0OTgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1REWF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTQxOD1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk0MjQtICAjZGVmaW5lIEtWTV9YODZfU05QX1ZNXFx0NFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NDI1OiAgI2RlZmluZSBLVk1fWDg2X1REWF9WTVxcdDVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTQyNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3Q9MjMzPWNvbnRyb2wgZmxvdyBpcyBhcyBmb2xsb3dzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdC0yMzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoyMzc6ICAgKiBLVk1fQ0FQX1ZNX1RZUEVTOiBDaGVjayBpZiBWTSB0eXBlIGlzIHN1cHBvcnRlZCBhbmQgaWYgS1ZNX1g4Nl9URFhfVk1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTIzOC0gICAgIGlzIHN1cHBvcnRlZC5cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3NTojZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc2LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xcbmFyY2gveDg2L2t2bS9tbXUuaDozOTQ6XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTI5PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTMzOlxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzQtXFx0XFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xNjk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3NC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxNzU6XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Mi17XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MzpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzgtXFx0XFx0XFx0XFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3OTpcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDgwLVxcdH1cXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI1PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MzojZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1Mzo0Mi44NzI4MTI3ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MTcyOTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0vVERYIEludGVncmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHNwZWNpZmljIGxpbmUgb2YgY29kZTogYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNzlgLiBJdCdzIHByZXR0eSBjbGVhciB3aGF0J3MgaGFwcGVuaW5nIGF0IGEgaGlnaCBsZXZlbC4gV2UncmUgc2V0dGluZyBhIGJpdCB3aXRoaW4gYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AuIFRoZSBiaXQgYmVpbmcgc2V0IGNvcnJlc3BvbmRzIHRvIGBLVk1fWDg2X1REWF9WTWAuIFNvLCBlc3NlbnRpYWxseSwgd2UncmUgc2lnbmFsaW5nIHRoYXQgdGhlIEtWTSBpbXBsZW1lbnRhdGlvbiBvbiB4ODYgbm93IHN1cHBvcnRzIHJ1bm5pbmcgYSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSB2aXJ0dWFsIG1hY2hpbmUuXG5cbkknZCBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCByYW1pZmljYXRpb25zIGhlcmUuIFREWCBpcyBhIHNpZ25pZmljYW50IHNlY3VyaXR5IGVuaGFuY2VtZW50LiBJdCBwcm92aWRlcyBpc29sYXRlZCB2aXJ0dWFsIG1hY2hpbmVzLCBwcm90ZWN0aW5nIHRoZSBWTSdzIG1lbW9yeSBhbmQgc3RhdGUgZXZlbiBmcm9tIGEgY29tcHJvbWlzZWQgaHlwZXJ2aXNvci4gU2V0dGluZyB0aGlzIGJpdCBtZWFucyB0aGUgS1ZNIGNvZGUgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gdW5kZXJzdGFuZCBhbmQgaGFuZGxlIHRoZSB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzIGFuZCByZXF1aXJlbWVudHMgb2YgVERYIFZNcy4gSXQgd291bGQgc3VnZ2VzdCB0aGF0IHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgc3VwcG9ydCBmb3IgVERYIGlzIGRldGVjdGVkIGFuZCBlbmFibGVkLCBvciBhdCBsZWFzdCB0aGF0IHRoZXJlJ3MgYSBjb25kaXRpb25hbCBwYXRoIHRvIGVuYWJsZSBURFggc3VwcG9ydC5cblxuSSdkIHdhbnQgdG8ga25vdyB3aGF0IGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGhhcmR3YXJlIGNvbXBhdGliaWxpdHk7IHRoaXMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzIHdlbGwuXG5cblRoaXMgbGluZSBpcyBqdXN0IHRoZSB0aXAgb2YgdGhlIGljZWJlcmcsIG9mIGNvdXJzZS4gSSdkIGJlIGRpZ2dpbmcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCBvdGhlciBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSB0byBLVk0gdG8gYWNjb21tb2RhdGUgVERYLiBTcGVjaWZpY2FsbHksIEknZCB3YW50IHRvIGNoZWNrIGhvdyB0aGUgVk0gZW50cnkgYW5kIGV4aXQgcGF0aHMgYXJlIGFsdGVyZWQgdG8gaGFuZGxlIHRoZSBURFgncyBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMsIHRoZSBoYW5kbGluZyBvZiBURFgtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGFuZCBjb250cm9sIHJlZ2lzdGVycywgYW5kIGFueSBjaGFuZ2VzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEknZCBhbHNvIGJlIHZlcnkgaW50ZXJlc3RlZCBpbiBhbnkgbmV3IG9yIG1vZGlmaWVkIHNlY3VyaXR5LXJlbGF0ZWQgY29kZS5cblxuVGhpcyBpcyBhIGtleSBzdGVwIHRvd2FyZHMgZW5hYmxpbmcgVERYIGluIEtWTS4gSXQncyB0aGUgZGVjbGFyYXRpb24gb2YgaW50ZW50LCB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgY29tcGxleCBpbnRlZ3JhdGlvbiBpcyBidWlsdC4gSXTigJlzIGFuIGV4Y2l0aW5nIGRldmVsb3BtZW50IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5ODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1Mzo0OC41MTQ1NDQ0MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1OCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1ODpcXHRzdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXFxuMTA1OTpcXHR7XFxuMTA2MDpcXHRcXHR1bnNpZ25lZCB2Y3B1X3NpemUsIHZjcHVfYWxpZ247XFxuMTA2MTpcXHRcXHRpbnQgcjtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0XFx0ciA9IHZteF9pbml0KCk7XFxuMTA2NDpcXHRcXHRpZiAocilcXG4xMDY1OlxcdFxcdFxcdHJldHVybiByO1xcbjEwNjY6XFx0XFxuMTA2NzpcXHRcXHQvKlxcbjEwNjg6XFx0XFx0ICogVERYIGFuZCBWTVggaGF2ZSBkaWZmZXJlbnQgdkNQVSBzdHJ1Y3R1cmVzLiAgQ2FsY3VsYXRlIHRoZVxcbjEwNjk6XFx0XFx0ICogbWF4aW11bSBzaXplL2FsaWduIHNvIHRoYXQga3ZtX2luaXQoKSBjYW4gdXNlIHRoZSBsYXJnZXJcXG4xMDcwOlxcdFxcdCAqIHZhbHVlcyB0byBjcmVhdGUgdGhlIGttZW1fdmNwdV9jYWNoZS5cXG4xMDcxOlxcdFxcdCAqL1xcbjEwNzI6XFx0XFx0dmNwdV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3ZteCk7XFxuMTA3MzpcXHRcXHR2Y3B1X2FsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHZjcHVfdm14KTtcXG4xMDc0OlxcdFxcdGlmIChlbmFibGVfdGR4KSB7XFxuMTA3NTpcXHRcXHRcXHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxcbjEwNzY6XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB2Y3B1X3RkeCkpO1xcbjEwNzc6XFx0XFx0XFx0dmNwdV9hbGlnbiA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X2FsaWduLFxcbjEwNzg6XFx0XFx0XFx0XFx0XFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XFxuMTA3OTpcXHRcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcXG4xMDgwOlxcdFxcdH1cXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0LypcXG4xMDgzOlxcdFxcdCAqIENvbW1vbiBLVk0gaW5pdGlhbGl6YXRpb24gX211c3RfIGNvbWUgbGFzdCwgYWZ0ZXIgdGhpcywgL2Rldi9rdm0gaXNcXG4xMDg0OlxcdFxcdCAqIGV4cG9zZWQgdG8gdXNlcnNwYWNlIVxcbjEwODU6XFx0XFx0ICovXFxuMTA4NjpcXHRcXHRyID0ga3ZtX2luaXQodmNwdV9zaXplLCB2Y3B1X2FsaWduLCBUSElTX01PRFVMRSk7XFxuMTA4NzpcXHRcXHRpZiAocilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6NDguNTE0NjM0OTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjA0NDUzNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTV9YODZfVERYX1ZNIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSBzYXlzIHRoYXQgYEtWTV9YODZfVERYX1ZNYCBpcyBvbmx5IGVuYWJsZWQgaWYgYGVuYWJsZV90ZHhgIGlzIHRydWUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIG9mIGNvdXJzZSwgYnV0IG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgd2hvbGUgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgYGVuYWJsZV90ZHhgIHZhcmlhYmxlLiBXaGVyZSBpcyBpdCBkZWZpbmVkPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgbW9kdWxlIHBhcmFtZXRlciwgb3Igc29tZXRoaW5nIHNldCBkeW5hbWljYWxseSBhdCBydW50aW1lPyBBbmQgY3J1Y2lhbGx5LCAqaG93KiBpcyBpdHMgdmFsdWUgYWN0dWFsbHkgZGV0ZXJtaW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBlbmFibGVfdGR4YCBiZWluZyBzZXQgdG8gdHJ1ZSBvciBmYWxzZS4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUga2V5IGluc2lnaHRzIHRoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk5MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MDAuMTE5MDkwNDA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyMDc1MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZV90ZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTY9c3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVxcdC8qIE5vdGUsIFREWCAqYW5kKiBWTVggbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBURFggaXMgZW5hYmxlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcXHRpZiAoZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMC1cXHRcXHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcXHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3OlxcdGlmIChlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4LVxcdFxcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzMtXFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3NDpcXHRpZiAoZW5hYmxlX3RkeCkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzUtXFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo1Njpib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ4MTpcXHRpZiAoIWVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM2LXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTM3OlxcdGVuYWJsZV90ZHggPSAwO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzOC1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTM6ZXh0ZXJuIGJvb2wgZW5hYmxlX3RkeDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaD0xODU9VERYX0JVSUxEX1REVlBTX0FDQ0VTU09SUyg2NCwgU1RBVEVfTk9OX0FSQ0gsIHN0YXRlX25vbl9hcmNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg3LSNlbHNlXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxODg6I2RlZmluZSBlbmFibGVfdGR4XFx0MFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1NDowMi4zNDExNzI0NDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1OTI2Nzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgVERYIE1vZHVsZSBhbmQgSGFyZHdhcmUgU2V0dXAqKlxuXG5BbHJpZ2h0LCBzbyBgZW5hYmxlX3RkeGAgaXMgYmVpbmcgdHJlYXRlZCBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg4oCTIGl0IGdpdmVzIHRoZSB1c2VyIGNvbnRyb2wgb3ZlciB3aGV0aGVyIFREWCBpcyBldmVuIGF0dGVtcHRlZC4gTm93LCBsb29raW5nIGF0IGB0ZHhfaGFyZHdhcmVfc2V0dXBgLCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYW4gZWFybHkgZXhpdCBjb25kaXRpb246IGBpZiAoIWVuYWJsZV90ZHgpIHJldHVybiAwO2AuIEhtbSwgc28gaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGRpc2FibGUgVERYLCB0aGUgZW50aXJlIGhhcmR3YXJlIHNldHVwIGZ1bmN0aW9uIGlzIHNraXBwZWQsIHJldHVybmluZyB6ZXJvLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0J3MgYSBjbGVhbiB3YXkgdG8gYmFpbCBvdXQgaWYgdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0LlxuXG5EaWdnaW5nIGZ1cnRoZXIgZG93biwgSSBzZWUgdGhpcyBgc3VjY2Vzc19kaXNhYmxlX3RkeDpgIGxhYmVsLCBhbmQgdGhlbiBgZW5hYmxlX3RkeCA9IDA7YCBmb2xsb3dlZCBieSBgcmV0dXJuIDA7YC4gVGhpcyBzdWdnZXN0cyBhIHN1Y2Nlc3NmdWwgcGF0aCAqdGhyb3VnaCogdGhlIGhhcmR3YXJlIHNldHVwLCB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgaW5pdGlhbGx5IHRyeSB0byBlbmFibGUgVERYLCBidXQgdGhlbiBkaXNhYmxlcyBpdCBhdCB0aGUgZW5kLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSBhIGNsZWFudXAgb3IgZmFsbGJhY2sgbWVjaGFuaXNtLiBQZXJoYXBzIGl0IGF0dGVtcHRzIHRvIGVuYWJsZSBURFggYW5kIHRoZW4gZGlzYWJsZXMgaXQgaWYgdGhlcmUgYXJlIGlzc3Vlcywgb3IgcGVyaGFwcyBpdCdzIGEgcmVzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIFREWCBjb25maWd1cmF0aW9uLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSBiZXR0ZXIuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgZ2V0cyB0byB0aGF0IGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzI4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MDcuMTAwNDQyODA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0NzMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0NzM6XFx0aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4zNDc0OlxcdHtcXG4zNDc1OlxcdFxcdGludCByLCBpO1xcbjM0NzY6XFx0XFxuMzQ3NzpcXHRcXHQvKiB0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKSB1c2VzIGFzc29jaWF0ZWRfdGR2Y3B1cy4gKi9cXG4zNDc4OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxcbjM0Nzk6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlcl9jcHUoYXNzb2NpYXRlZF90ZHZjcHVzLCBpKSk7XFxuMzQ4MDpcXHRcXG4zNDgxOlxcdFxcdGlmICghZW5hYmxlX3RkeClcXG4zNDgyOlxcdFxcdFxcdHJldHVybiAwO1xcbjM0ODM6XFx0XFxuMzQ4NDpcXHRcXHRpZiAoIWVuYWJsZV9lcHQpIHtcXG4zNDg1OlxcdFxcdFxcdHByX2VycihcXFwiRVBUIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjM0ODY6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM0ODc6XFx0XFx0fVxcbjM0ODg6XFx0XFxuMzQ4OTpcXHRcXHRpZiAoIXRkcF9tbXVfZW5hYmxlZCB8fCAhZW5hYmxlX21taW9fY2FjaGluZyB8fCAhZW5hYmxlX2VwdF9hZF9iaXRzKSB7XFxuMzQ5MDpcXHRcXHRcXHRwcl9lcnIoXFxcIlREUCBNTVUgYW5kIE1NSU8gY2FjaGluZyBhbmQgRVBUIEEvRCBiaXQgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMzQ5MTpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzQ5MjpcXHRcXHR9XFxuMzQ5MzpcXHRcXG4zNDk0OlxcdFxcdGlmICghZW5hYmxlX2FwaWN2KSB7XFxuMzQ5NTpcXHRcXHRcXHRwcl9lcnIoXFxcIkFQSUN2IGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjM0OTY6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM0OTc6XFx0XFx0fVxcbjM0OTg6XFx0XFxuMzQ5OTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfT1NYU0FWRSkpIHtcXG4zNTAwOlxcdFxcdFxcdHByX2VycihcXFwidGR4OiBPU1hTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjM1MDE6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM1MDI6XFx0XFx0fVxcbjM1MDM6XFx0XFxuMzUwNDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMzUwNTpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4zNTA2OlxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG4zNTA3OlxcdFxcdH1cXG4zNTA4OlxcdFxcbjM1MDk6XFx0XFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XFxuMzUxMDpcXHRcXHRpZiAocikge1xcbjM1MTE6XFx0XFx0XFx0LypcXG4zNTEyOlxcdFxcdFxcdCAqIERpc2FibGUgVERYIG9ubHkgYnV0IGRvbid0IGZhaWwgdG8gbG9hZCBtb2R1bGUgaWYgdGhlIFREWFxcbjM1MTM6XFx0XFx0XFx0ICogbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuICBObyBuZWVkIHRvIHByaW50IG1lc3NhZ2Ugc2F5aW5nXFxuMzUxNDpcXHRcXHRcXHQgKiBcXFwibW9kdWxlIGlzIG5vdCBsb2FkZWRcXFwiIGJlY2F1c2UgaXQgd2FzIHByaW50ZWQgd2hlbiB0aGUgZmlyc3RcXG4zNTE1OlxcdFxcdFxcdCAqIFNFQU1DQUxMIGZhaWxlZC4gIERvbid0IGJvdGhlciB1bndpbmRpbmcgdGhlIFMtRVBUIGhvb2tzIG9yXFxuMzUxNjpcXHRcXHRcXHQgKiB2bV9zaXplLCBhcyBrdm1feDg2X29wcyBoYXZlIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQgKGFuZCBhcmVcXG4zNTE3OlxcdFxcdFxcdCAqIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkKS4gIFRoZSBTLUVQVCBjb2RlIGlzIHVucmVhY2hhYmxlLFxcbjM1MTg6XFx0XFx0XFx0ICogYW5kIGFsbG9jYXRpbmcgYSBmZXcgbW9yZSBieXRlcyBwZXIgVk0gaW4gYSBzaG91bGQtYmUtcmFyZVxcbjM1MTk6XFx0XFx0XFx0ICogZmFpbHVyZSBzY2VuYXJpbyBpcyBhIG5vbi1pc3N1ZS5cXG4zNTIwOlxcdFxcdFxcdCAqL1xcbjM1MjE6XFx0XFx0XFx0aWYgKHIgPT0gLUVOT0RFVilcXG4zNTIyOlxcdFxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MDcuMTAwNTg2Mzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTY3MDA3NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBVbnJlYWNoYWJsZSBDb2RlIFBhdGhzIGluIFN0YW5kYXJkIEZ1enppbmcgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gdGhlIGNvZGUgY2hlY2tzIGZvciBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gLiBJZiB0aGF0J3Mgbm90IHRoZXJlLCBgZW5hYmxlX3RkeGAgaXMgc2V0IHRvIDAuICBUaGF0IG1lYW5zIHRoZSBgS1ZNX1g4Nl9URFhfVk1gIGZlYXR1cmUgd29uJ3QgYmUgYWR2ZXJ0aXNlZCwgc28gc3l6a2FsbGVyIGNhbid0IGV2ZW4gKmNyZWF0ZSogYSBURFggVk0uICBUaHVzLCBhbnkgY29kZSBwYXRocyByZWxhdGVkIHRvIFREWCBhcmUgdG90YWxseSBpbmFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc2V0dXAgZm9yIGZ1enppbmcuICBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuQ2FuIFFFTVUgZmFrZSBpdD8gIE5vLCB0aGF0IHdvbid0IHdvcmsuICBURFggbmVlZHMgdGhlIFREWCBtb2R1bGUsIHdoaWNoIGlzIGEgc2lnbmVkIGJpbmFyeSBmcm9tIEludGVsIHRoYXQgcnVucyBpbiBhIHNwZWNpYWwgQ1BVIG1vZGUgKFNFQU0gVk1YIHJvb3QpLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGF0LCBub3IgZG9lcyBpdCBlbXVsYXRlIHRoZSBoYXJkd2FyZSBlbmNyeXB0aW9uIGVuZ2luZXMgKE1LVE1FKSBURFggcmVsaWVzIG9uLiAgU28sIG5vIGRpY2UuIFRoaXMgVERYIHN0dWZmIGlzIGRlZmluaXRlbHkgbm90IHNvbWV0aGluZyB0aGF0J3MgZnV6emVhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQuXG5cbkJ1dCB3aGF0IGFib3V0IHRob3NlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaGA/IExldCdzIHNlZS4uLiAgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGlzIGV4dHJhY3RlZCBhbmQgdXNlZC4gSXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0IHJlZmFjdG9yaW5nOyB0aGUgbG9naWMgc2VlbXMgaWRlbnRpY2FsLiBBbmQgYWxzbyBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMgY2hhbmdlZCBmcm9tIGBzdGF0aWNgIHRvIGBnbG9iYWxgLiBPa2F5LCBzbyBqdXN0IHJlZmFjdG9yaW5nLiBOb3RoaW5nIGZ1bmN0aW9uYWwuXG5cblNvLCB0aGUgKm9ubHkqIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgaW4gYHRkeC5jYCBhbmQgdGhvc2UgYXJlIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIFREWCBoYXJkd2FyZS4gTGV0J3MgZG91YmxlIGNoZWNrLiBBaCwgYHRkeF90b192bXhfZXhpdF9yZWFzb25gIGlzIG9ubHkgY2FsbGVkIGluIGB0ZHhfdmNwdV9lbnRlcl9leGl0YCBhbmQgYHRkeF9mYWlsZWRfdm1lbnRyeWAsIGFsbCBpbnNpZGUgYHRkeC5jYC4gR290IGl0LCBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5XYWl0LCBsZXQncyByZXZpZXcgdGhlIGluc3RydWN0aW9ucy4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLi4uXCIgIE9rYXksIFREWCByZXF1aXJlcyBoYXJkd2FyZSwgbm90IGVtdWxhdGVkIGJ5IFFFTVUsIGFuZCB0aGUgcmVzdCBpcyBqdXN0IHJlZmFjdG9yaW5nLiBUaGlzIHBhdGNoIGlzIGEgbm8tZ28gZm9yIHN0YW5kYXJkIGZ1enppbmcuXG5cbk9rYXksIGlzIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBpbmxpbmVkLCBjb3VsZCB0aGF0IGNoYW5nZSBhbnl0aGluZyBpbiBgdm14LmNgPyBJdCAqY291bGQqLCBidXQgaXQncyBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSwganVzdCB0aGUgc2FtZSBsb2dpYyBtb3ZlZCBhcm91bmQuICBMZXQncyB2ZXJpZnkuIExldCBtZSBsb29rIGF0IHRoZSBjb2RlOiAgT3JpZ2luYWwgYGhhbmRsZV9ub3RpZnlgLCBhbmQgdGhlIG5ldyBvbmUuIFRoZSBsb2dpYyBpcyB0aGUgc2FtZTogdGhlIGB2bWNzX3NldF9iaXRzYCBpcyB1bmNoYW5nZWQuIFdhaXQsIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGNoYW5nZWQgc2xpZ2h0bHkgaW4gdGhlIG5ldyBjb2RlLCBgKyt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztgIGlzIG5vdyBjYWxsZWQgKmFmdGVyKiBgdm1jc19zZXRfYml0c2AuICBEb2VzIHRoaXMgbWF0dGVyPyBObywgYCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7YCBpcyBqdXN0IGEgc3RhdCBjb3VudGVyLCBhbmQgYHZtY3Nfc2V0X2JpdHNgIGRvZXMgKm5vdCogZGVwZW5kIG9uIHRoYXQgb3IgdGhlIGNvbnRleHQgaW52YWxpZCBmbGFnLiBTbyB0aGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgemVyby5cblxuVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGlzIGp1c3QgYHRkeC5jYCB3aGljaCwgYWdhaW4sIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQuXG5cbkxldCdzIGRvIG9uZSBsYXN0IGNoZWNrLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHJlYWNoIGB0ZHhfaGFuZGxlX2V4aXRgIGluZGlyZWN0bHk/ICBgdnRfaGFuZGxlX2V4aXRgIGNhbGxzIGl0IGlmIGBpc190ZF92Y3B1KHZjcHUpYC4gYGlzX3RkX3ZjcHVgIGNoZWNrcyBpZiBgaXNfdGQodmNwdS1cdTAwM2Vrdm0pYC4gYGlzX3RkYCBjaGVja3MgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk1gLiBBbmQgdGhhdCByZXF1aXJlcyBgZW5hYmxlX3RkeGAsIHdoaWNoIHJlcXVpcmVzIHRoZSBoYXJkd2FyZS4gR290IGl0LiBJbXBvc3NpYmxlIHRvIHJlYWNoLlxuXG5Pa2F5LCB0aGUgY2hhbmdlcyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBURFggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUvR0NFLCBhbmQgdGhlIHJlc3QgaXMganVzdCByZWZhY3RvcmluZyBvZiBleGlzdGluZyBWTVggY29kZSwgd2l0aCBubyBjaGFuZ2UgdG8gdGhlIGdlbmVyYXRlZCBjb2RlLlxuXG5MZXQncyBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgY2hhbmdlcyBvZiBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgYXJlIGFsc28gVERYIHNwZWNpZmljLiBUaGlzIGxvb2tzIGdvb2QuXG5FdmVyeXRoaW5nIGlzIFREWCBzcGVjaWZpYyBleGNlcHQgdGhlIHJlZmFjdG9yaW5nLiBJJ20gY29uZmlkZW50LiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1NTksIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MzQuMDY3NTk2ODE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBzdXBwb3J0IChJbnRlbCBURFgpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIHRvIHN0YW5kYXJkIFZNWCBjb2RlIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgbG9naWMgd2l0aCBURFgsIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1NDozNC4wNjc2MjE5MTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowg4mrx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 12:12:03 +0000 UTC FinishedAt: 2026-08-10 12:54:35 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NmI0NmIwNTg4OTliZDBmNDk2YjUyZDdiMTkxMzNhODFlODFlZTliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTI6NTI6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbmluZGV4IDA4MDA1Njc2NzAyYzIuLjJjYmFhOWFiYTkwMWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG4gXG5AQCAtMTgzLDYgJiM0MzsxODQsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4mIzQzO1xuJiM0MztcdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiYjNDM7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbiYjNDM7XHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4mIzQzO1x0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4gbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uYWMzZjcxNjQzY2Q1ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC05MjEsMTAgJiM0Mzs5MjEsMTAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xuIH1cbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4mIzQzO1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuIFxuIFx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG5AQCAtOTM0LDIzICYjNDM7OTM0LDMzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFN5bnRoZXNpemUgYW4gaW52YWxpZCBib2d1cyBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWC1Nb2R1bGVcbiYjNDM7XHRcdCAqIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQgUmVhc29uIGlzXG4mIzQzO1x0XHQgKiB1bmRlZmluZWQsIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRcdFx0LmJhc2ljID0gLTEsXG4mIzQzO1x0XHR9O1xuIFx0fVxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuJiM0MztcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4gXG4tXHRzd2l0Y2ggKGV4aXRfcmVhc29uKSB7XG4mIzQzO1x0c3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9URENBTEw6XG4gXHRcdGlmICh0ZHZtY2FsbF9leGl0X3R5cGUodmNwdSkpXG4tXHRcdFx0cmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDtcbi1cbi1cdFx0cmV0dXJuIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gRVhJVF9SRUFTT05fVk1DQUxMO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzpcbiBcdFx0LypcbiBcdFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxuIFx0XHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRcdFx0LmJhc2ljID0gLTEsXG4mIzQzO1x0XHR9O1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtOTY3LDcgJiM0Mzs5NzcsNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0dGR4LVx1MDAzZXZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcihcdTAwMjZ0ZHgtXHUwMDNldnAsIFx1MDAyNnRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzKTtcbiBcbi1cdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuJiM0MztcdHZ0LVx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcbiBcdHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xuQEAgLTk4MSw4ICYjNDM7OTkxLDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4mIzQzO1x0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnk7XG4gfVxuIFxuIHN0YXRpYyBmYXN0cGF0aF90IHRkeF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMDcxLDggJiM0MzsxMDgwLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxuIFx0ICogVERDQUxMcy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxuJiM0MztcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xuJiM0MztcdFx0dnQtXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSAwO1xuIFx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XG4mIzQzO1x0fVxuIFxuIFx0dHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyBcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XG4gXG5AQCAtMjAyOCw3ICYjNDM7MjAzOSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcbiB9XG4gXG4gXG4taW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4mIzQzO3N0YXRpYyBpbnQgX190ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFx0dTY0IHZwX2VudGVyX3JldCA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG5AQCAtMjEyNiw2ICYjNDM7MjEzNywxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdFx0ICogLSBJZiBpdCYjMzk7cyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIDE7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9OT1RJRlk6XG4mIzQzO1x0XHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXG4mIzQzO1x0XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbiYjNDM7XHRcdHJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjEzNSwxMyAmIzQzOzIxNTEsMjkgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbiYjNDM7XG4mIzQzO1x0LyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovXG4mIzQzO1x0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFx0XHR1NjQgKmluZm8xLCB1NjQgKmluZm8yLCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XG4mIzQzO1x0aWYgKHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5iYXNpYyAhPSAtMSkge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgJiM0MzszMTg2LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbiYjNDM7XHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4mIzQzO1x0XHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxuJiM0MztcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xuJiM0MztcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDcgJiM0Mzs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7aW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdC8qXG4gXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcbkBAIC02Mjc5LDkgJiM0Mzs2Mjc5LDYgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4tXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbi1cbi1cdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiBcbiBcdC8qXG4gXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02MjkxLDE1ICYjNDM7NjI4OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxuIFx0XHRcdCAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTtcbiBcbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4tXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuLVx0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbiYjNDM7XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICYjNDM7Mzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpO1xuJiM0MztpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0IHUzMiBtc3IsIGludCB0eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgY29kZSwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgc3VwcG9ydCAoSW50ZWwgVERYKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGUgY2hhbmdlcyB0byBzdGFuZGFyZCBWTVggY29kZSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGxvZ2ljIHdpdGggVERYLCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2YjQ2YjA1ODg5OWJkMGY0OTZiNTJkN2IxOTEzM2E4MWU4MWVlOWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxMjo1MjozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCmluZGV4IDA4MDA1Njc2NzAyYzIuLjJjYmFhOWFiYTkwMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bW11LmgmIzM0OwogCkBAIC0xODMsNiAmIzQzOzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCkKJiM0Mzt7CiYjNDM7CWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7CiYjNDM7CiYjNDM7CWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyAmYW1wOyBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fAomIzQzOwkgICAgY29udGV4dF9pbnZhbGlkKSB7CiYjNDM7CQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgPwomIzQzOwkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IGIyNzJjMjA1ODZhNzQuLmFjM2Y3MTY0M2NkNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtOTIxLDEwICYjNDM7OTIxLDEwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBFWElUX1JFQVNPTl9URENBTEw7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwotCXUzMiBleGl0X3JlYXNvbjsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uOwogCiAJc3dpdGNoICh0ZHgtJmd0O3ZwX2VudGVyX3JldCAmYW1wOyBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHsKIAljYXNlIFREWF9TVUNDRVNTOgpAQCAtOTM0LDIzICYjNDM7OTM0LDMzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtMXU7CiYjNDM7CQkvKgomIzQzOwkJICogU3ludGhlc2l6ZSBhbiBpbnZhbGlkIGJvZ3VzIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYLU1vZHVsZQomIzQzOwkJICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMKJiM0MzsJCSAqIHVuZGVmaW5lZCwgYnV0IHRoaXMgaXMgTk9UIGEgZmFpbGVkIFZNLUVudGVyLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgewomIzQzOwkJCS5iYXNpYyA9IC0xLAomIzQzOwkJfTsKIAl9CiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKIAotCXN3aXRjaCAoZXhpdF9yZWFzb24pIHsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCXJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7CiYjNDM7CQkJLmJhc2ljID0gLTEsCiYjNDM7CQl9OwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTk2Nyw3ICYjNDM7OTc3LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCXRkeC0mZ3Q7dnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKCZhbXA7dGR4LSZndDt2cCwgJmFtcDt0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MpOwogCi0JdnQtJmd0O2V4aXRfcmVhc29uLmZ1bGwgPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpOwomIzQzOwl2dC0mZ3Q7ZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpOwogCiAJdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yY3g7CiAJdGR4LSZndDtleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LSZndDt2cF9lbnRlcl9hcmdzLnJkeDsKQEAgLTk4MSw4ICYjNDM7OTkxLDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGJvb2wgdGR4X2ZhaWxlZF92bWVudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSAmYW1wOyZhbXA7Ci0JICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7CiYjNDM7CXJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5OwogfQogCiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xMDcxLDggJiM0MzsxMDgwLDEwIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAkgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmQKIAkgKiBURENBTExzLgogCSAqLwotCWlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LSZndDtrdm0pLSZndDt3YWl0X2Zvcl9zZXB0X3phcCkpKQomIzQzOwlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkgewomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gMDsKIAkJcmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEOwomIzQzOwl9CiAKIAl0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzICZhbXA7IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpOwogCkBAIC0yMDI4LDcgJiM0MzsyMDM5LDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQogfQogCiAKLWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQomIzQzO3N0YXRpYyBpbnQgX190ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQogewogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCXU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtJmd0O3ZwX2VudGVyX3JldDsKQEAgLTIxMjYsNiAmIzQzOzIxMzcsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpCiAJCSAqIC0gSWYgaXQmIzM5O3Mgbm90IGFuIE1TTUksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KIAkJICovCiAJCXJldHVybiAxOwomIzQzOwljYXNlIEVYSVRfUkVBU09OX05PVElGWToKJiM0MzsJCS8qIE5NSSBibG9ja2luZyBzdGF0ZSBpcyBoYW5kbGVkIGJ5IFREWCBtb2R1bGUgKi8KJiM0MzsJCXJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzoKJiM0MzsJCXJldHVybiBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTIxMzUsMTMgJiM0MzsyMTUxLDI5IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwomIzQzOwkvKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayB3YXMgZGV0ZWN0ZWQgKi8KJiM0MzsJaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSzsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbiwKIAkJdTY0ICppbmZvMSwgdTY0ICppbmZvMiwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAogCSpyZWFzb24gPSB0ZHgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGw7Ci0JaWYgKCpyZWFzb24gIT0gLTF1KSB7CiYjNDM7CWlmICh0ZHgtJmd0O3Z0LmV4aXRfcmVhc29uLmJhc2ljICE9IC0xKSB7CiAJCSppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQkqaW5mbzIgPSB0ZHgtJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb247CiAJCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKQEAgLTMxNTQsNiAmIzQzOzMxODYsMTcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiAJdGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKCZhbXA7dGR4LSZndDt2dC5waV9kZXNjKSk7CiAJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIFBJTl9CQVNFRF9QT1NURURfSU5UUik7CiAKJiM0MzsJaWYgKGt2bV9ub3RpZnlfdm1leGl0X2VuYWJsZWQodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsCiYjNDM7CQkJCSBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7CiYjNDM7CQl0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLAomIzQzOwkJCQl2Y3B1LSZndDtrdm0tJmd0O2FyY2gubm90aWZ5X3dpbmRvdyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZCkKJiM0MzsJCXRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLAomIzQzOwkJCQkgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTsKJiM0MzsKIAl0ZHgtJmd0O3N0YXRlID0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggZTNiZmU2YWNhMWEwZS4uYzQyOWRiOWI5MjA1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC02MjY1LDcgJiM0Mzs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqLwogCi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO2ludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkvKgogCSAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DSwpAQCAtNjI3OSw5ICYjNDM7NjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7Ci0JYm9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgJmFtcDsgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDsKLQotCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7CiAKIAkvKgogCSAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLApAQCAtNjI5MSwxNSAmIzQzOzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKIAkJCSAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKIAotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyAmYW1wOyBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fAotCSAgICBjb250ZXh0X2ludmFsaWQpIHsKLQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTsKLQkJdmNwdS0mZ3Q7cnVuLSZndDtub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgPwotCQkJCQkgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7CiYjNDM7CXJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTM3OSw2ICYjNDM7Mzc5LDcgQEAgYm9vbCBfX3ZteF92Y3B1X3J1bihzdHJ1Y3QgdmNwdV92bXggKnZteCwgdW5zaWduZWQgaW50IGZsYWdzKTsKIHZvaWQgdm14X2VwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB2b2lkIHZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCBpbnQgdHlwZSwgYm9vbCBzZXQpOwomIzQzO2ludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCQkgdTMyIG1zciwgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBURFggUGF0Y2gmIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBLVk0gVERYIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYW5kIHJlbGF0ZWQgaGVhZGVycy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgaGFuZGxpbmcgYEVYSVRfUkVBU09OX05PVElGWWAgYW5kIGBFWElUX1JFQVNPTl9CVVNfTE9DS2AgaW4gVERYIGFuZCBhbHNvIHJlZmFjdG9yaW5nIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYC4gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHdhcnJhbnRzIGZ1enppbmcgZWZmb3J0LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgVERYIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgVERYIHJlcXVpcmVzIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIGFuZCB0aGF0IHRocm93cyB1cCBhIHJlZCBmbGFnLiBTdGFuZGFyZCBRRU1VIG9yIEdDRSBpbnN0YW5jZXMgbWlnaHQgKm5vdCogaGF2ZSB0aGF0IGhhcmR3YXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHN5emthbGxlciBjYW4gdXNlIHRoaXMuIFN5emthbGxlciBoZWF2aWx5IHVzZXMgYC9kZXYva3ZtYC4gSWYgdGhlIGhvc3QgZG9lc24mIzM5O3Qgc3VwcG9ydCBURFgsIGBLVk1fQ0FQX1ZNX1RZUEVTYCB3b24mIzM5O3QgYWR2ZXJ0aXNlIGl0LCBhbmQgY3JlYXRpbmcgYSBWTSB3aXRoIFREWCB3aWxsIGZhaWwuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGF0IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgc2hvdWxkIGJlIGZsYWdnZWQgYXMgbm90IHdvcnRoIGZ1enppbmcuIE9rYXksIHNvIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBhcmUgYW4gaXNzdWUgaGVyZS4gTmVzdGVkIFREWCBpcyBub3Qgc3VwcG9ydGVkIHlldCBvciByZXF1aXJlcyBoYXJkd2FyZSBzdXBwb3J0LgoKSG93ZXZlciwgdGhlIHBhdGNoICphbHNvKiB0b3VjaGVzIGB2bXguY2AsIGFuZCBJIGtub3cgdGhhdCBWTVggaXMgaGVhdmlseSBmdXp6ZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmYWN0b3JpbmcgY29kZSB0byBleHRyYWN0IGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIHRvIGJlIHVzZWQgaW4gYm90aCBgdm14LmNgIGFuZCBgdGR4LmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIG5vdCBmdW5kYW1lbnRhbGx5IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdXMgdG8gdGFyZ2V0IGl0IGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4KCkkgZHVnIGludG8gdGhlIGNoYW5nZXMgaW4gYHZteC5jYC4gSXQgbG9va3MgbGlrZSBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMganVzdCBjaGFuZ2luZyBpdHMgbGlua2FnZSBmcm9tIHN0YXRpYyB0byBnbG9iYWwuIEFsc28sIHRoZSBgaGFuZGxlX25vdGlmeWAgZnVuY3Rpb24gaW4gYHZteC5jYCBpcyBiZWluZyByZWZhY3RvcmVkLiBUaGUgbG9naWMgaXMgbW92ZWQgdG8gYF9fdm14X2hhbmRsZV9ub3RpZnlgIGluIGBjb21tb24uaGAuIFNvLCB0aGVyZSBhcmUgbm8gKmZ1bmN0aW9uYWwqIGNoYW5nZXMgaW4gdGhlIHN0YW5kYXJkIFZNWCBjb2RlLiBUaGlzIGlzIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBjb2RlIHdpdGggVERYLiBUaGlzIG1lYW5zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIG1haW5seSBpbiBgdGR4LmNgIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgYEVYSVRfUkVBU09OX05PVElGWWAgYW5kIGBFWElUX1JFQVNPTl9CVVNfTE9DS2AgYXJlIGltcGxlbWVudGVkLCBhbG9uZyB3aXRoIHJlZmFjdG9yaW5nIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGZ1enogdGhlICpURFgqIHBhcnRzPyBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdvbiYjMzk7dCBzdXBwb3J0IGl0IGJlY2F1c2UgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LiBHQ0UgKmRvZXMqIGhhdmUgVERYIGluc3RhbmNlcywgbGlrZSBDMyBpbnN0YW5jZXMsIGJ1dCBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzIHVzdWFsbHkgcnVuIG9uIGdlbmVyaWMgaW5zdGFuY2VzIG9yIFFFTVUgd2l0aG91dCBURFggaGFyZHdhcmUuIFREWCByZWxpZXMgb24gdGhlIFREWCBtb2R1bGUgKFNFQU0pIGFuZCBoYXJkd2FyZSBlbmNyeXB0aW9uIGFuZCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc29mdHdhcmUuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgdGR4X2hhbmRsZV9leGl0YCBpcyByZWFjaGFibGUuIEkgd2lsbCBzZWFyY2ggZm9yIHVzYWdlcyBvZiBgdGR4X2hhbmRsZV9leGl0YCBhbmQgYHRkeF90b192bXhfZXhpdF9yZWFzb25gLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aG9zZSBleGl0IHJlYXNvbnMgYXJlIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfaGFuZGxlX2V4aXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTU3PXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2MC1cdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTYxOlx0XHRyZXR1cm4gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTkyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk1Ny1cdFx0LypcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6OTU4Olx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk1OS1cdFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTE0Mz1zdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTQ4LVx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTE0OTpcdCAqIHRkeF9oYW5kbGVfZXhpdCgpIHdpdGggVERYX05PTl9SRUNPVkVSQUJMRSBzZXQgaWYgYSAjTUMgb2NjdXJzIG9uXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTExNTAtXHQgKiBWTS1FbnRyeS4gIE5NSXMgYXJlIGhhbmRsZWQgYnkgdGR4X3ZjcHVfZW50ZXJfZXhpdCgpLlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjAyOD1pbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDQxLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMDQyOnN0YXRpYyBpbnQgX190ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNTMtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNTQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNTUte1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMTU2Olx0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xNDM9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjE0NDppbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTE0NS1cdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFREIHZDUFUgRXhpdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGhhbmRsZSBleGl0cyByZWxhdGVkIHRvIFREIHZpcnR1YWwgQ1BVcy4gU3BlY2lmaWNhbGx5LCB0aGUgYHRkeF9oYW5kbGVfZXhpdGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgdnRfaGFuZGxlX2V4aXRgLCBidXQgb25seSBpZiB0aGUgQ1BVIGluIHF1ZXN0aW9uIChgdmNwdWApIGlzLCBpbiBmYWN0LCBhIFREIHZDUFUuIFRoZSBpbnRlcmVzdGluZyBwb2ludCBJJiMzOTttIGZvY3VzaW5nIG9uIG5vdyBpcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY3JlYXRlIGEgVEQgdkNQVSBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2VzbiYjMzk7dCBvZmZlciB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQuIEl0IG1ha2VzIG1lIGN1cmlvdXMgYWJvdXQgdGhlIGFzc3VtcHRpb25zIGJha2VkIGludG8gdGhlIGRlc2lnbi4gVG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuZCBjbGFyaWZ5IHRoZSBjaXJjdW1zdGFuY2VzIGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBJIHNob3VsZCByZS1leGFtaW5lIHRoZSBgaXNfdGRfdmNwdWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgaG93IGl0IGRldGVybWluZXMgaWYgYSBDUFUgaXMgYSBURCB2Q1BVLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoZSBsb2dpYyBjb3ZlcnMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgVEQgdkNQVSB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfdGRfdmNwdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02NS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NjY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Ny17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD03Mz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo3NDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTc1LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTczPXN0YXRpYyBpbnQgdnRfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc2LVx0XHRyZXR1cm4gdGR4X3ZjcHVfY3JlYXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgxPXN0YXRpYyB2b2lkIHZ0X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04Mi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NC1cdFx0dGR4X3ZjcHVfZnJlZSh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MT1zdGF0aWMgdm9pZCB2dF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTM6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTQtXHRcdHRkeF92Y3B1X3Jlc2V0KHZjcHUsIGluaXRfZXZlbnQpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwMT1zdGF0aWMgdm9pZCB2dF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAyLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDQtXHRcdHRkeF92Y3B1X2xvYWQodmNwdSwgY3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMTE9c3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMTYtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjExNzpcdGlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMTgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMjM9c3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTI0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEyNTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMjYtXHRcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMzM9c3RhdGljIHZvaWQgdnRfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTM0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzNTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMzYtXHRcdHRkeF92Y3B1X3B1dCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNDM9c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDQte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTQ1Olx0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDYtXHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTQ5PXN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE1MC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNTE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE1Mi1cdFx0cmV0dXJuIHRkeF92Y3B1X3J1bih2Y3B1LCBydW5fZmxhZ3MpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE1Nz1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNTkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTYwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjEtXHRcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2Nj1zdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Ny17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNjg6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY5LVx0XHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNzY9c3RhdGljIGludCB2dF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE3Ny17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNzg6XHRpZiAodW5saWtlbHkoaXNfdGRfdmNwdSh2Y3B1KSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzktXHRcdHJldHVybiB0ZHhfc2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTk2PXN0YXRpYyBpbnQgdnRfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xOTcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk4Olx0aWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTk5LVx0XHRyZXR1cm4gdGR4X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTIwND1zdGF0aWMgdm9pZCB2dF9yZWNhbGNfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjExLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMTI6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIxMy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTIxOD1zdGF0aWMgaW50IHZ0X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMTkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjIwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjEtXHRcdHJldHVybiB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHZjcHUsIGVycik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjI3PXN0YXRpYyBpbnQgdnRfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjgte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjI5Olx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjMwLVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMzU9c3RhdGljIGludCB2dF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjM2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjIzNzpcdGlmIChLVk1fQlVHX09OKGlzX3RkX3ZjcHUodmNwdSksIHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIzOC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQzPXN0YXRpYyBpbnQgdnRfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI0NC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyNDU6XHRpZiAoS1ZNX0JVR19PTihpc190ZF92Y3B1KHZjcHUpLCB2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNDYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI1MT1zdGF0aWMgdm9pZCB2dF9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjUzOlx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjU0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjYxPXN0YXRpYyBpbnQgdnRfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjcwLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyNzE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI3Mi1cdFx0cmV0dXJuIFg4NkVNVUxfUkVUUllfSU5TVFI7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mjc3PXN0YXRpYyBib29sIHZ0X2FwaWNfaW5pdF9zaWduYWxfYmxvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjgyLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyODM6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI4NC1cdFx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mjg5PXN0YXRpYyB2b2lkIHZ0X3NldF92aXJ0dWFsX2FwaWNfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjkxLVx0LyogT25seSB4MkFQSUMgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIFRELiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjkyOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yOTMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yOTg9c3RhdGljIHZvaWQgdnRfaHdhcGljX2lzcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWF4X2lzcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI5OS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMDA6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMwMS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTMwNj1zdGF0aWMgaW50IHZ0X3N5bmNfcGlyX3RvX2lycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzA4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDktXHRcdHJldHVybiAtMTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zMTQ9c3RhdGljIHZvaWQgdnRfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzE2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMxNzpcdGlmIChpc190ZF92Y3B1KGFwaWMtXHUwMDNldmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxOC1cdFx0dGR4X2RlbGl2ZXJfaW50ZXJydXB0KGFwaWMsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zMjY9c3RhdGljIHZvaWQgdnRfdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzM0PXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9leGNlcHRpb25fYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzNS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMzY6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzNy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM0Mj1zdGF0aWMgdTY0IHZ0X2dldF9zZWdtZW50X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzQzLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM0NDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzQ1LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNTA9c3RhdGljIHZvaWQgdnRfZ2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzUzOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM1NC1cdFx0bWVtc2V0KHZhciwgMCwgc2l6ZW9mKCp2YXIpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNjE9c3RhdGljIHZvaWQgdnRfc2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNjMte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzY0Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNjUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNzA9c3RhdGljIGludCB2dF9nZXRfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3MS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzI6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3My1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mzc4PXN0YXRpYyBpbnQgdnRfZ2V0X2NwbF9ub19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNzkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzgwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zODEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM4Nj1zdGF0aWMgdm9pZCB2dF9nZXRfY3NfZGJfbF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzg3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM4ODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zODktXHRcdCpkYiA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Mzk3PXN0YXRpYyBib29sIHZ0X2lzX3ZhbGlkX2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzk4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM5OTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDAwLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00MDU9c3RhdGljIHZvaWQgdnRfc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDA2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQwNzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDA4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDEzPXN0YXRpYyBib29sIHZ0X2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDE0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQxNTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDE2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00MjE9c3RhdGljIHZvaWQgdnRfc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDIyLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQyMzpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDI0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDI5PXN0YXRpYyBpbnQgdnRfc2V0X2VmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQzMC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0MzE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQzMi1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM3PXN0YXRpYyB2b2lkIHZ0X2dldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDM4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQzOTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NDAtXHRcdG1lbXNldChkdCwgMCwgc2l6ZW9mKCpkdCkpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ0Nz1zdGF0aWMgdm9pZCB2dF9zZXRfaWR0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NfcHRyICpkdClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ0OC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NDk6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ1NT1zdGF0aWMgdm9pZCB2dF9nZXRfZ2R0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NfcHRyICpkdClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1Ni17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NTc6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDU4LVx0XHRtZW1zZXQoZHQsIDAsIHNpemVvZigqZHQpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NjU9c3RhdGljIHZvaWQgdnRfc2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjX3B0ciAqZHQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NjYte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDY3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NjgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NzM9c3RhdGljIHZvaWQgdnRfc2V0X2RyNyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdmFsKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ3NTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDgxPXN0YXRpYyB2b2lkIHZ0X3N5bmNfZGlydHlfZGVidWdfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDg3LVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0ODg6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ4OS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ5ND1zdGF0aWMgdm9pZCB2dF9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDk1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ5NjpcdGlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00OTctXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01MDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MDMte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTA0Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MDUtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUxMD1zdGF0aWMgdm9pZCB2dF9zZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MTEte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTEyOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MTMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01MTg9c3RhdGljIGJvb2wgdnRfZ2V0X2lmX2ZsYWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTE5LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUyMDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTI2PXN0YXRpYyB2b2lkIHZ0X2ZsdXNoX3RsYl9hbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTI3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUyODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MjktXHRcdHRkeF9mbHVzaF90bGJfYWxsKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUzNj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfY3VycmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01Mzcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTM4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUzOS1cdFx0dGR4X2ZsdXNoX3RsYl9jdXJyZW50KHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU0Nj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0Ny17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1NDg6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0OS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU1ND1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTU1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU1NjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTU3LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTYyPXN0YXRpYyB2b2lkIHZ0X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTYzLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU2NDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NjUtXHRcdHRkeF9pbmplY3Rfbm1pKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU3Mj1zdGF0aWMgaW50IHZ0X25taV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU3Ny1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTc4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NzktXHRcdHJldHVybiB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU4ND1zdGF0aWMgYm9vbCB2dF9nZXRfbm1pX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU4OS1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTkwOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01OTY9c3RhdGljIHZvaWQgdnRfc2V0X25taV9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXNrZWQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTcte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTk4Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MDQ9c3RhdGljIHZvaWQgdnRfZW5hYmxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYwNi1cdC8qIFJlZmVyIHRvIHRoZSBjb21tZW50cyBpbiB0ZHhfaW5qZWN0X25taSgpLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjA3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MDgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MTM9c3RhdGljIHZvaWQgdnRfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjE1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjYxNjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTctXHRcdHRkeF9sb2FkX21tdV9wZ2QodmNwdSwgcm9vdF9ocGEsIHBnZF9sZXZlbCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjI0PXN0YXRpYyB2b2lkIHZ0X3NldF9pbnRlcnJ1cHRfc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1hc2spXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MjUte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjI2Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MjctXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MzI9c3RhdGljIHUzMiB2dF9nZXRfaW50ZXJydXB0X3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MzMte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjM0Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MzUtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY0MD1zdGF0aWMgdm9pZCB2dF9wYXRjaF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY0Ni1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjQ3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NDgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02NTM9c3RhdGljIHZvaWQgdnRfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmVpbmplY3RlZClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY1NC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NTU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY1Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY2MT1zdGF0aWMgdm9pZCB2dF9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2Mi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NjM6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2NC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY2OT1zdGF0aWMgdm9pZCB2dF9jYW5jZWxfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY3MC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NzE6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY3Mi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY3Nz1zdGF0aWMgaW50IHZ0X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjc4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY3OTpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjgwLVx0XHRyZXR1cm4gdGR4X2ludGVycnVwdF9hbGxvd2VkKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY4NT1zdGF0aWMgdm9pZCB2dF9lbmFibGVfaXJxX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODYte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Njg3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02OTM9c3RhdGljIHZvaWQgdnRfZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY5Ny1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY5ODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjk5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzA0PXN0YXRpYyB2b2lkIHZ0X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MDYte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzA3Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcwOC1cdFx0dGR4X2dldF9leGl0X2luZm8odmNwdSwgcmVhc29uLCBpbmZvMSwgaW5mbzIsIGludHJfaW5mbyxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03MTY9c3RhdGljIHZvaWQgdnRfdXBkYXRlX2NyOF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHByLCBpbnQgaXJyKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzE3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcxODpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzE5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzI0PXN0YXRpYyB2b2lkIHZ0X3NldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzI1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcyNjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzI3LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzMyPXN0YXRpYyB2b2lkIHZ0X3JlZnJlc2hfYXBpY3ZfZXhlY19jdHJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTczMy17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3MzQ6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzM1LVx0XHRLVk1fQlVHX09OKCFrdm1fdmNwdV9hcGljdl9hY3RpdmUodmNwdSksIHZjcHUtXHUwMDNla3ZtKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03NDI9c3RhdGljIHZvaWQgdnRfbG9hZF9lb2lfZXhpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZW9pX2V4aXRfYml0bWFwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQzLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc0NDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQ1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Nzc0PXN0YXRpYyB1NjQgdnRfZ2V0X2wyX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3Ni1cdC8qIFREWCBkb2VzbiYjMzk7dCBzdXBwb3J0IEwyIGd1ZXN0IGF0IHRoZSBtb21lbnQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3Nzc6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3OC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzgzPXN0YXRpYyB1NjQgdnRfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODUtXHQvKiBURFggZG9lc24mIzM5O3Qgc3VwcG9ydCBMMiBndWVzdCBhdCB0aGUgbW9tZW50LiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Nzg2Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODctXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc5Mj1zdGF0aWMgdm9pZCB2dF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03OTQtXHQvKiBJbiBURFgsIHRzYyBvZmZzZXQgY2FuJiMzOTt0IGJlIGNoYW5nZWQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3OTU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc5Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgwMT1zdGF0aWMgdm9pZCB2dF93cml0ZV90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODAzLVx0LyogSW4gVERYLCB0c2MgbXVsdGlwbGllciBjYW4mIzM5O3QgYmUgY2hhbmdlZC4gKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgwNDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODA1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODExPXN0YXRpYyBpbnQgdnRfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYyxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MTQtXHQvKiBWTVgtcHJlZW1wdGlvbiB0aW1lciBpc24mIzM5O3QgYXZhaWxhYmxlIGZvciBURFguICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MTU6XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgxNi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODIxPXN0YXRpYyB2b2lkIHZ0X2NhbmNlbF9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODIzLVx0LyogVk1YLXByZWVtcHRpb24gdGltZXIgY2FuJiMzOTt0IGJlIHNldC4gIFNlZSB2dF9zZXRfaHZfdGltZXIoKS4gKi9cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgyNDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODI1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODMxPXN0YXRpYyB2b2lkIHZ0X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MzIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODMzOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MzQtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NDc9c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0OC17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NDk6XHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NTAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg1NT1zdGF0aWMgaW50IHZ0X3ZjcHVfbWVtX2VuY191bmxvY2tlZF9pb2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgX191c2VyICphcmdwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODU2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg1NzpcdGlmICghaXNfdGRfdmNwdSh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg1OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz00MD1zdGF0aWMgc3RydWN0IGxicl9kZXNjICp2Y3B1X3RvX2xicl9kZXNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtNDEte1xuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo0MjpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00My1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz00OD1zdGF0aWMgc3RydWN0IHg4Nl9wbXVfbGJyICp2Y3B1X3RvX2xicl9yZWNvcmRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtNDkte1xuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo1MDpcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy01MS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz0xNDk9c3RhdGljIGJvb2wgaW50ZWxfcG11X2xicl9pc19jb21wYXRpYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTUwLXtcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTUxOlx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE1Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9MTU3PWJvb2wgaW50ZWxfcG11X2xicl9pc19lbmFibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTU4LXtcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTU5Olx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE2MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMDk9c3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTIxOC1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjIxOTpcdHJldHVybiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSBcdTAwMjZcdTAwMjYgIWlzX3RkX3ZjcHUodmNwdSkpIHx8XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjIwLVx0XHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMjM9dm9pZCB2bXhfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDItXHRpZiAoIXZjcHUtXHUwMDNlcHJlZW1wdGVkIFx1MDAyNlx1MDAyNiBrdm1fdmNwdV9pc19ibG9ja2luZyh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyNDM6XHQgICAgKChpc190ZF92Y3B1KHZjcHUpIFx1MDAyNlx1MDAyNiB0ZHhfaW50ZXJydXB0X2FsbG93ZWQodmNwdSkpIHx8XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6MjQ0Olx0ICAgICAoIWlzX3RkX3ZjcHUodmNwdSkgXHUwMDI2XHUwMDI2ICF2bXhfaW50ZXJydXB0X2Jsb2NrZWQodmNwdSkpKSlcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDUtXHRcdHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTMyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm14X2dldF9leGl0X3F1YWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI2LVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC92bXguaDozMjc6XHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI4LVx0XHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguaD0zMzM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzM3LVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC92bXguaDozMzg6XHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzM5LVx0XHR2dC1cdTAwM2VleGl0X2ludHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBURFggdkNQVSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXNfdGRfdmNwdWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBpZGVudGlmeWluZyBpZiBhIHZDUFUgaXMgcnVubmluZyB3aXRoaW4gYSBURFggZW52aXJvbm1lbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBhY3R1YWxseSAqcG9zc2libGUqIHRvIGNvbmp1cmUgdXAgYSBURFggdkNQVSB3aXRob3V0IHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBoZXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kLgoKVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBkaXZlIGludG8gaG93IHRoZXNlIHZDUFVzIGFyZSBhY3R1YWxseSBjb25zdHJ1Y3RlZC4gVGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGB0ZHhfdmNwdV9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyByZXF1aXJlbWVudHMsIGFuZCBpdHMgZXJyb3IgY29uZGl0aW9ucy4gRG9lcyBpdCBzdHJpY3RseSBlbmZvcmNlIGEgVERYIGhhcmR3YXJlIGNoZWNrPyBEb2VzIGl0IG9mZmVyIGFueSBsZWV3YXkgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcz8gVGhlIGFuc3dlcnMgdG8gdGhlc2UgcXVlc3Rpb25zIGFyZSBnb2luZyB0byBjbGFyaWZ5IGlmIHdlIGNhbiBydW4gVERYIGNvZGUgd2l0aG91dCBoYXZpbmcgYSBzdXBwb3J0aW5nIHBsYXRmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF92Y3B1X2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz03Mz1zdGF0aWMgaW50IHZ0X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03NS1cdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzY6XHRcdHJldHVybiB0ZHhfdmNwdV9jcmVhdGUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTYxOD1pbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNjY3LVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo2Njg6aW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTY2OS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04Mjc9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtODQxLSAqIDMuIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gKG9ubHkgd2hlbiBURCBpcyBURF9TVEFURV9JTklUSUFMSVpFRCkuXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjg0MjogKiAgICAzLjEgdGR4X3ZjcHVfY3JlYXRlKCkgdHJhbnNpdGlvbnMgdkNQVSBzdGF0ZSB0byBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQuXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0My0gKiAgICAzLjIgdmNwdV9sb2FkKCkgYW5kIHZjcHVfcHV0KCkgaW4ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMzQ9aW50IHRkeF92bV9pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzNjppbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xMzctdm9pZCB0ZHhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFREWCBJbml0aWFsaXphdGlvbioqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYHRkeF92bV9pbml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVERYIGlzIGFjdHVhbGx5IGVuYWJsZWQuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB3aGV0aGVyIG9yIG5vdCBURFggZW5hYmxlbWVudCBpcyBjb250aW5nZW50IG9uIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBNeSByZWFzb25pbmcgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IGlmIGB0ZHhfdm1faW5pdGAgcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVz4oCUaW4gdGhpcyBjYXNlLCBmb3IgVERYIHN1cHBvcnTigJR0aGVuIHRoZSBmdW5jdGlvbiBzaG91bGQgZmFpbCBncmFjZWZ1bGx5IHdoZW4gdGhvc2UgZmVhdHVyZXMgYXJlbiYjMzk7dCBwcmVzZW50LiBBIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gaGluZ2VzIG9uIHRoZSBwbGF0Zm9ybSYjMzk7cyBzdXBwb3J0IGZvciB0aGUgcmVxdWlyZWQgdGVjaG5vbG9naWVzLiBUaGVyZWZvcmUsIGEgZmFpbHVyZSBvZiB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYW4gZXhjZWxsZW50IGluZGljYXRvciBvZiBtaXNzaW5nIFREWCBoYXJkd2FyZSBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfdm1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz00Mz1zdGF0aWMgaW50IHZ0X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1LVx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NjpcdFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTYwNT1zdGF0aWMgaW50IHRkeF9kb190ZGhfbW5nX2tleV9jb25maWcodm9pZCAqcGFyYW0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy02MTctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjYxODppbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy02MTkte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzMD12b2lkIHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzMTppbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzMi12b2lkIHRkeF9tbXVfcmVsZWFzZV9oa2lkKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDAxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gVERYIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9uKSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHdpdGhpbiBLVk0gb24geDg2LiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYHRkeF92bV9pbml0YCBmdW5jdGlvbiwgYW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGVyZSBJJiMzOTtsbCBiZSBkaWdnaW5nIGluLiBTbywgSSYjMzk7bGwgYmUgbmF2aWdhdGluZyB0byBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb21lcyB0b2dldGhlci4gVW5kZXJzdGFuZGluZyBob3cgdGhlIFZNIGlzIHNldCB1cCBmb3IgVERYIGlzIGNyaXRpY2FsIHRvIGV2ZXJ5dGhpbmcgZWxzZSwgc28gdGhpcyBpcyB3aGVyZSBJIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxODpcdGludCB0ZHhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gNjE5Olx0e1xuIDYyMDpcdFx0c3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7XG4gNjIxOlx0XG4gNjIyOlx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlID0gdHJ1ZTtcbiA2MjM6XHRcdC8qXG4gNjI0Olx0XHQgKiBURFggTW9kdWxlIGRvZXNuJiMzOTt0IGFsbG93IHRoZSBoeXBlcnZpc29yIHRvIG1vZGlmeSB0aGUgRU9JLWJpdG1hcCxcbiA2MjU6XHRcdCAqIGkuZS4gYWxsIEVPSXMgYXJlIGFjY2VsZXJhdGVkIGFuZCBuZXZlciB0cmlnZ2VyIGV4aXRzLlxuIDYyNjpcdFx0ICovXG4gNjI3Olx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX2VvaSA9IHRydWU7XG4gNjI4Olx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xuIDYyOTpcdFx0a3ZtLVx1MDAzZWFyY2guZGlzYWJsZWRfcXVpcmtzIHw9IEtWTV9YODZfUVVJUktfSUdOT1JFX0dVRVNUX1BBVDtcbiA2MzA6XHRcbiA2MzE6XHRcdC8qXG4gNjMyOlx0XHQgKiBQTVUgc3VwcG9ydCBpcyBwcm92aWRlZCBieSB0aGUgVERYLU1vZHVsZSAoaWYgZW5hYmxlZCBmb3IgdGhlIFZNKS5cbiA2MzM6XHRcdCAqIEZyb20gS1ZNJiMzOTtzIHBlcnNwZWN0aXZlLCB0aGUgVk0gZG9lc24mIzM5O3QgaGF2ZSBhIHZpcnR1YWwgUE1VLlxuIDYzNDpcdFx0ICovXG4gNjM1Olx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3BtdSA9IHRydWU7XG4gNjM2Olx0XG4gNjM3Olx0XHQvKlxuIDYzODpcdFx0ICogQmVjYXVzZSBndWVzdCBURCBpcyBwcm90ZWN0ZWQsIFZNTSBjYW4mIzM5O3QgcGFyc2UgdGhlIGluc3RydWN0aW9uIGluIFRELlxuIDYzOTpcdFx0ICogSW5zdGVhZCwgZ3Vlc3QgdXNlcyBNTUlPIGh5cGVyY2FsbC4gIEZvciB1bm1vZGlmaWVkIGRldmljZSBkcml2ZXIsXG4gNjQwOlx0XHQgKiAjVkUgbmVlZHMgdG8gYmUgaW5qZWN0ZWQgZm9yIE1NSU8gYW5kICNWRSBoYW5kbGVyIGluIFREIGNvbnZlcnRzIE1NSU9cbiA2NDE6XHRcdCAqIGluc3RydWN0aW9uIGludG8gTU1JTyBoeXBlcmNhbGwuXG4gNjQyOlx0XHQgKlxuIDY0MzpcdFx0ICogU1BURSB2YWx1ZSBmb3IgTU1JTyBuZWVkcyB0byBiZSBzZXR1cCBzbyB0aGF0ICNWRSBpcyBpbmplY3RlZCBpbnRvXG4gNjQ0Olx0XHQgKiBURCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgRVBUIE1JU0NPTkZJRy5cbiA2NDU6XHRcdCAqIC0gUldYPTAgc28gdGhhdCBFUFQgdmlvbGF0aW9uIGlzIHRyaWdnZXJlZC5cbiA2NDY6XHRcdCAqIC0gc3VwcHJlc3MgI1ZFIGJpdCBpcyBjbGVhcmVkIHRvIGluamVjdCAjVkUuXG4gNjQ3Olx0XHQgKi9cbiA2NDg6XHRcdGt2bV9tbXVfc2V0X21taW9fc3B0ZV92YWx1ZShrdm0sIDApO1xuIDY0OTpcdFxuIDY1MDpcdFx0LypcbiA2NTE6XHRcdCAqIFREWCBoYXMgaXRzIG93biBsaW1pdCBvZiBtYXhpbXVtIHZDUFVzIGl0IGNhbiBzdXBwb3J0IGZvciBhbGxcbiA2NTI6XHRcdCAqIFREWCBndWVzdHMgaW4gYWRkaXRpb24gdG8gS1ZNX01BWF9WQ1BVUy4gIFREWCBtb2R1bGUgcmVwb3J0c1xuIDY1MzpcdFx0ICogc3VjaCBsaW1pdCB2aWEgdGhlIE1BWF9WQ1BVX1BFUl9URCBnbG9iYWwgbWV0YWRhdGEuICBJblxuIDY1NDpcdFx0ICogcHJhY3RpY2UsIGl0IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzIHRoYXQgQUxMXG4gNjU1Olx0XHQgKiBwbGF0Zm9ybXMgdGhhdCB0aGUgVERYIG1vZHVsZSBzdXBwb3J0cyBjYW4gcG9zc2libHkgaGF2ZS5cbiA2NTY6XHRcdCAqXG4gNjU3Olx0XHQgKiBMaW1pdCBURFggZ3Vlc3QmIzM5O3MgbWF4aW11bSB2Q1BVcyB0byB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgQ1BVc1xuIDY1ODpcdFx0ICogdGhlIHBsYXRmb3JtIGhhcy4gIFNpbXBseSBmb3J3YXJkaW5nIHRoZSBNQVhfVkNQVV9QRVJfVEQgdG9cbiA2NTk6XHRcdCAqIHVzZXJzcGFjZSB3b3VsZCByZXN1bHQgaW4gYW4gdW5wcmVkaWN0YWJsZSBBQkkuXG4gNjYwOlx0XHQgKi9cbiA2NjE6XHRcdGt2bS1cdTAwM2VtYXhfdmNwdXMgPSBtaW5fdChpbnQsIGt2bS1cdTAwM2VtYXhfdmNwdXMsIG51bV9wcmVzZW50X2NwdXMoKSk7XG4gNjYyOlx0XG4gNjYzOlx0XHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfVU5JTklUSUFMSVpFRDtcbiA2NjQ6XHRcbiA2NjU6XHRcdHJldHVybiAwO1xuIDY2NjpcdH1cbiA2Njc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMDkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgVERYIFZNIEluaXRpYWxpemF0aW9uIENvbmNlcm4qKgoKSG1tLCBzbyBgdGR4X3ZtX2luaXRg4oCmIHdhaXQgYSBzZWNvbmQsIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUmIzM5O3Mgc3VwcG9ydCBmb3IgVERYLCBkb2VzIGl0PyBUaGF0IGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgZG93biB0aGlzIHBhdGguIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIHRoZSBwbGF0Zm9ybSB3aWxsIGhhbmRsZSBpdC4KCkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbW1lZGlhdGVseSBjaGVjayBob3cgYGlzX3RkKGt2bSlgIHdvcmtzIGFuZCB3aGF0IGNoZWNrcyBpdCBpbmNsdWRlcy4gVGhhdCBmdW5jdGlvbiBzaG91bGQgYmUgdGhlIGdhdGVrZWVwZXIsIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYmVmb3JlIGFueXRoaW5nIGVsc2UuIFRoZSB3aG9sZSBzZXR1cCBkZXBlbmRzIG9uIHRoYXQsIHNvIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIG5vdyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX3RkXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MzQ9c3RydWN0IHZjcHVfdnQge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjAtXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYyLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTY2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjcte1xuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2ODpcdHJldHVybiBpc190ZCh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTcyLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo3MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC03NC1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM9c3RhdGljIGludCB2dF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ0LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ1Olx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00Ni1cdFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTE9c3RhdGljIHZvaWQgdnRfdm1fcHJlX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTM6XHRpZiAoaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0LVx0XHRyZXR1cm4gdGR4X21tdV9yZWxlYXNlX2hraWQoa3ZtKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01Nz1zdGF0aWMgdm9pZCB2dF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU4LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU5Olx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MC0gICAgICAgICAgICAgICByZXR1cm4gdGR4X3ZtX2Rlc3Ryb3koa3ZtKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02NT1zdGF0aWMgaW50IHZ0X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY3Olx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02OC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTg4PXN0YXRpYyBib29sIHZ0X2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xODkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTkwOlx0aWYgKGt2bSBcdTAwMjZcdTAwMjYgaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE5MS1cdFx0cmV0dXJuIHRkeF9oYXNfZW11bGF0ZWRfbXNyKGluZGV4KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03NTA9c3RhdGljIGludCB2dF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc1MS17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NTI6XHRpZiAoaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc1My1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzU4PXN0YXRpYyBpbnQgdnRfc2V0X2lkZW50aXR5X21hcF9hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlkZW50X2FkZHIpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03NTkte1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzYwOlx0aWYgKGlzX3RkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03NjEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc2Nj1zdGF0aWMgYm9vbCB2dF90ZHBfaGFzX3NtZXAoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY3LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc2ODpcdGlmIChpc190ZChrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODM5PXN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0MTpcdGlmICghaXNfdGQoa3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0Mi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODY1LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg2NjpcdGlmIChpc190ZChrdm0pKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODY3LVx0XHRyZXR1cm4gdGR4X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoa3ZtLCBwZm4sIGlzX3ByaXZhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkzOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLVk0gQ29kZWJhc2U6IGBpc190ZGAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS1ZNIHg4NiBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlgLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBJIGJlbGlldmUgaXMgZGVjbGFyZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIHNvbWV0aGluZywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSB0aGF0IGhlbHBzIHdpdGggbWFuYWdpbmcgdGhlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcbiAgNjI6XHR7XG4gIDYzOlx0XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICA2NzpcdHtcbiAgNjg6XHRcdHJldHVybiBpc190ZCh2Y3B1LVx1MDAzZWt2bSk7XG4gIDY5Olx0fVxuICA3MDpcdFxuICA3MTpcdCNlbHNlXG4gIDcyOlx0XG4gIDczOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgNzQ6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBURFggVk0gQ3JlYXRpb24gd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gdGhlIGBpc190ZGAgZnVuY3Rpb24gaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGBrdm0tJmd0O2FyY2gudm1fdHlwZWAgaXMgZXF1YWwgdG8gYEtWTV9YODZfVERYX1ZNYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBoZXJlIGlzLCBjYW4gU3l6a2FsbGVyLCBpbiBpdHMgZnV6emluZyBlZmZvcnRzLCBhY3R1YWxseSBjcmVhdGUgYSBWTSB3aXRoIHRoaXMgc3BlY2lmaWMgYEtWTV9YODZfVERYX1ZNYCB0eXBlPyBJZiBzbywgdGhhdCBvcGVucyB1cCBhIHdob2xlIGF2ZW51ZSBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBLVk1fWDg2X1REWF9WTWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHR5cGUgaXMgZGVjbGFyZWQsIGJlY2F1c2UgdGhhdCBtaWdodCByZXZlYWwgYW55IGFzc29jaWF0ZWQgbGltaXRhdGlvbnMuIE1vcmUgY3JpdGljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgdHlwZSBiYWNrIHRvIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAuIERvZXMgdGhlIGtlcm5lbCYjMzk7cyBWTSBjcmVhdGlvbiBjb2RlIGV4cGxpY2l0bHkgYWxsb3cgVk1zIG9mIHRoaXMgdHlwZSB0byBiZSBjb25zdHJ1Y3RlZD8gQW55IHJlc3RyaWN0aW9ucyBoZXJlIHdvdWxkIGltcGFjdCBTeXprYWxsZXImIzM5O3MgYWJpbGl0eSB0byBldmVuIGdldCBhIFREWCBWTSBydW5uaW5nLCB0aHVzIGNvbnN0cmFpbmluZyBhbnkgc3Vic2VxdWVudCBmdXp6aW5nIHBvdGVudGlhbC4gSWYgaXQgKmlzKiBhbGxvd2VkLCBJJiMzOTtsbCBtb3ZlIG9uLiBJZiBub3QsIEkmIzM5O20gYXQgYSByb2FkYmxvY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YODZfVERYX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05NDE4PW1lYW5zIHRoZSBWTSB0eXBlIHdpdGggdmFsdWUgQG4gaXMgc3VwcG9ydGVkLiAgUG9zc2libGUgdmFsdWVzIG9mIEBuIGFyZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk0MjQtICAjZGVmaW5lIEtWTV9YODZfU05QX1ZNXHQ0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTQyNTogICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdDVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NDI2LVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3Q9MjMzPWNvbnRyb2wgZmxvdyBpcyBhcyBmb2xsb3dzOlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMjM2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoyMzc6ICAgKiBLVk1fQ0FQX1ZNX1RZUEVTOiBDaGVjayBpZiBWTSB0eXBlIGlzIHN1cHBvcnRlZCBhbmQgaWYgS1ZNX1g4Nl9URFhfVk1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMjM4LSAgICAgaXMgc3VwcG9ydGVkLlxuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LSNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdFx0NFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzU6I2RlZmluZSBLVk1fWDg2X1REWF9WTVx0XHQ1XG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkzLXtcbmFyY2gveDg2L2t2bS9tbXUuaDozOTQ6XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTUtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkyOT1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTkzMi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTkzMzpcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzQtXHRcdG1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTE2OT1zdGF0aWMgaW50IGt2bV9lbmFibGVfZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmcoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3NC1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3NTpcdGlmIChrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc2LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD02MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Mi17XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYzOlx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY0LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDc4LVx0XHRcdFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc5Olx0XHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwODAtXHR9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05MjU9c3RydWN0IGt2bV9oeXBlcnZfZXZlbnRmZCB7XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NOUF9WTVx0XHQ0XG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MzojZGVmaW5lIEtWTV9YODZfVERYX1ZNXHRcdDVcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNL1REWCBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHNwZWNpZmljIGxpbmUgb2YgY29kZTogYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNzlgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgYSBoaWdoIGxldmVsLiBXZSYjMzk7cmUgc2V0dGluZyBhIGJpdCB3aXRoaW4gYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AuIFRoZSBiaXQgYmVpbmcgc2V0IGNvcnJlc3BvbmRzIHRvIGBLVk1fWDg2X1REWF9WTWAuIFNvLCBlc3NlbnRpYWxseSwgd2UmIzM5O3JlIHNpZ25hbGluZyB0aGF0IHRoZSBLVk0gaW1wbGVtZW50YXRpb24gb24geDg2IG5vdyBzdXBwb3J0cyBydW5uaW5nIGEgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgdmlydHVhbCBtYWNoaW5lLgoKSSYjMzk7ZCBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCByYW1pZmljYXRpb25zIGhlcmUuIFREWCBpcyBhIHNpZ25pZmljYW50IHNlY3VyaXR5IGVuaGFuY2VtZW50LiBJdCBwcm92aWRlcyBpc29sYXRlZCB2aXJ0dWFsIG1hY2hpbmVzLCBwcm90ZWN0aW5nIHRoZSBWTSYjMzk7cyBtZW1vcnkgYW5kIHN0YXRlIGV2ZW4gZnJvbSBhIGNvbXByb21pc2VkIGh5cGVydmlzb3IuIFNldHRpbmcgdGhpcyBiaXQgbWVhbnMgdGhlIEtWTSBjb2RlIGhhcyBiZWVuIGV4dGVuZGVkIHRvIHVuZGVyc3RhbmQgYW5kIGhhbmRsZSB0aGUgdW5pcXVlIGNoYXJhY3RlcmlzdGljcyBhbmQgcmVxdWlyZW1lbnRzIG9mIFREWCBWTXMuIEl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQgZm9yIFREWCBpcyBkZXRlY3RlZCBhbmQgZW5hYmxlZCwgb3IgYXQgbGVhc3QgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIHBhdGggdG8gZW5hYmxlIFREWCBzdXBwb3J0LgoKSSYjMzk7ZCB3YW50IHRvIGtub3cgd2hhdCBjaGVja3MgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBoYXJkd2FyZSBjb21wYXRpYmlsaXR5OyB0aGlzIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhcyB3ZWxsLgoKVGhpcyBsaW5lIGlzIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgb2YgY291cnNlLiBJJiMzOTtkIGJlIGRpZ2dpbmcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCBvdGhlciBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSB0byBLVk0gdG8gYWNjb21tb2RhdGUgVERYLiBTcGVjaWZpY2FsbHksIEkmIzM5O2Qgd2FudCB0byBjaGVjayBob3cgdGhlIFZNIGVudHJ5IGFuZCBleGl0IHBhdGhzIGFyZSBhbHRlcmVkIHRvIGhhbmRsZSB0aGUgVERYJiMzOTtzIHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucywgdGhlIGhhbmRsaW5nIG9mIFREWC1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgYW55IGNoYW5nZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSYjMzk7ZCBhbHNvIGJlIHZlcnkgaW50ZXJlc3RlZCBpbiBhbnkgbmV3IG9yIG1vZGlmaWVkIHNlY3VyaXR5LXJlbGF0ZWQgY29kZS4KClRoaXMgaXMgYSBrZXkgc3RlcCB0b3dhcmRzIGVuYWJsaW5nIFREWCBpbiBLVk0uIEl0JiMzOTtzIHRoZSBkZWNsYXJhdGlvbiBvZiBpbnRlbnQsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggbW9yZSBjb21wbGV4IGludGVncmF0aW9uIGlzIGJ1aWx0LiBJdOKAmXMgYW4gZXhjaXRpbmcgZGV2ZWxvcG1lbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDU4Olx0c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxuMTA1OTpcdHtcbjEwNjA6XHRcdHVuc2lnbmVkIHZjcHVfc2l6ZSwgdmNwdV9hbGlnbjtcbjEwNjE6XHRcdGludCByO1xuMTA2MjpcdFxuMTA2MzpcdFx0ciA9IHZteF9pbml0KCk7XG4xMDY0Olx0XHRpZiAocilcbjEwNjU6XHRcdFx0cmV0dXJuIHI7XG4xMDY2Olx0XG4xMDY3Olx0XHQvKlxuMTA2ODpcdFx0ICogVERYIGFuZCBWTVggaGF2ZSBkaWZmZXJlbnQgdkNQVSBzdHJ1Y3R1cmVzLiAgQ2FsY3VsYXRlIHRoZVxuMTA2OTpcdFx0ICogbWF4aW11bSBzaXplL2FsaWduIHNvIHRoYXQga3ZtX2luaXQoKSBjYW4gdXNlIHRoZSBsYXJnZXJcbjEwNzA6XHRcdCAqIHZhbHVlcyB0byBjcmVhdGUgdGhlIGttZW1fdmNwdV9jYWNoZS5cbjEwNzE6XHRcdCAqL1xuMTA3MjpcdFx0dmNwdV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3ZteCk7XG4xMDczOlx0XHR2Y3B1X2FsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHZjcHVfdm14KTtcbjEwNzQ6XHRcdGlmIChlbmFibGVfdGR4KSB7XG4xMDc1Olx0XHRcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXG4xMDc2Olx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZjcHVfdGR4KSk7XG4xMDc3Olx0XHRcdHZjcHVfYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9hbGlnbixcbjEwNzg6XHRcdFx0XHRcdF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3RkeCkpO1xuMTA3OTpcdFx0XHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcbjEwODA6XHRcdH1cbjEwODE6XHRcbjEwODI6XHRcdC8qXG4xMDgzOlx0XHQgKiBDb21tb24gS1ZNIGluaXRpYWxpemF0aW9uIF9tdXN0XyBjb21lIGxhc3QsIGFmdGVyIHRoaXMsIC9kZXYva3ZtIGlzXG4xMDg0Olx0XHQgKiBleHBvc2VkIHRvIHVzZXJzcGFjZSFcbjEwODU6XHRcdCAqL1xuMTA4NjpcdFx0ciA9IGt2bV9pbml0KHZjcHVfc2l6ZSwgdmNwdV9hbGlnbiwgVEhJU19NT0RVTEUpO1xuMTA4NzpcdFx0aWYgKHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTkwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk1fWDg2X1REWF9WTSBTdXBwb3J0KioKCkFscmlnaHQsIHNvIHRoZSBjb2RlIHNheXMgdGhhdCBgS1ZNX1g4Nl9URFhfVk1gIGlzIG9ubHkgZW5hYmxlZCBpZiBgZW5hYmxlX3RkeGAgaXMgdHJ1ZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgb2YgY291cnNlLCBidXQgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgYGVuYWJsZV90ZHhgIHZhcmlhYmxlLiBXaGVyZSBpcyBpdCBkZWZpbmVkPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgbW9kdWxlIHBhcmFtZXRlciwgb3Igc29tZXRoaW5nIHNldCBkeW5hbWljYWxseSBhdCBydW50aW1lPyBBbmQgY3J1Y2lhbGx5LCAqaG93KiBpcyBpdHMgdmFsdWUgYWN0dWFsbHkgZGV0ZXJtaW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBlbmFibGVfdGR4YCBiZWluZyBzZXQgdG8gdHJ1ZSBvciBmYWxzZS4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUga2V5IGluc2lnaHRzIHRoYXQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVfdGR4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2PXN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTgtXHQvKiBOb3RlLCBURFggKmFuZCogVk1YIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVERYIGlzIGVuYWJsZWQuICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjAtXHRcdHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcdHJldHVybiBlbmFibGVfdGR4ID8gdGR4X2hhcmR3YXJlX3NldHVwKCkgOiAwO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1PXN0YXRpYyB2b2lkIHZ0X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM2LXtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3Olx0aWYgKGVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zOC1cdFx0dGR4X2hhcmR3YXJlX3Vuc2V0dXAoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDczLVx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc0Olx0aWYgKGVuYWJsZV90ZHgpIHtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzUtXHRcdHZjcHVfc2l6ZSA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X3NpemUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01NS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTY6Ym9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTU4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ4MC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ4MTpcdGlmICghZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ4Mi1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM2LXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1Mzc6XHRlbmFibGVfdGR4ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzOC1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTItXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEzOmV4dGVybiBib29sIGVuYWJsZV90ZHg7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTg1PVREWF9CVUlMRF9URFZQU19BQ0NFU1NPUlMoNjQsIFNUQVRFX05PTl9BUkNILCBzdGF0ZV9ub25fYXJjaCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODctI2Vsc2VcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTg4OiNkZWZpbmUgZW5hYmxlX3RkeFx0MFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzI4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgVERYIE1vZHVsZSBhbmQgSGFyZHdhcmUgU2V0dXAqKgoKQWxyaWdodCwgc28gYGVuYWJsZV90ZHhgIGlzIGJlaW5nIHRyZWF0ZWQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgaXQgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbCBvdmVyIHdoZXRoZXIgVERYIGlzIGV2ZW4gYXR0ZW1wdGVkLiBOb3csIGxvb2tpbmcgYXQgYHRkeF9oYXJkd2FyZV9zZXR1cGAsIGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYW4gZWFybHkgZXhpdCBjb25kaXRpb246IGBpZiAoIWVuYWJsZV90ZHgpIHJldHVybiAwO2AuIEhtbSwgc28gaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGRpc2FibGUgVERYLCB0aGUgZW50aXJlIGhhcmR3YXJlIHNldHVwIGZ1bmN0aW9uIGlzIHNraXBwZWQsIHJldHVybmluZyB6ZXJvLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0JiMzOTtzIGEgY2xlYW4gd2F5IHRvIGJhaWwgb3V0IGlmIHRoZSB1c2VyIGRvZXNuJiMzOTt0IHdhbnQgaXQuCgpEaWdnaW5nIGZ1cnRoZXIgZG93biwgSSBzZWUgdGhpcyBgc3VjY2Vzc19kaXNhYmxlX3RkeDpgIGxhYmVsLCBhbmQgdGhlbiBgZW5hYmxlX3RkeCA9IDA7YCBmb2xsb3dlZCBieSBgcmV0dXJuIDA7YC4gVGhpcyBzdWdnZXN0cyBhIHN1Y2Nlc3NmdWwgcGF0aCAqdGhyb3VnaCogdGhlIGhhcmR3YXJlIHNldHVwLCB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgaW5pdGlhbGx5IHRyeSB0byBlbmFibGUgVERYLCBidXQgdGhlbiBkaXNhYmxlcyBpdCBhdCB0aGUgZW5kLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgYmUgYSBjbGVhbnVwIG9yIGZhbGxiYWNrIG1lY2hhbmlzbS4gUGVyaGFwcyBpdCBhdHRlbXB0cyB0byBlbmFibGUgVERYIGFuZCB0aGVuIGRpc2FibGVzIGl0IGlmIHRoZXJlIGFyZSBpc3N1ZXMsIG9yIHBlcmhhcHMgaXQmIzM5O3MgYSByZXNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgVERYIGNvbmZpZ3VyYXRpb24uIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlIGJldHRlci4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCBnZXRzIHRvIHRoYXQgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDczOlx0aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbjM0NzQ6XHR7XG4zNDc1Olx0XHRpbnQgciwgaTtcbjM0NzY6XHRcbjM0Nzc6XHRcdC8qIHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSgpIHVzZXMgYXNzb2NpYXRlZF90ZHZjcHVzLiAqL1xuMzQ3ODpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXG4zNDc5Olx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlcl9jcHUoYXNzb2NpYXRlZF90ZHZjcHVzLCBpKSk7XG4zNDgwOlx0XG4zNDgxOlx0XHRpZiAoIWVuYWJsZV90ZHgpXG4zNDgyOlx0XHRcdHJldHVybiAwO1xuMzQ4MzpcdFxuMzQ4NDpcdFx0aWYgKCFlbmFibGVfZXB0KSB7XG4zNDg1Olx0XHRcdHByX2VycihcJiMzNDtFUFQgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4zNDg2Olx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM0ODc6XHRcdH1cbjM0ODg6XHRcbjM0ODk6XHRcdGlmICghdGRwX21tdV9lbmFibGVkIHx8ICFlbmFibGVfbW1pb19jYWNoaW5nIHx8ICFlbmFibGVfZXB0X2FkX2JpdHMpIHtcbjM0OTA6XHRcdFx0cHJfZXJyKFwmIzM0O1REUCBNTVUgYW5kIE1NSU8gY2FjaGluZyBhbmQgRVBUIEEvRCBiaXQgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4zNDkxOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM0OTI6XHRcdH1cbjM0OTM6XHRcbjM0OTQ6XHRcdGlmICghZW5hYmxlX2FwaWN2KSB7XG4zNDk1Olx0XHRcdHByX2VycihcJiMzNDtBUElDdiBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjM0OTY6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzQ5NzpcdFx0fVxuMzQ5ODpcdFxuMzQ5OTpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX09TWFNBVkUpKSB7XG4zNTAwOlx0XHRcdHByX2VycihcJiMzNDt0ZHg6IE9TWFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4zNTAxOlx0XHRcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcbjM1MDI6XHRcdH1cbjM1MDM6XHRcbjM1MDQ6XHRcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcbjM1MDU6XHRcdFx0cHJfZXJyKFwmIzM0O1REWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxuXCYjMzQ7KTtcbjM1MDY6XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuMzUwNzpcdFx0fVxuMzUwODpcdFxuMzUwOTpcdFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XG4zNTEwOlx0XHRpZiAocikge1xuMzUxMTpcdFx0XHQvKlxuMzUxMjpcdFx0XHQgKiBEaXNhYmxlIFREWCBvbmx5IGJ1dCBkb24mIzM5O3QgZmFpbCB0byBsb2FkIG1vZHVsZSBpZiB0aGUgVERYXG4zNTEzOlx0XHRcdCAqIG1vZHVsZSBjb3VsZCBub3QgYmUgbG9hZGVkLiAgTm8gbmVlZCB0byBwcmludCBtZXNzYWdlIHNheWluZ1xuMzUxNDpcdFx0XHQgKiBcJiMzNDttb2R1bGUgaXMgbm90IGxvYWRlZFwmIzM0OyBiZWNhdXNlIGl0IHdhcyBwcmludGVkIHdoZW4gdGhlIGZpcnN0XG4zNTE1Olx0XHRcdCAqIFNFQU1DQUxMIGZhaWxlZC4gIERvbiYjMzk7dCBib3RoZXIgdW53aW5kaW5nIHRoZSBTLUVQVCBob29rcyBvclxuMzUxNjpcdFx0XHQgKiB2bV9zaXplLCBhcyBrdm1feDg2X29wcyBoYXZlIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQgKGFuZCBhcmVcbjM1MTc6XHRcdFx0ICogaW50ZW50aW9uYWxseSBub3QgZXhwb3J0ZWQpLiAgVGhlIFMtRVBUIGNvZGUgaXMgdW5yZWFjaGFibGUsXG4zNTE4Olx0XHRcdCAqIGFuZCBhbGxvY2F0aW5nIGEgZmV3IG1vcmUgYnl0ZXMgcGVyIFZNIGluIGEgc2hvdWxkLWJlLXJhcmVcbjM1MTk6XHRcdFx0ICogZmFpbHVyZSBzY2VuYXJpbyBpcyBhIG5vbi1pc3N1ZS5cbjM1MjA6XHRcdFx0ICovXG4zNTIxOlx0XHRcdGlmIChyID09IC1FTk9ERVYpXG4zNTIyOlx0XHRcdFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU1OQoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDI4ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFVucmVhY2hhYmxlIENvZGUgUGF0aHMgaW4gU3RhbmRhcmQgRnV6emluZyBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gdGhlIGNvZGUgY2hlY2tzIGZvciBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gLiBJZiB0aGF0JiMzOTtzIG5vdCB0aGVyZSwgYGVuYWJsZV90ZHhgIGlzIHNldCB0byAwLiAgVGhhdCBtZWFucyB0aGUgYEtWTV9YODZfVERYX1ZNYCBmZWF0dXJlIHdvbiYjMzk7dCBiZSBhZHZlcnRpc2VkLCBzbyBzeXprYWxsZXIgY2FuJiMzOTt0IGV2ZW4gKmNyZWF0ZSogYSBURFggVk0uICBUaHVzLCBhbnkgY29kZSBwYXRocyByZWxhdGVkIHRvIFREWCBhcmUgdG90YWxseSBpbmFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc2V0dXAgZm9yIGZ1enppbmcuICBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4KCkNhbiBRRU1VIGZha2UgaXQ/ICBObywgdGhhdCB3b24mIzM5O3Qgd29yay4gIFREWCBuZWVkcyB0aGUgVERYIG1vZHVsZSwgd2hpY2ggaXMgYSBzaWduZWQgYmluYXJ5IGZyb20gSW50ZWwgdGhhdCBydW5zIGluIGEgc3BlY2lhbCBDUFUgbW9kZSAoU0VBTSBWTVggcm9vdCkuIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0LCBub3IgZG9lcyBpdCBlbXVsYXRlIHRoZSBoYXJkd2FyZSBlbmNyeXB0aW9uIGVuZ2luZXMgKE1LVE1FKSBURFggcmVsaWVzIG9uLiAgU28sIG5vIGRpY2UuIFRoaXMgVERYIHN0dWZmIGlzIGRlZmluaXRlbHkgbm90IHNvbWV0aGluZyB0aGF0JiMzOTtzIGZ1enplYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LgoKQnV0IHdoYXQgYWJvdXQgdGhvc2UgY2hhbmdlcyBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oYD8gTGV0JiMzOTtzIHNlZS4uLiAgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGlzIGV4dHJhY3RlZCBhbmQgdXNlZC4gSXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0IHJlZmFjdG9yaW5nOyB0aGUgbG9naWMgc2VlbXMgaWRlbnRpY2FsLiBBbmQgYWxzbyBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMgY2hhbmdlZCBmcm9tIGBzdGF0aWNgIHRvIGBnbG9iYWxgLiBPa2F5LCBzbyBqdXN0IHJlZmFjdG9yaW5nLiBOb3RoaW5nIGZ1bmN0aW9uYWwuCgpTbywgdGhlICpvbmx5KiBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGluIGB0ZHguY2AgYW5kIHRob3NlIGFyZSB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBURFggaGFyZHdhcmUuIExldCYjMzk7cyBkb3VibGUgY2hlY2suIEFoLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgaXMgb25seSBjYWxsZWQgaW4gYHRkeF92Y3B1X2VudGVyX2V4aXRgIGFuZCBgdGR4X2ZhaWxlZF92bWVudHJ5YCwgYWxsIGluc2lkZSBgdGR4LmNgLiBHb3QgaXQsIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpXYWl0LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMuICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHRoYXQgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4uLiYjMzQ7ICBPa2F5LCBURFggcmVxdWlyZXMgaGFyZHdhcmUsIG5vdCBlbXVsYXRlZCBieSBRRU1VLCBhbmQgdGhlIHJlc3QgaXMganVzdCByZWZhY3RvcmluZy4gVGhpcyBwYXRjaCBpcyBhIG5vLWdvIGZvciBzdGFuZGFyZCBmdXp6aW5nLgoKT2theSwgaXMgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGlubGluZWQsIGNvdWxkIHRoYXQgY2hhbmdlIGFueXRoaW5nIGluIGB2bXguY2A/IEl0ICpjb3VsZCosIGJ1dCBpdCYjMzk7cyBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSwganVzdCB0aGUgc2FtZSBsb2dpYyBtb3ZlZCBhcm91bmQuICBMZXQmIzM5O3MgdmVyaWZ5LiBMZXQgbWUgbG9vayBhdCB0aGUgY29kZTogIE9yaWdpbmFsIGBoYW5kbGVfbm90aWZ5YCwgYW5kIHRoZSBuZXcgb25lLiBUaGUgbG9naWMgaXMgdGhlIHNhbWU6IHRoZSBgdm1jc19zZXRfYml0c2AgaXMgdW5jaGFuZ2VkLiBXYWl0LCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBjaGFuZ2VkIHNsaWdodGx5IGluIHRoZSBuZXcgY29kZSwgYCYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7YCBpcyBub3cgY2FsbGVkICphZnRlciogYHZtY3Nfc2V0X2JpdHNgLiAgRG9lcyB0aGlzIG1hdHRlcj8gTm8sIGAmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO2AgaXMganVzdCBhIHN0YXQgY291bnRlciwgYW5kIGB2bWNzX3NldF9iaXRzYCBkb2VzICpub3QqIGRlcGVuZCBvbiB0aGF0IG9yIHRoZSBjb250ZXh0IGludmFsaWQgZmxhZy4gU28gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIHplcm8uCgpUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggaXMganVzdCBgdGR4LmNgIHdoaWNoLCBhZ2FpbiwgaXMgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgc3VwcG9ydC4KCkxldCYjMzk7cyBkbyBvbmUgbGFzdCBjaGVjay4gSXMgdGhlcmUgYW55IHdheSB0byByZWFjaCBgdGR4X2hhbmRsZV9leGl0YCBpbmRpcmVjdGx5PyAgYHZ0X2hhbmRsZV9leGl0YCBjYWxscyBpdCBpZiBgaXNfdGRfdmNwdSh2Y3B1KWAuIGBpc190ZF92Y3B1YCBjaGVja3MgaWYgYGlzX3RkKHZjcHUtJmd0O2t2bSlgLiBgaXNfdGRgIGNoZWNrcyBga3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk1gLiBBbmQgdGhhdCByZXF1aXJlcyBgZW5hYmxlX3RkeGAsIHdoaWNoIHJlcXVpcmVzIHRoZSBoYXJkd2FyZS4gR290IGl0LiBJbXBvc3NpYmxlIHRvIHJlYWNoLgoKT2theSwgdGhlIGNoYW5nZXMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBJJiMzOTttIGdvaW5nIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IFREWCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS9HQ0UsIGFuZCB0aGUgcmVzdCBpcyBqdXN0IHJlZmFjdG9yaW5nIG9mIGV4aXN0aW5nIFZNWCBjb2RlLCB3aXRoIG5vIGNoYW5nZSB0byB0aGUgZ2VuZXJhdGVkIGNvZGUuCgpMZXQmIzM5O3MganVzdCBxdWlja2x5IHJldmlldyB0aGUgcmVzdCBvZiB0aGUgY2hhbmdlcy4gVGhlIGNoYW5nZXMgb2YgYHRkeF90b192bXhfZXhpdF9yZWFzb25gIGFyZSBhbHNvIFREWCBzcGVjaWZpYy4gVGhpcyBsb29rcyBnb29kLgpFdmVyeXRoaW5nIGlzIFREWCBzcGVjaWZpYyBleGNlcHQgdGhlIHJlZmFjdG9yaW5nLiBJJiMzOTttIGNvbmZpZGVudC4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBzdXBwb3J0IChJbnRlbCBURFgpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIHRvIHN0YW5kYXJkIFZNWCBjb2RlIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgbG9naWMgd2l0aCBURFgsIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMjo1NDwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTI6MzYuOTAzNTE4MTE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTY0MTEzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjM2LjkwMzUyMzA3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwOTA2OTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY2YjQ2YjA1ODg5OWJkMGY0OTZiNTJkN2IxOTEzM2E4MWU4MWVlOWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTI6NTI6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5pbmRleCAwODAwNTY3NjcwMmMyLi4yY2JhYTlhYmE5MDFjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXFxuQEAgLTQsNiArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3ZteC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm1tdS5oXFxcIlxcbiBcXG5AQCAtMTgzLDYgKzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcXG4re1xcbitcXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XFxuK1xcbitcXHQrK3ZjcHUtXFx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XFxuK1xcdCAgICBjb250ZXh0X2ludmFsaWQpIHtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xcbitcXHRcXHRcXHRcXHRcXHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggYjI3MmMyMDU4NmE3NC4uYWMzZjcxNjQzY2Q1ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC05MjEsMTAgKzkyMSwxMCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIEVYSVRfUkVBU09OX1REQ0FMTDtcXG4gfVxcbiBcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbi1cXHR1MzIgZXhpdF9yZWFzb247XFxuK1xcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjtcXG4gXFxuIFxcdHN3aXRjaCAodGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQgXFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcXG4gXFx0Y2FzZSBURFhfU1VDQ0VTUzpcXG5AQCAtOTM0LDIzICs5MzQsMzMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gLTF1O1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTeW50aGVzaXplIGFuIGludmFsaWQgYm9ndXMgRXhpdCBSZWFzb24sIGFzIHRoZSBURFgtTW9kdWxlXFxuK1xcdFxcdCAqIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQgUmVhc29uIGlzXFxuK1xcdFxcdCAqIHVuZGVmaW5lZCwgYnV0IHRoaXMgaXMgTk9UIGEgZmFpbGVkIFZNLUVudGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcXG4rXFx0XFx0XFx0LmJhc2ljID0gLTEsXFxuK1xcdFxcdH07XFxuIFxcdH1cXG4gXFxuLVxcdGV4aXRfcmVhc29uID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQ7XFxuK1xcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cXHUwMDNldnBfZW50ZXJfcmV0O1xcbiBcXG4tXFx0c3dpdGNoIChleGl0X3JlYXNvbikge1xcbitcXHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fVERDQUxMOlxcbiBcXHRcXHRpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xcbi1cXG4tXFx0XFx0cmV0dXJuIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdFxcdFxcdGV4aXRfcmVhc29uLmJhc2ljID0gRVhJVF9SRUFTT05fVk1DQUxMO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzpcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxcbiBcXHRcXHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gLTF1O1xcbitcXHRcXHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xcbitcXHRcXHRcXHQuYmFzaWMgPSAtMSxcXG4rXFx0XFx0fTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtOTY3LDcgKzk3Nyw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHR0ZHgtXFx1MDAzZXZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcihcXHUwMDI2dGR4LVxcdTAwM2V2cCwgXFx1MDAyNnRkeC1cXHUwMDNldnBfZW50ZXJfYXJncyk7XFxuIFxcbi1cXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdHZ0LVxcdTAwM2VleGl0X3JlYXNvbiA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XFxuIFxcbiBcXHR2dC1cXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcXG4gXFx0dGR4LVxcdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzLnJkeDtcXG5AQCAtOTgxLDggKzk5MSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xcbitcXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcXG4gfVxcbiBcXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xMDcxLDggKzEwODAsMTAgQEAgZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXHQgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmRcXG4gXFx0ICogVERDQUxMcy5cXG4gXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxcbitcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xcbitcXHRcXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSAwO1xcbiBcXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XFxuK1xcdH1cXG4gXFxuIFxcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXFx1MDAyNiBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTtcXG4gXFxuQEAgLTIwMjgsNyArMjAzOSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcXG4gfVxcbiBcXG4gXFxuLWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbitzdGF0aWMgaW50IF9fdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFx0dTY0IHZwX2VudGVyX3JldCA9IHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0O1xcbkBAIC0yMTI2LDYgKzIxMzcsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIFxcdFxcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxcbitcXHRcXHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXFxuK1xcdFxcdHJldHVybiBfX3ZteF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcXG4rXFx0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcXG4rXFx0XFx0cmV0dXJuIGhhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTIxMzUsMTMgKzIxNTEsMjkgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG4re1xcbitcXHRpbnQgcmV0ID0gX190ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbitcXG4rXFx0LyogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgd2FzIGRldGVjdGVkICovXFxuK1xcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxcbiBcXHRcXHR1NjQgKmluZm8xLCB1NjQgKmluZm8yLCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXG4gXFx0KnJlYXNvbiA9IHRkeC1cXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcXG4tXFx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XFxuK1xcdGlmICh0ZHgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmJhc2ljICE9IC0xKSB7XFxuIFxcdFxcdCppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRcXHQqaW5mbzIgPSB0ZHgtXFx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XFxuIFxcdFxcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG5AQCAtMzE1NCw2ICszMTg2LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbiBcXHR0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoXFx1MDAyNnRkeC1cXHUwMDNldnQucGlfZGVzYykpO1xcbiBcXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcXG4gXFxuK1xcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXFxuK1xcdFxcdFxcdFxcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XFxuK1xcdFxcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXFxuK1xcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfd2luZG93KTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcXG4rXFx0XFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXFxuK1xcdFxcdFxcdFxcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xcbitcXG4gXFx0dGR4LVxcdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCBlM2JmZTZhY2ExYTBlLi5jNDI5ZGI5YjkyMDU3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTYyNjUsNyArNjI2NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXFxuIFxcbi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXFxuQEAgLTYyNzksOSArNjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4tXFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xcbi1cXG4tXFx0Kyt2Y3B1LVxcdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcXG5AQCAtNjI5MSwxNSArNjI4OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLFxcbiBcXHRcXHRcXHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XFxuIFxcbi1cXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxcbi1cXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cXG4tXFx0XFx0XFx0XFx0XFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIF9fdm14X2hhbmRsZV9ub3RpZnkodmNwdSwgZXhpdF9xdWFsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTM3OSw2ICszNzksNyBAQCBib29sIF9fdm14X3ZjcHVfcnVuKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiB2b2lkIHZteF9lcHRfbG9hZF9wZHB0cnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuIHZvaWQgdm14X3NldF9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIGludCB0eXBlLCBib29sIHNldCk7XFxuK2ludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIG1zciwgaW50IHR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjM4LjMxMzI5MDI3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTc1NDMyOTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2YjQ2YjA1ODg5OWJkMGY0OTZiNTJkN2IxOTEzM2E4MWU4MWVlOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMjo1MjozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5pbmRleCAwODAwNTY3NjcwMmMyLi4yY2JhYTlhYmE5MDFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4gXG5AQCAtMTgzLDYgKzE4NCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBfX3ZteF9oYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsKVxuK3tcbitcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuK1xuK1x0Kyt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbitcbitcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4rXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XG4rXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuK1x0XHRcdFx0XHQgIEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uYWMzZjcxNjQzY2Q1ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC05MjEsMTAgKzkyMSwxMCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBFWElUX1JFQVNPTl9URENBTEw7XG4gfVxuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuLVx0dTMyIGV4aXRfcmVhc29uO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuIFxuIFx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG5AQCAtOTM0LDIzICs5MzQsMzMgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVERfV1JPTkdfQVBJQ19NT0RFOlxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtMXU7XG4rXHRcdC8qXG4rXHRcdCAqIFN5bnRoZXNpemUgYW4gaW52YWxpZCBib2d1cyBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWC1Nb2R1bGVcbitcdFx0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXNcbitcdFx0ICogdW5kZWZpbmVkLCBidXQgdGhpcyBpcyBOT1QgYSBmYWlsZWQgVk0tRW50ZXIuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xuK1x0XHRcdC5iYXNpYyA9IC0xLFxuK1x0XHR9O1xuIFx0fVxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuK1x0ZXhpdF9yZWFzb24uZnVsbCA9ICh1MzIpdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbitcdHN3aXRjaCAoZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fVERDQUxMOlxuIFx0XHRpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKVxuLVx0XHRcdHJldHVybiBFWElUX1JFQVNPTl9WTUNBTEw7XG4tXG4tXHRcdHJldHVybiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gRVhJVF9SRUFTT05fVk1DQUxMO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzpcbiBcdFx0LypcbiBcdFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxuIFx0XHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gLTF1O1xuK1x0XHRyZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikge1xuK1x0XHRcdC5iYXNpYyA9IC0xLFxuK1x0XHR9O1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtOTY3LDcgKzk3Nyw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHR2dC1cdTAwM2VleGl0X3JlYXNvbiA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4gXG4gXHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yY3g7XG4gXHR0ZHgtXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJkeDtcbkBAIC05ODEsOCArOTkxLDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4rXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCArMTA4MCwxMCBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHQgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmRcbiBcdCAqIFREQ0FMTHMuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSlcbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xuK1x0XHR2dC1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IDA7XG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDtcbitcdH1cbiBcbiBcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXHUwMDI2IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpO1xuIFxuQEAgLTIwMjgsNyArMjAzOSw3IEBAIGludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcbiB9XG4gXG4gXG4taW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4rc3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbkBAIC0yMTI2LDYgKzIxMzcsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIDE7XG4rXHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcbitcdFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xuK1x0XHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4rXHRjYXNlIEVYSVRfUkVBU09OX0JVU19MT0NLOlxuK1x0XHRyZXR1cm4gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTIxMzUsMTMgKzIxNTEsMjkgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4re1xuK1x0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbitcbitcdC8qIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIHdhcyBkZXRlY3RlZCAqL1xuK1x0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbitcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuK1x0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdH1cbitcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXG4gXHRcdHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdGR4LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcbitcdGlmICh0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uYmFzaWMgIT0gLTEpIHtcbiBcdFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG5AQCAtMzE1NCw2ICszMTg2LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbitcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbitcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4rXHRcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV93aW5kb3cpO1xuK1x0fVxuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7XG4rXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLmM0MjlkYjliOTIwNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjI2NSw3ICs2MjY1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0LypcbiBcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuQEAgLTYyNzksOSArNjI3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuLVx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4tXG4tXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgKzYyODgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbiBcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG4gXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuLVx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbi1cdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gX192bXhfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li44ZmFmMDRjMDk3MjFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM3OSw2ICszNzksNyBAQCBib29sIF9fdm14X3ZjcHVfcnVuKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIHZvaWQgdm14X2VwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHZvaWQgdm14X3NldF9pbnRlcmNlcHRfZm9yX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIGludCB0eXBlLCBib29sIHNldCk7XG4raW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCB1MzIgbXNyLCBpbnQgdHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjM4LjMxMzI5MTU1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NzY2MTg5MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBURFggUGF0Y2gncyBGdXp6YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWFraW5nIGNoYW5nZXMgdG8gS1ZNIFREWCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AsIGFuZCByZWxhdGVkIGhlYWRlcnMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGhhbmRsaW5nIGBFWElUX1JFQVNPTl9OT1RJRllgIGFuZCBgRVhJVF9SRUFTT05fQlVTX0xPQ0tgIGluIFREWCBhbmQgYWxzbyByZWZhY3RvcmluZyBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAuIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyB3YXJyYW50cyBmdXp6aW5nIGVmZm9ydC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgVERYIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgVERYIHJlcXVpcmVzIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIGFuZCB0aGF0IHRocm93cyB1cCBhIHJlZCBmbGFnLiBTdGFuZGFyZCBRRU1VIG9yIEdDRSBpbnN0YW5jZXMgbWlnaHQgKm5vdCogaGF2ZSB0aGF0IGhhcmR3YXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgc3l6a2FsbGVyIGNhbiB1c2UgdGhpcy4gU3l6a2FsbGVyIGhlYXZpbHkgdXNlcyBgL2Rldi9rdm1gLiBJZiB0aGUgaG9zdCBkb2Vzbid0IHN1cHBvcnQgVERYLCBgS1ZNX0NBUF9WTV9UWVBFU2Agd29uJ3QgYWR2ZXJ0aXNlIGl0LCBhbmQgY3JlYXRpbmcgYSBWTSB3aXRoIFREWCB3aWxsIGZhaWwuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBzaG91bGQgYmUgZmxhZ2dlZCBhcyBub3Qgd29ydGggZnV6emluZy4gT2theSwgc28gaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGFyZSBhbiBpc3N1ZSBoZXJlLiBOZXN0ZWQgVERYIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IG9yIHJlcXVpcmVzIGhhcmR3YXJlIHN1cHBvcnQuXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCAqYWxzbyogdG91Y2hlcyBgdm14LmNgLCBhbmQgSSBrbm93IHRoYXQgVk1YIGlzIGhlYXZpbHkgZnV6emVkLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcgY29kZSB0byBleHRyYWN0IGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBhbmQgYGhhbmRsZV9idXNfbG9ja192bWV4aXRgIHRvIGJlIHVzZWQgaW4gYm90aCBgdm14LmNgIGFuZCBgdGR4LmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIG5vdCBmdW5kYW1lbnRhbGx5IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdXMgdG8gdGFyZ2V0IGl0IGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cblxuSSBkdWcgaW50byB0aGUgY2hhbmdlcyBpbiBgdm14LmNgLiBJdCBsb29rcyBsaWtlIGBoYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBpcyBqdXN0IGNoYW5naW5nIGl0cyBsaW5rYWdlIGZyb20gc3RhdGljIHRvIGdsb2JhbC4gQWxzbywgdGhlIGBoYW5kbGVfbm90aWZ5YCBmdW5jdGlvbiBpbiBgdm14LmNgIGlzIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSBsb2dpYyBpcyBtb3ZlZCB0byBgX192bXhfaGFuZGxlX25vdGlmeWAgaW4gYGNvbW1vbi5oYC4gU28sIHRoZXJlIGFyZSBubyAqZnVuY3Rpb25hbCogY2hhbmdlcyBpbiB0aGUgc3RhbmRhcmQgVk1YIGNvZGUuIFRoaXMgaXMgcHVyZWx5IHJlZmFjdG9yaW5nIHRvIHNoYXJlIGNvZGUgd2l0aCBURFguIFRoaXMgbWVhbnMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbWFpbmx5IGluIGB0ZHguY2Agd2hlcmUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBgRVhJVF9SRUFTT05fTk9USUZZYCBhbmQgYEVYSVRfUkVBU09OX0JVU19MT0NLYCBhcmUgaW1wbGVtZW50ZWQsIGFsb25nIHdpdGggcmVmYWN0b3JpbmcgYHRkeF90b192bXhfZXhpdF9yZWFzb25gLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGNhbiB3ZSBmdXp6IHRoZSAqVERYKiBwYXJ0cz8gSSdtIHByZXR0eSBzdXJlIHRoYXQgc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdvbid0IHN1cHBvcnQgaXQgYmVjYXVzZSBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudC4gR0NFICpkb2VzKiBoYXZlIFREWCBpbnN0YW5jZXMsIGxpa2UgQzMgaW5zdGFuY2VzLCBidXQgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cyB1c3VhbGx5IHJ1biBvbiBnZW5lcmljIGluc3RhbmNlcyBvciBRRU1VIHdpdGhvdXQgVERYIGhhcmR3YXJlLiBURFggcmVsaWVzIG9uIHRoZSBURFggbW9kdWxlIChTRUFNKSBhbmQgaGFyZHdhcmUgZW5jcnlwdGlvbiBhbmQgY2Fubm90IGJlIGVtdWxhdGVkIGluIHNvZnR3YXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgdGR4X2hhbmRsZV9leGl0YCBpcyByZWFjaGFibGUuIEkgd2lsbCBzZWFyY2ggZm9yIHVzYWdlcyBvZiBgdGR4X2hhbmRsZV9leGl0YCBhbmQgYHRkeF90b192bXhfZXhpdF9yZWFzb25gLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRob3NlIGV4aXQgcmVhc29ucyBhcmUgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUyOjU3LjA3OTQ4NDA5OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkyMDk3NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9oYW5kbGVfZXhpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNTc9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjAtXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTYxOlxcdFxcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9OTI0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NTctXFx0XFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk1ODpcXHRcXHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NTktXFx0XFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xMTQzPXN0YXRpYyBpbnQgdGR4X2hhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTE0OC1cXHQgKiBNYWNoaW5lIGNoZWNrcyBhcmUgaGFuZGxlZCBieSBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZigpLCBvciBieVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTE0OTpcXHQgKiB0ZHhfaGFuZGxlX2V4aXQoKSB3aXRoIFREWF9OT05fUkVDT1ZFUkFCTEUgc2V0IGlmIGEgI01DIG9jY3VycyBvblxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTE1MC1cXHQgKiBWTS1FbnRyeS4gIE5NSXMgYXJlIGhhbmRsZWQgYnkgdGR4X3ZjcHVfZW50ZXJfZXhpdCgpLlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDI4PWludCB0ZHhfY29tcGxldGVfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjA0MS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIwNDI6c3RhdGljIGludCBfX3RkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE1My1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNTQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTU1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNTY6XFx0aW50IHJldCA9IF9fdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xNDM9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxNDQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTQ1LVxcdFxcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MDAuMDcxNTg4ODk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDk1NTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFREIHZDUFUgRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBoYW5kbGUgZXhpdHMgcmVsYXRlZCB0byBURCB2aXJ0dWFsIENQVXMuIFNwZWNpZmljYWxseSwgdGhlIGB0ZHhfaGFuZGxlX2V4aXRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHZ0X2hhbmRsZV9leGl0YCwgYnV0IG9ubHkgaWYgdGhlIENQVSBpbiBxdWVzdGlvbiAoYHZjcHVgKSBpcywgaW4gZmFjdCwgYSBURCB2Q1BVLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgSSdtIGZvY3VzaW5nIG9uIG5vdyBpcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY3JlYXRlIGEgVEQgdkNQVSBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2Vzbid0IG9mZmVyIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydC4gSXQgbWFrZXMgbWUgY3VyaW91cyBhYm91dCB0aGUgYXNzdW1wdGlvbnMgYmFrZWQgaW50byB0aGUgZGVzaWduLiBUbyBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5kIGNsYXJpZnkgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIEkgc2hvdWxkIHJlLWV4YW1pbmUgdGhlIGBpc190ZF92Y3B1YCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIENQVSBpcyBhIFREIHZDUFUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhlIGxvZ2ljIGNvdmVycyB0aGUgcG9zc2liaWxpdHkgb2YgYSBURCB2Q1BVIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjAzLjU5MjU0NzM4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyNzkxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX3RkX3ZjcHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD02MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02NS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjY2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NzM9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjc0OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzM9c3RhdGljIGludCB2dF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc2LVxcdFxcdHJldHVybiB0ZHhfdmNwdV9jcmVhdGUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MT1zdGF0aWMgdm9pZCB2dF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0LVxcdFxcdHRkeF92Y3B1X2ZyZWUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MT1zdGF0aWMgdm9pZCB2dF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTkyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5MzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk0LVxcdFxcdHRkeF92Y3B1X3Jlc2V0KHZjcHUsIGluaXRfZXZlbnQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTAxPXN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDQtXFx0XFx0dGR4X3ZjcHVfbG9hZCh2Y3B1LCBjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTExPXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMTYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTE3OlxcdGlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTE4LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEyMz1zdGF0aWMgdm9pZCB2dF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTI0LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMjU6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMjYtXFx0XFx0dGR4X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTMzPXN0YXRpYyB2b2lkIHZ0X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMzQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzNTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEzNi1cXHRcXHR0ZHhfdmNwdV9wdXQodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNDM9c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTQ0LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNDU6XFx0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDYtXFx0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTQ5PXN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNTAte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE1MTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNTItXFx0XFx0cmV0dXJuIHRkeF92Y3B1X3J1bih2Y3B1LCBydW5fZmxhZ3MpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTU3PXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTU5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNjA6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTYxLVxcdFxcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTY2PXN0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTY4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY5LVxcdFxcdFdBUk5fT05fT05DRSh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE3Nj1zdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE3Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTc4OlxcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzktXFx0XFx0cmV0dXJuIHRkeF9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE5Nj1zdGF0aWMgaW50IHZ0X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE5Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk4OlxcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xOTktXFx0XFx0cmV0dXJuIHRkeF9nZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTIwND1zdGF0aWMgdm9pZCB2dF9yZWNhbGNfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMTEtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjEyOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIxMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMTg9c3RhdGljIGludCB2dF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIxOS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjIwOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIyMS1cXHRcXHRyZXR1cm4gdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcih2Y3B1LCBlcnIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjI3PXN0YXRpYyBpbnQgdnRfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjI4LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMjk6XFx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMzU9c3RhdGljIGludCB2dF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIzNi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjM3OlxcdGlmIChLVk1fQlVHX09OKGlzX3RkX3ZjcHUodmNwdSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQzPXN0YXRpYyBpbnQgdnRfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNDQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjI0NTpcXHRpZiAoS1ZNX0JVR19PTihpc190ZF92Y3B1KHZjcHUpLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI1MT1zdGF0aWMgdm9pZCB2dF9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjUyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyNTM6XFx0aWYgKEtWTV9CVUdfT04oaXNfdGRfdmNwdSh2Y3B1KSwgdmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNTQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjYxPXN0YXRpYyBpbnQgdnRfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yNzAtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjcxOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI3Mi1cXHRcXHRyZXR1cm4gWDg2RU1VTF9SRVRSWV9JTlNUUjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI3Nz1zdGF0aWMgYm9vbCB2dF9hcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjgyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjI4MzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yODQtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yODk9c3RhdGljIHZvaWQgdnRfc2V0X3ZpcnR1YWxfYXBpY19tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI5MS1cXHQvKiBPbmx5IHgyQVBJQyBtb2RlIGlzIHN1cHBvcnRlZCBmb3IgVEQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjkyOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTI5My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yOTg9c3RhdGljIHZvaWQgdnRfaHdhcGljX2lzcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWF4X2lzcilcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yOTkte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMwMDpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzA2PXN0YXRpYyBpbnQgdnRfc3luY19waXJfdG9faXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDcte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMwODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMDktXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MzE0PXN0YXRpYyB2b2lkIHZ0X2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCBkZWxpdmVyeV9tb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzE2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMTc6XFx0aWYgKGlzX3RkX3ZjcHUoYXBpYy1cXHUwMDNldmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMTgtXFx0XFx0dGR4X2RlbGl2ZXJfaW50ZXJydXB0KGFwaWMsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTMyNj1zdGF0aWMgdm9pZCB2dF92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI3LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjg6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzI5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTMzND1zdGF0aWMgdm9pZCB2dF91cGRhdGVfZXhjZXB0aW9uX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzM1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMzY6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzM3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM0Mj1zdGF0aWMgdTY0IHZ0X2dldF9zZWdtZW50X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM0My17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzQ0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM0NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM1MD1zdGF0aWMgdm9pZCB2dF9nZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzUyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNTM6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNTQtXFx0XFx0bWVtc2V0KHZhciwgMCwgc2l6ZW9mKCp2YXIpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM2MT1zdGF0aWMgdm9pZCB2dF9zZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzYzLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNjQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzY1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM3MD1zdGF0aWMgaW50IHZ0X2dldF9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3MS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzcyOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM3OD1zdGF0aWMgaW50IHZ0X2dldF9jcGxfbm9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM3OS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzgwOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTM4Nj1zdGF0aWMgdm9pZCB2dF9nZXRfY3NfZGJfbF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Mzg4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzg5LVxcdFxcdCpkYiA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zOTc9c3RhdGljIGJvb2wgdnRfaXNfdmFsaWRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzk4LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozOTk6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDAwLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDA1PXN0YXRpYyB2b2lkIHZ0X3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00MDYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQwNzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDEzPXN0YXRpYyBib29sIHZ0X2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQxNC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDE1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQxNi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQyMT1zdGF0aWMgdm9pZCB2dF9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDIyLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0MjM6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDI0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQyOT1zdGF0aWMgaW50IHZ0X3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDMwLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0MzE6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDMyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM3PXN0YXRpYyB2b2lkIHZ0X2dldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQzOC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDM5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDQwLVxcdFxcdG1lbXNldChkdCwgMCwgc2l6ZW9mKCpkdCkpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDQ3PXN0YXRpYyB2b2lkIHZ0X3NldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ0OC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDQ5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTQ1MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NTU9c3RhdGljIHZvaWQgdnRfZ2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjX3B0ciAqZHQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDU2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NTc6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NTgtXFx0XFx0bWVtc2V0KGR0LCAwLCBzaXplb2YoKmR0KSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz00NjU9c3RhdGljIHZvaWQgdnRfc2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjX3B0ciAqZHQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDY2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0Njc6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDY4LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ3Mz1zdGF0aWMgdm9pZCB2dF9zZXRfZHI3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB2YWwpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc0LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0NzU6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDc2LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTQ4MT1zdGF0aWMgdm9pZCB2dF9zeW5jX2RpcnR5X2RlYnVnX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDg3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjQ4ODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00ODktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDk0PXN0YXRpYyB2b2lkIHZ0X2NhY2hlX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0ga3ZtX3JlZyByZWcpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDk1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo0OTY6XFx0aWYgKFdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00OTctXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTAyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHZ0X2dldF9yZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUwMy17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTA0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUwNS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUxMD1zdGF0aWMgdm9pZCB2dF9zZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTExLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1MTI6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTEzLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUxOD1zdGF0aWMgYm9vbCB2dF9nZXRfaWZfZmxhZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTE5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1MjA6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIxLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUyNj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01Mjcte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUyODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTUyOS1cXHRcXHR0ZHhfZmx1c2hfdGxiX2FsbCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTUzNj1zdGF0aWMgdm9pZCB2dF9mbHVzaF90bGJfY3VycmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTM3LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo1Mzg6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01MzktXFx0XFx0dGR4X2ZsdXNoX3RsYl9jdXJyZW50KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTQ2PXN0YXRpYyB2b2lkIHZ0X2ZsdXNoX3RsYl9ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTQ4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01NTQ9c3RhdGljIHZvaWQgdnRfZmx1c2hfdGxiX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NTUte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU1NjpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NTctXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTYyPXN0YXRpYyB2b2lkIHZ0X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU2My17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTY0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTY1LVxcdFxcdHRkeF9pbmplY3Rfbm1pKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTcyPXN0YXRpYyBpbnQgdnRfbm1pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01NzctXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTc4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU3OS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTU4ND1zdGF0aWMgYm9vbCB2dF9nZXRfbm1pX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTg5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU5MDpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy01OTEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTk2PXN0YXRpYyB2b2lkIHZ0X3NldF9ubWlfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWFza2VkKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU5Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NTk4OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU5OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MDQ9c3RhdGljIHZvaWQgdnRfZW5hYmxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjA2LVxcdC8qIFJlZmVyIHRvIHRoZSBjb21tZW50cyBpbiB0ZHhfaW5qZWN0X25taSgpLiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjYwNzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjEzPXN0YXRpYyB2b2lkIHZ0X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjE1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2MTY6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTctXFx0XFx0dGR4X2xvYWRfbW11X3BnZCh2Y3B1LCByb290X2hwYSwgcGdkX2xldmVsKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTYyND1zdGF0aWMgdm9pZCB2dF9zZXRfaW50ZXJydXB0X3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYyNS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjI2OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYyNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MzI9c3RhdGljIHUzMiB2dF9nZXRfaW50ZXJydXB0X3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjMzLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2MzQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjM1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjQwPXN0YXRpYyB2b2lkIHZ0X3BhdGNoX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NDYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjQ3OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY0OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02NTM9c3RhdGljIHZvaWQgdnRfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmVpbmplY3RlZClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NTQte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY1NTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02NTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjYxPXN0YXRpYyB2b2lkIHZ0X2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2Mi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjYzOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY2NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz02Njk9c3RhdGljIHZvaWQgdnRfY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjcwLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2NzE6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjcyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTY3Nz1zdGF0aWMgaW50IHZ0X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY3OC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Njc5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY4MC1cXHRcXHRyZXR1cm4gdGR4X2ludGVycnVwdF9hbGxvd2VkKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9Njg1PXN0YXRpYyB2b2lkIHZ0X2VuYWJsZV9pcnFfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY4NzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02ODgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjkzPXN0YXRpYyB2b2lkIHZ0X2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY5Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2OTg6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjk5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTcwND1zdGF0aWMgdm9pZCB2dF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MDYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcwNzpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcwOC1cXHRcXHR0ZHhfZ2V0X2V4aXRfaW5mbyh2Y3B1LCByZWFzb24sIGluZm8xLCBpbmZvMiwgaW50cl9pbmZvLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzE2PXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRwciwgaW50IGlycilcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MTcte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjcxODpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03MTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzI0PXN0YXRpYyB2b2lkIHZ0X3NldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcyNS17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzI2OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTcyNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03MzI9c3RhdGljIHZvaWQgdnRfcmVmcmVzaF9hcGljdl9leGVjX2N0cmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTczMy17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzM0OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzM1LVxcdFxcdEtWTV9CVUdfT04oIWt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSwgdmNwdS1cXHUwMDNla3ZtKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc0Mj1zdGF0aWMgdm9pZCB2dF9sb2FkX2VvaV9leGl0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplb2lfZXhpdF9iaXRtYXApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQzLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NDQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzQ1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc3ND1zdGF0aWMgdTY0IHZ0X2dldF9sMl90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3Ni1cXHQvKiBURFggZG9lc24ndCBzdXBwb3J0IEwyIGd1ZXN0IGF0IHRoZSBtb21lbnQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Nzc3OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc3OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTc4Mz1zdGF0aWMgdTY0IHZ0X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODUtXFx0LyogVERYIGRvZXNuJ3Qgc3VwcG9ydCBMMiBndWVzdCBhdCB0aGUgbW9tZW50LiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjc4NjpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03ODctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz03OTI9c3RhdGljIHZvaWQgdnRfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03OTQtXFx0LyogSW4gVERYLCB0c2Mgb2Zmc2V0IGNhbid0IGJlIGNoYW5nZWQuICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6Nzk1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTc5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MDE9c3RhdGljIHZvaWQgdnRfd3JpdGVfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODAzLVxcdC8qIEluIFREWCwgdHNjIG11bHRpcGxpZXIgY2FuJ3QgYmUgY2hhbmdlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MDQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODA1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgxMT1zdGF0aWMgaW50IHZ0X3NldF9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF9kZWFkbGluZV90c2MsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04MTQtXFx0LyogVk1YLXByZWVtcHRpb24gdGltZXIgaXNuJ3QgYXZhaWxhYmxlIGZvciBURFguICovXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODE1OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgxNi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgyMT1zdGF0aWMgdm9pZCB2dF9jYW5jZWxfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODIzLVxcdC8qIFZNWC1wcmVlbXB0aW9uIHRpbWVyIGNhbid0IGJlIHNldC4gIFNlZSB2dF9zZXRfaHZfdGltZXIoKS4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4MjQ6XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODI1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzMi17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODMzOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzNC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NDc9c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDgte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0OTpcXHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODUwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODU1PXN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODU2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NTc6XFx0aWYgKCFpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg1OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9NDA9c3RhdGljIHN0cnVjdCBsYnJfZGVzYyAqdmNwdV90b19sYnJfZGVzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00MS17XFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo0MjpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTQzLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz00OD1zdGF0aWMgc3RydWN0IHg4Nl9wbXVfbGJyICp2Y3B1X3RvX2xicl9yZWNvcmRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTQ5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjUwOlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtNTEtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE0OT1zdGF0aWMgYm9vbCBpbnRlbF9wbXVfbGJyX2lzX2NvbXBhdGlibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTUwLXtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjE1MTpcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE1Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE1Nz1ib29sIGludGVsX3BtdV9sYnJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy0xNTgte1xcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTU5OlxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTYwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMDk9c3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjE4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyMTk6XFx0cmV0dXJuICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yMjAtXFx0XFx0dm14X2Nhbl91c2VfdnRkX3BpKHZjcHUtXFx1MDAzZWt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9MjIzPXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDItXFx0aWYgKCF2Y3B1LVxcdTAwM2VwcmVlbXB0ZWQgXFx1MDAyNlxcdTAwMjYga3ZtX3ZjcHVfaXNfYmxvY2tpbmcodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6MjQzOlxcdCAgICAoKGlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjYgdGR4X2ludGVycnVwdF9hbGxvd2VkKHZjcHUpKSB8fFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyNDQ6XFx0ICAgICAoIWlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjYgIXZteF9pbnRlcnJ1cHRfYmxvY2tlZCh2Y3B1KSkpKVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yNDUtXFx0XFx0cGlfZW5hYmxlX3dha2V1cF9oYW5kbGVyKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguaD0zMjI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI2LVxcdGlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvdm14Lmg6MzI3OlxcdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtMzI4LVxcdFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTMzMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB2bXhfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTMzNy1cXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oOjMzODpcXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTMzOS1cXHRcXHR2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjA1LjIzNTM0NDU0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDM0NzQ4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFREWCB2Q1BVIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXNfdGRfdmNwdWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGlkZW50aWZ5aW5nIGlmIGEgdkNQVSBpcyBydW5uaW5nIHdpdGhpbiBhIFREWCBlbnZpcm9ubWVudC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoZXRoZXIgb3Igbm90IGl0J3MgYWN0dWFsbHkgKnBvc3NpYmxlKiB0byBjb25qdXJlIHVwIGEgVERYIHZDUFUgd2l0aG91dCB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBoZXJlLCBzbyBpdCBzZWVtcyBsaWtlIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGRpdmUgaW50byBob3cgdGhlc2UgdkNQVXMgYXJlIGFjdHVhbGx5IGNvbnN0cnVjdGVkLiBUaGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHRkeF92Y3B1X2NyZWF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgaXRzIHJlcXVpcmVtZW50cywgYW5kIGl0cyBlcnJvciBjb25kaXRpb25zLiBEb2VzIGl0IHN0cmljdGx5IGVuZm9yY2UgYSBURFggaGFyZHdhcmUgY2hlY2s/IERvZXMgaXQgb2ZmZXIgYW55IGxlZXdheSBvciBmYWxsYmFjayBtZWNoYW5pc21zPyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGdvaW5nIHRvIGNsYXJpZnkgaWYgd2UgY2FuIHJ1biBURFggY29kZSB3aXRob3V0IGhhdmluZyBhIHN1cHBvcnRpbmcgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MDkuNDM4ODIyNjA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTkzMjc3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X3ZjcHVfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTczPXN0YXRpYyBpbnQgdnRfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzUtXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NzY6XFx0XFx0cmV0dXJuIHRkeF92Y3B1X2NyZWF0ZSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy03Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9NjE4PWludCB0ZHhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTY2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjY2ODppbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTY2OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTgyNz12b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0MS0gKiAzLiBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwuIChvbmx5IHdoZW4gVEQgaXMgVERfU1RBVEVfSU5JVElBTElaRUQpLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODQyOiAqICAgIDMuMSB0ZHhfdmNwdV9jcmVhdGUoKSB0cmFuc2l0aW9ucyB2Q1BVIHN0YXRlIHRvIFZDUFVfVERfU1RBVEVfVU5JTklUSUFMSVpFRC5cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg0My0gKiAgICAzLjIgdmNwdV9sb2FkKCkgYW5kIHZjcHVfcHV0KCkgaW4ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoKS5cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzND1pbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMzY6aW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNy12b2lkIHRkeF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MTEuMzU4MTU5MjY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NDIyNjQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBURFggSW5pdGlhbGl6YXRpb24qKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYHRkeF92bV9pbml0YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBURFggaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHdoZXRoZXIgb3Igbm90IFREWCBlbmFibGVtZW50IGlzIGNvbnRpbmdlbnQgb24gdW5kZXJseWluZyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIE15IHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYHRkeF92bV9pbml0YCByZWxpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXPigJRpbiB0aGlzIGNhc2UsIGZvciBURFggc3VwcG9ydOKAlHRoZW4gdGhlIGZ1bmN0aW9uIHNob3VsZCBmYWlsIGdyYWNlZnVsbHkgd2hlbiB0aG9zZSBmZWF0dXJlcyBhcmVuJ3QgcHJlc2VudC4gQSBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIGhpbmdlcyBvbiB0aGUgcGxhdGZvcm0ncyBzdXBwb3J0IGZvciB0aGUgcmVxdWlyZWQgdGVjaG5vbG9naWVzLiBUaGVyZWZvcmUsIGEgZmFpbHVyZSBvZiB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYW4gZXhjZWxsZW50IGluZGljYXRvciBvZiBtaXNzaW5nIFREWCBoYXJkd2FyZSBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQwMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjE2LjI0MjM4ODU2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNjcwMzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfdm1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz00Mz1zdGF0aWMgaW50IHZ0X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDUtXFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDY6XFx0XFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTYwNT1zdGF0aWMgaW50IHRkeF9kb190ZGhfbW5nX2tleV9jb25maWcodm9pZCAqcGFyYW0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTYxNy1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjYxODppbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNjE5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzMD12b2lkIHRkeF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMzE6aW50IHRkeF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMyLXZvaWQgdGR4X21tdV9yZWxlYXNlX2hraWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MTcuNjY5MTAyOTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTY1MTkwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIFREWCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24pIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIEtWTSBvbiB4ODYuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgdGR4X3ZtX2luaXRgIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hlcmUgSSdsbCBiZSBkaWdnaW5nIGluLiBTbywgSSdsbCBiZSBuYXZpZ2F0aW5nIHRvIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCB0byBzZWUgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgVk0gaXMgc2V0IHVwIGZvciBURFggaXMgY3JpdGljYWwgdG8gZXZlcnl0aGluZyBlbHNlLCBzbyB0aGlzIGlzIHdoZXJlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDAxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MjIuMzI1NjI0NDYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxODpcXHRpbnQgdGR4X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiA2MTk6XFx0e1xcbiA2MjA6XFx0XFx0c3RydWN0IGt2bV90ZHggKmt2bV90ZHggPSB0b19rdm1fdGR4KGt2bSk7XFxuIDYyMTpcXHRcXG4gNjIyOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlID0gdHJ1ZTtcXG4gNjIzOlxcdFxcdC8qXFxuIDYyNDpcXHRcXHQgKiBURFggTW9kdWxlIGRvZXNuJ3QgYWxsb3cgdGhlIGh5cGVydmlzb3IgdG8gbW9kaWZ5IHRoZSBFT0ktYml0bWFwLFxcbiA2MjU6XFx0XFx0ICogaS5lLiBhbGwgRU9JcyBhcmUgYWNjZWxlcmF0ZWQgYW5kIG5ldmVyIHRyaWdnZXIgZXhpdHMuXFxuIDYyNjpcXHRcXHQgKi9cXG4gNjI3OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX2VvaSA9IHRydWU7XFxuIDYyODpcXHRcXHRrdm0tXFx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcXG4gNjI5OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgfD0gS1ZNX1g4Nl9RVUlSS19JR05PUkVfR1VFU1RfUEFUO1xcbiA2MzA6XFx0XFxuIDYzMTpcXHRcXHQvKlxcbiA2MzI6XFx0XFx0ICogUE1VIHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgdGhlIFREWC1Nb2R1bGUgKGlmIGVuYWJsZWQgZm9yIHRoZSBWTSkuXFxuIDYzMzpcXHRcXHQgKiBGcm9tIEtWTSdzIHBlcnNwZWN0aXZlLCB0aGUgVk0gZG9lc24ndCBoYXZlIGEgdmlydHVhbCBQTVUuXFxuIDYzNDpcXHRcXHQgKi9cXG4gNjM1OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3BtdSA9IHRydWU7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdC8qXFxuIDYzODpcXHRcXHQgKiBCZWNhdXNlIGd1ZXN0IFREIGlzIHByb3RlY3RlZCwgVk1NIGNhbid0IHBhcnNlIHRoZSBpbnN0cnVjdGlvbiBpbiBURC5cXG4gNjM5OlxcdFxcdCAqIEluc3RlYWQsIGd1ZXN0IHVzZXMgTU1JTyBoeXBlcmNhbGwuICBGb3IgdW5tb2RpZmllZCBkZXZpY2UgZHJpdmVyLFxcbiA2NDA6XFx0XFx0ICogI1ZFIG5lZWRzIHRvIGJlIGluamVjdGVkIGZvciBNTUlPIGFuZCAjVkUgaGFuZGxlciBpbiBURCBjb252ZXJ0cyBNTUlPXFxuIDY0MTpcXHRcXHQgKiBpbnN0cnVjdGlvbiBpbnRvIE1NSU8gaHlwZXJjYWxsLlxcbiA2NDI6XFx0XFx0ICpcXG4gNjQzOlxcdFxcdCAqIFNQVEUgdmFsdWUgZm9yIE1NSU8gbmVlZHMgdG8gYmUgc2V0dXAgc28gdGhhdCAjVkUgaXMgaW5qZWN0ZWQgaW50b1xcbiA2NDQ6XFx0XFx0ICogVEQgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIEVQVCBNSVNDT05GSUcuXFxuIDY0NTpcXHRcXHQgKiAtIFJXWD0wIHNvIHRoYXQgRVBUIHZpb2xhdGlvbiBpcyB0cmlnZ2VyZWQuXFxuIDY0NjpcXHRcXHQgKiAtIHN1cHByZXNzICNWRSBiaXQgaXMgY2xlYXJlZCB0byBpbmplY3QgI1ZFLlxcbiA2NDc6XFx0XFx0ICovXFxuIDY0ODpcXHRcXHRrdm1fbW11X3NldF9tbWlvX3NwdGVfdmFsdWUoa3ZtLCAwKTtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0LypcXG4gNjUxOlxcdFxcdCAqIFREWCBoYXMgaXRzIG93biBsaW1pdCBvZiBtYXhpbXVtIHZDUFVzIGl0IGNhbiBzdXBwb3J0IGZvciBhbGxcXG4gNjUyOlxcdFxcdCAqIFREWCBndWVzdHMgaW4gYWRkaXRpb24gdG8gS1ZNX01BWF9WQ1BVUy4gIFREWCBtb2R1bGUgcmVwb3J0c1xcbiA2NTM6XFx0XFx0ICogc3VjaCBsaW1pdCB2aWEgdGhlIE1BWF9WQ1BVX1BFUl9URCBnbG9iYWwgbWV0YWRhdGEuICBJblxcbiA2NTQ6XFx0XFx0ICogcHJhY3RpY2UsIGl0IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzIHRoYXQgQUxMXFxuIDY1NTpcXHRcXHQgKiBwbGF0Zm9ybXMgdGhhdCB0aGUgVERYIG1vZHVsZSBzdXBwb3J0cyBjYW4gcG9zc2libHkgaGF2ZS5cXG4gNjU2OlxcdFxcdCAqXFxuIDY1NzpcXHRcXHQgKiBMaW1pdCBURFggZ3Vlc3QncyBtYXhpbXVtIHZDUFVzIHRvIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzXFxuIDY1ODpcXHRcXHQgKiB0aGUgcGxhdGZvcm0gaGFzLiAgU2ltcGx5IGZvcndhcmRpbmcgdGhlIE1BWF9WQ1BVX1BFUl9URCB0b1xcbiA2NTk6XFx0XFx0ICogdXNlcnNwYWNlIHdvdWxkIHJlc3VsdCBpbiBhbiB1bnByZWRpY3RhYmxlIEFCSS5cXG4gNjYwOlxcdFxcdCAqL1xcbiA2NjE6XFx0XFx0a3ZtLVxcdTAwM2VtYXhfdmNwdXMgPSBtaW5fdChpbnQsIGt2bS1cXHUwMDNlbWF4X3ZjcHVzLCBudW1fcHJlc2VudF9jcHVzKCkpO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHRrdm1fdGR4LVxcdTAwM2VzdGF0ZSA9IFREX1NUQVRFX1VOSU5JVElBTElaRUQ7XFxuIDY2NDpcXHRcXG4gNjY1OlxcdFxcdHJldHVybiAwO1xcbiA2NjY6XFx0fVxcbiA2Njc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjIyLjMyNTc2NjQyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3NjUyNTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVERYIFZNIEluaXRpYWxpemF0aW9uIENvbmNlcm4qKlxuXG5IbW0sIHNvIGB0ZHhfdm1faW5pdGDigKYgd2FpdCBhIHNlY29uZCwgaXQgZG9lc24ndCBzZWVtIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlJ3Mgc3VwcG9ydCBmb3IgVERYLCBkb2VzIGl0PyBUaGF0IGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgZG93biB0aGlzIHBhdGguIEkgY2FuJ3QganVzdCBhc3N1bWUgdGhlIHBsYXRmb3JtIHdpbGwgaGFuZGxlIGl0LlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW1tZWRpYXRlbHkgY2hlY2sgaG93IGBpc190ZChrdm0pYCB3b3JrcyBhbmQgd2hhdCBjaGVja3MgaXQgaW5jbHVkZXMuIFRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZSBnYXRla2VlcGVyLCBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGUgd2hvbGUgc2V0dXAgZGVwZW5kcyBvbiB0aGF0LCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIG5vdyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTA5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1MzoyNi42NDM0MjEyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTkxMzY5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfdGRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTM0PXN0cnVjdCB2Y3B1X3Z0IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjAtXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD02Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Ny17XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2ODpcXHRyZXR1cm4gaXNfdGQodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTY5LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNzItXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo3MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNzQtc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NDM9c3RhdGljIGludCB2dF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy00NC17XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NDU6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNDYtXFx0XFx0cmV0dXJuIHRkeF92bV9pbml0KGt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz01MT1zdGF0aWMgdm9pZCB2dF92bV9wcmVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTIte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjUzOlxcdGlmIChpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTU0LVxcdFxcdHJldHVybiB0ZHhfbW11X3JlbGVhc2VfaGtpZChrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NTc9c3RhdGljIHZvaWQgdnRfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNTgte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjU5OlxcdGlmIChpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTYwLSAgICAgICAgICAgICAgIHJldHVybiB0ZHhfdm1fZGVzdHJveShrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NjU9c3RhdGljIGludCB2dF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjY3OlxcdGlmIChpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTY4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTg4PXN0YXRpYyBib29sIHZ0X2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTg5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTA6XFx0aWYgKGt2bSBcXHUwMDI2XFx1MDAyNiBpc190ZChrdm0pKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE5MS1cXHRcXHRyZXR1cm4gdGR4X2hhc19lbXVsYXRlZF9tc3IoaW5kZXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzUwPXN0YXRpYyBpbnQgdnRfc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzUxLXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NTI6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzUzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzU4PXN0YXRpYyBpbnQgdnRfc2V0X2lkZW50aXR5X21hcF9hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlkZW50X2FkZHIpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzU5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3NjA6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzYxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9NzY2PXN0YXRpYyBib29sIHZ0X3RkcF9oYXNfc21lcChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY3LXtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo3Njg6XFx0aWYgKGlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNzY5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzOT1zdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDAte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0MTpcXHRpZiAoIWlzX3RkKGt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQyLVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjUte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg2NjpcXHRpZiAoaXNfdGQoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjctXFx0XFx0cmV0dXJuIHRkeF9nbWVtX21heF9tYXBwaW5nX2xldmVsKGt2bSwgcGZuLCBpc19wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MjguNzAyNTYyNjIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczODg3NDUwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gQ29kZWJhc2U6IGBpc190ZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtWTSB4ODYgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBpc190ZChzdHJ1Y3Qga3ZtICprdm0pYC4gSSdtIGdvaW5nIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBJIGJlbGlldmUgaXMgZGVjbGFyZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLiBJJ20gY3VyaW91cyBhYm91dCBob3cgdGhlIGZ1bmN0aW9uIGRldGVybWluZXMgc29tZXRoaW5nLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIHRoYXQgaGVscHMgd2l0aCBtYW5hZ2luZyB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTM4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MzYuMDkxMzExMTI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGQoc3RydWN0IGt2bSAqa3ZtKVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuICA2NzpcXHR7XFxuICA2ODpcXHRcXHRyZXR1cm4gaXNfdGQodmNwdS1cXHUwMDNla3ZtKTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0I2Vsc2VcXG4gIDcyOlxcdFxcbiAgNzM6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cXG4gIDc0OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6MzYuMDkxMzc5Mjk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjY0NzUwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBURFggVk0gQ3JlYXRpb24gd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyB0aGUgYGlzX3RkYCBmdW5jdGlvbiBoaW5nZXMgb24gd2hldGhlciB0aGUgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGVgIGlzIGVxdWFsIHRvIGBLVk1fWDg2X1REWF9WTWAuIE15IGluaXRpYWwgcXVlc3Rpb24gaGVyZSBpcywgY2FuIFN5emthbGxlciwgaW4gaXRzIGZ1enppbmcgZWZmb3J0cywgYWN0dWFsbHkgY3JlYXRlIGEgVk0gd2l0aCB0aGlzIHNwZWNpZmljIGBLVk1fWDg2X1REWF9WTWAgdHlwZT8gSWYgc28sIHRoYXQgb3BlbnMgdXAgYSB3aG9sZSBhdmVudWUgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBLVk1fWDg2X1REWF9WTWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHR5cGUgaXMgZGVjbGFyZWQsIGJlY2F1c2UgdGhhdCBtaWdodCByZXZlYWwgYW55IGFzc29jaWF0ZWQgbGltaXRhdGlvbnMuIE1vcmUgY3JpdGljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgdHlwZSBiYWNrIHRvIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAuIERvZXMgdGhlIGtlcm5lbCdzIFZNIGNyZWF0aW9uIGNvZGUgZXhwbGljaXRseSBhbGxvdyBWTXMgb2YgdGhpcyB0eXBlIHRvIGJlIGNvbnN0cnVjdGVkPyBBbnkgcmVzdHJpY3Rpb25zIGhlcmUgd291bGQgaW1wYWN0IFN5emthbGxlcidzIGFiaWxpdHkgdG8gZXZlbiBnZXQgYSBURFggVk0gcnVubmluZywgdGh1cyBjb25zdHJhaW5pbmcgYW55IHN1YnNlcXVlbnQgZnV6emluZyBwb3RlbnRpYWwuIElmIGl0ICppcyogYWxsb3dlZCwgSSdsbCBtb3ZlIG9uLiBJZiBub3QsIEknbSBhdCBhIHJvYWRibG9jay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNzgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEyOjUzOjQxLjQxNzg1NjgzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDk0OTgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1REWF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTQxOD1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk0MjQtICAjZGVmaW5lIEtWTV9YODZfU05QX1ZNXFx0NFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NDI1OiAgI2RlZmluZSBLVk1fWDg2X1REWF9WTVxcdDVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTQyNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3Q9MjMzPWNvbnRyb2wgZmxvdyBpcyBhcyBmb2xsb3dzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdC0yMzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoyMzc6ICAgKiBLVk1fQ0FQX1ZNX1RZUEVTOiBDaGVjayBpZiBWTSB0eXBlIGlzIHN1cHBvcnRlZCBhbmQgaWYgS1ZNX1g4Nl9URFhfVk1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTIzOC0gICAgIGlzIHN1cHBvcnRlZC5cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzQtI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3NTojZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc2LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xcbmFyY2gveDg2L2t2bS9tbXUuaDozOTQ6XFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTI5PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTMzOlxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzQtXFx0XFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xNjk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3NC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxNzU6XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02Mi17XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDo2MzpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC02NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzgtXFx0XFx0XFx0XFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3OTpcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDgwLVxcdH1cXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI1PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MzojZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1Mzo0Mi44NzI4MTI3ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MTcyOTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0vVERYIEludGVncmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHNwZWNpZmljIGxpbmUgb2YgY29kZTogYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNzlgLiBJdCdzIHByZXR0eSBjbGVhciB3aGF0J3MgaGFwcGVuaW5nIGF0IGEgaGlnaCBsZXZlbC4gV2UncmUgc2V0dGluZyBhIGJpdCB3aXRoaW4gYGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlc2AuIFRoZSBiaXQgYmVpbmcgc2V0IGNvcnJlc3BvbmRzIHRvIGBLVk1fWDg2X1REWF9WTWAuIFNvLCBlc3NlbnRpYWxseSwgd2UncmUgc2lnbmFsaW5nIHRoYXQgdGhlIEtWTSBpbXBsZW1lbnRhdGlvbiBvbiB4ODYgbm93IHN1cHBvcnRzIHJ1bm5pbmcgYSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSB2aXJ0dWFsIG1hY2hpbmUuXG5cbkknZCBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCByYW1pZmljYXRpb25zIGhlcmUuIFREWCBpcyBhIHNpZ25pZmljYW50IHNlY3VyaXR5IGVuaGFuY2VtZW50LiBJdCBwcm92aWRlcyBpc29sYXRlZCB2aXJ0dWFsIG1hY2hpbmVzLCBwcm90ZWN0aW5nIHRoZSBWTSdzIG1lbW9yeSBhbmQgc3RhdGUgZXZlbiBmcm9tIGEgY29tcHJvbWlzZWQgaHlwZXJ2aXNvci4gU2V0dGluZyB0aGlzIGJpdCBtZWFucyB0aGUgS1ZNIGNvZGUgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gdW5kZXJzdGFuZCBhbmQgaGFuZGxlIHRoZSB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzIGFuZCByZXF1aXJlbWVudHMgb2YgVERYIFZNcy4gSXQgd291bGQgc3VnZ2VzdCB0aGF0IHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgc3VwcG9ydCBmb3IgVERYIGlzIGRldGVjdGVkIGFuZCBlbmFibGVkLCBvciBhdCBsZWFzdCB0aGF0IHRoZXJlJ3MgYSBjb25kaXRpb25hbCBwYXRoIHRvIGVuYWJsZSBURFggc3VwcG9ydC5cblxuSSdkIHdhbnQgdG8ga25vdyB3aGF0IGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGhhcmR3YXJlIGNvbXBhdGliaWxpdHk7IHRoaXMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzIHdlbGwuXG5cblRoaXMgbGluZSBpcyBqdXN0IHRoZSB0aXAgb2YgdGhlIGljZWJlcmcsIG9mIGNvdXJzZS4gSSdkIGJlIGRpZ2dpbmcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCBvdGhlciBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSB0byBLVk0gdG8gYWNjb21tb2RhdGUgVERYLiBTcGVjaWZpY2FsbHksIEknZCB3YW50IHRvIGNoZWNrIGhvdyB0aGUgVk0gZW50cnkgYW5kIGV4aXQgcGF0aHMgYXJlIGFsdGVyZWQgdG8gaGFuZGxlIHRoZSBURFgncyBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMsIHRoZSBoYW5kbGluZyBvZiBURFgtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGFuZCBjb250cm9sIHJlZ2lzdGVycywgYW5kIGFueSBjaGFuZ2VzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEknZCBhbHNvIGJlIHZlcnkgaW50ZXJlc3RlZCBpbiBhbnkgbmV3IG9yIG1vZGlmaWVkIHNlY3VyaXR5LXJlbGF0ZWQgY29kZS5cblxuVGhpcyBpcyBhIGtleSBzdGVwIHRvd2FyZHMgZW5hYmxpbmcgVERYIGluIEtWTS4gSXQncyB0aGUgZGVjbGFyYXRpb24gb2YgaW50ZW50LCB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgY29tcGxleCBpbnRlZ3JhdGlvbiBpcyBidWlsdC4gSXTigJlzIGFuIGV4Y2l0aW5nIGRldmVsb3BtZW50IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5ODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1Mzo0OC41MTQ1NDQ0MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1OCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1ODpcXHRzdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXFxuMTA1OTpcXHR7XFxuMTA2MDpcXHRcXHR1bnNpZ25lZCB2Y3B1X3NpemUsIHZjcHVfYWxpZ247XFxuMTA2MTpcXHRcXHRpbnQgcjtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0XFx0ciA9IHZteF9pbml0KCk7XFxuMTA2NDpcXHRcXHRpZiAocilcXG4xMDY1OlxcdFxcdFxcdHJldHVybiByO1xcbjEwNjY6XFx0XFxuMTA2NzpcXHRcXHQvKlxcbjEwNjg6XFx0XFx0ICogVERYIGFuZCBWTVggaGF2ZSBkaWZmZXJlbnQgdkNQVSBzdHJ1Y3R1cmVzLiAgQ2FsY3VsYXRlIHRoZVxcbjEwNjk6XFx0XFx0ICogbWF4aW11bSBzaXplL2FsaWduIHNvIHRoYXQga3ZtX2luaXQoKSBjYW4gdXNlIHRoZSBsYXJnZXJcXG4xMDcwOlxcdFxcdCAqIHZhbHVlcyB0byBjcmVhdGUgdGhlIGttZW1fdmNwdV9jYWNoZS5cXG4xMDcxOlxcdFxcdCAqL1xcbjEwNzI6XFx0XFx0dmNwdV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3ZteCk7XFxuMTA3MzpcXHRcXHR2Y3B1X2FsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHZjcHVfdm14KTtcXG4xMDc0OlxcdFxcdGlmIChlbmFibGVfdGR4KSB7XFxuMTA3NTpcXHRcXHRcXHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxcbjEwNzY6XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB2Y3B1X3RkeCkpO1xcbjEwNzc6XFx0XFx0XFx0dmNwdV9hbGlnbiA9IG1heF90KHVuc2lnbmVkLCB2Y3B1X2FsaWduLFxcbjEwNzg6XFx0XFx0XFx0XFx0XFx0X19hbGlnbm9mX18oc3RydWN0IHZjcHVfdGR4KSk7XFxuMTA3OTpcXHRcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfVERYX1ZNKTtcXG4xMDgwOlxcdFxcdH1cXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0LypcXG4xMDgzOlxcdFxcdCAqIENvbW1vbiBLVk0gaW5pdGlhbGl6YXRpb24gX211c3RfIGNvbWUgbGFzdCwgYWZ0ZXIgdGhpcywgL2Rldi9rdm0gaXNcXG4xMDg0OlxcdFxcdCAqIGV4cG9zZWQgdG8gdXNlcnNwYWNlIVxcbjEwODU6XFx0XFx0ICovXFxuMTA4NjpcXHRcXHRyID0ga3ZtX2luaXQodmNwdV9zaXplLCB2Y3B1X2FsaWduLCBUSElTX01PRFVMRSk7XFxuMTA4NzpcXHRcXHRpZiAocilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTM6NDguNTE0NjM0OTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjA0NDUzNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTV9YODZfVERYX1ZNIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSBzYXlzIHRoYXQgYEtWTV9YODZfVERYX1ZNYCBpcyBvbmx5IGVuYWJsZWQgaWYgYGVuYWJsZV90ZHhgIGlzIHRydWUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIG9mIGNvdXJzZSwgYnV0IG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgd2hvbGUgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgYGVuYWJsZV90ZHhgIHZhcmlhYmxlLiBXaGVyZSBpcyBpdCBkZWZpbmVkPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgbW9kdWxlIHBhcmFtZXRlciwgb3Igc29tZXRoaW5nIHNldCBkeW5hbWljYWxseSBhdCBydW50aW1lPyBBbmQgY3J1Y2lhbGx5LCAqaG93KiBpcyBpdHMgdmFsdWUgYWN0dWFsbHkgZGV0ZXJtaW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBlbmFibGVfdGR4YCBiZWluZyBzZXQgdG8gdHJ1ZSBvciBmYWxzZS4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUga2V5IGluc2lnaHRzIHRoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk5MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MDAuMTE5MDkwNDA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyMDc1MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZV90ZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTY9c3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVxcdC8qIE5vdGUsIFREWCAqYW5kKiBWTVggbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBURFggaXMgZW5hYmxlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcXHRpZiAoZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMC1cXHRcXHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcXHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3OlxcdGlmIChlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4LVxcdFxcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDU4PXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzMtXFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA3NDpcXHRpZiAoZW5hYmxlX3RkeCkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzUtXFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo1Njpib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ4MTpcXHRpZiAoIWVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM2LXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTM3OlxcdGVuYWJsZV90ZHggPSAwO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzOC1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTM6ZXh0ZXJuIGJvb2wgZW5hYmxlX3RkeDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaD0xODU9VERYX0JVSUxEX1REVlBTX0FDQ0VTU09SUyg2NCwgU1RBVEVfTk9OX0FSQ0gsIHN0YXRlX25vbl9hcmNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg3LSNlbHNlXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxODg6I2RlZmluZSBlbmFibGVfdGR4XFx0MFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1NDowMi4zNDExNzI0NDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1OTI2Nzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgVERYIE1vZHVsZSBhbmQgSGFyZHdhcmUgU2V0dXAqKlxuXG5BbHJpZ2h0LCBzbyBgZW5hYmxlX3RkeGAgaXMgYmVpbmcgdHJlYXRlZCBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg4oCTIGl0IGdpdmVzIHRoZSB1c2VyIGNvbnRyb2wgb3ZlciB3aGV0aGVyIFREWCBpcyBldmVuIGF0dGVtcHRlZC4gTm93LCBsb29raW5nIGF0IGB0ZHhfaGFyZHdhcmVfc2V0dXBgLCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYW4gZWFybHkgZXhpdCBjb25kaXRpb246IGBpZiAoIWVuYWJsZV90ZHgpIHJldHVybiAwO2AuIEhtbSwgc28gaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGRpc2FibGUgVERYLCB0aGUgZW50aXJlIGhhcmR3YXJlIHNldHVwIGZ1bmN0aW9uIGlzIHNraXBwZWQsIHJldHVybmluZyB6ZXJvLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0J3MgYSBjbGVhbiB3YXkgdG8gYmFpbCBvdXQgaWYgdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0LlxuXG5EaWdnaW5nIGZ1cnRoZXIgZG93biwgSSBzZWUgdGhpcyBgc3VjY2Vzc19kaXNhYmxlX3RkeDpgIGxhYmVsLCBhbmQgdGhlbiBgZW5hYmxlX3RkeCA9IDA7YCBmb2xsb3dlZCBieSBgcmV0dXJuIDA7YC4gVGhpcyBzdWdnZXN0cyBhIHN1Y2Nlc3NmdWwgcGF0aCAqdGhyb3VnaCogdGhlIGhhcmR3YXJlIHNldHVwLCB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgaW5pdGlhbGx5IHRyeSB0byBlbmFibGUgVERYLCBidXQgdGhlbiBkaXNhYmxlcyBpdCBhdCB0aGUgZW5kLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSBhIGNsZWFudXAgb3IgZmFsbGJhY2sgbWVjaGFuaXNtLiBQZXJoYXBzIGl0IGF0dGVtcHRzIHRvIGVuYWJsZSBURFggYW5kIHRoZW4gZGlzYWJsZXMgaXQgaWYgdGhlcmUgYXJlIGlzc3Vlcywgb3IgcGVyaGFwcyBpdCdzIGEgcmVzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIFREWCBjb25maWd1cmF0aW9uLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSBiZXR0ZXIuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgZ2V0cyB0byB0aGF0IGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzI4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MDcuMTAwNDQyODA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0NzMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0NzM6XFx0aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4zNDc0OlxcdHtcXG4zNDc1OlxcdFxcdGludCByLCBpO1xcbjM0NzY6XFx0XFxuMzQ3NzpcXHRcXHQvKiB0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKSB1c2VzIGFzc29jaWF0ZWRfdGR2Y3B1cy4gKi9cXG4zNDc4OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxcbjM0Nzk6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlcl9jcHUoYXNzb2NpYXRlZF90ZHZjcHVzLCBpKSk7XFxuMzQ4MDpcXHRcXG4zNDgxOlxcdFxcdGlmICghZW5hYmxlX3RkeClcXG4zNDgyOlxcdFxcdFxcdHJldHVybiAwO1xcbjM0ODM6XFx0XFxuMzQ4NDpcXHRcXHRpZiAoIWVuYWJsZV9lcHQpIHtcXG4zNDg1OlxcdFxcdFxcdHByX2VycihcXFwiRVBUIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjM0ODY6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM0ODc6XFx0XFx0fVxcbjM0ODg6XFx0XFxuMzQ4OTpcXHRcXHRpZiAoIXRkcF9tbXVfZW5hYmxlZCB8fCAhZW5hYmxlX21taW9fY2FjaGluZyB8fCAhZW5hYmxlX2VwdF9hZF9iaXRzKSB7XFxuMzQ5MDpcXHRcXHRcXHRwcl9lcnIoXFxcIlREUCBNTVUgYW5kIE1NSU8gY2FjaGluZyBhbmQgRVBUIEEvRCBiaXQgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMzQ5MTpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3NfZGlzYWJsZV90ZHg7XFxuMzQ5MjpcXHRcXHR9XFxuMzQ5MzpcXHRcXG4zNDk0OlxcdFxcdGlmICghZW5hYmxlX2FwaWN2KSB7XFxuMzQ5NTpcXHRcXHRcXHRwcl9lcnIoXFxcIkFQSUN2IGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjM0OTY6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM0OTc6XFx0XFx0fVxcbjM0OTg6XFx0XFxuMzQ5OTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfT1NYU0FWRSkpIHtcXG4zNTAwOlxcdFxcdFxcdHByX2VycihcXFwidGR4OiBPU1hTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjM1MDE6XFx0XFx0XFx0Z290byBzdWNjZXNzX2Rpc2FibGVfdGR4O1xcbjM1MDI6XFx0XFx0fVxcbjM1MDM6XFx0XFxuMzUwNDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMzUwNTpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4zNTA2OlxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG4zNTA3OlxcdFxcdH1cXG4zNTA4OlxcdFxcbjM1MDk6XFx0XFx0ciA9IF9fdGR4X2hhcmR3YXJlX3NldHVwKCk7XFxuMzUxMDpcXHRcXHRpZiAocikge1xcbjM1MTE6XFx0XFx0XFx0LypcXG4zNTEyOlxcdFxcdFxcdCAqIERpc2FibGUgVERYIG9ubHkgYnV0IGRvbid0IGZhaWwgdG8gbG9hZCBtb2R1bGUgaWYgdGhlIFREWFxcbjM1MTM6XFx0XFx0XFx0ICogbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQuICBObyBuZWVkIHRvIHByaW50IG1lc3NhZ2Ugc2F5aW5nXFxuMzUxNDpcXHRcXHRcXHQgKiBcXFwibW9kdWxlIGlzIG5vdCBsb2FkZWRcXFwiIGJlY2F1c2UgaXQgd2FzIHByaW50ZWQgd2hlbiB0aGUgZmlyc3RcXG4zNTE1OlxcdFxcdFxcdCAqIFNFQU1DQUxMIGZhaWxlZC4gIERvbid0IGJvdGhlciB1bndpbmRpbmcgdGhlIFMtRVBUIGhvb2tzIG9yXFxuMzUxNjpcXHRcXHRcXHQgKiB2bV9zaXplLCBhcyBrdm1feDg2X29wcyBoYXZlIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQgKGFuZCBhcmVcXG4zNTE3OlxcdFxcdFxcdCAqIGludGVudGlvbmFsbHkgbm90IGV4cG9ydGVkKS4gIFRoZSBTLUVQVCBjb2RlIGlzIHVucmVhY2hhYmxlLFxcbjM1MTg6XFx0XFx0XFx0ICogYW5kIGFsbG9jYXRpbmcgYSBmZXcgbW9yZSBieXRlcyBwZXIgVk0gaW4gYSBzaG91bGQtYmUtcmFyZVxcbjM1MTk6XFx0XFx0XFx0ICogZmFpbHVyZSBzY2VuYXJpbyBpcyBhIG5vbi1pc3N1ZS5cXG4zNTIwOlxcdFxcdFxcdCAqL1xcbjM1MjE6XFx0XFx0XFx0aWYgKHIgPT0gLUVOT0RFVilcXG4zNTIyOlxcdFxcdFxcdFxcdGdvdG8gc3VjY2Vzc19kaXNhYmxlX3RkeDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MDcuMTAwNTg2Mzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTY3MDA3NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBVbnJlYWNoYWJsZSBDb2RlIFBhdGhzIGluIFN0YW5kYXJkIEZ1enppbmcgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gdGhlIGNvZGUgY2hlY2tzIGZvciBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gLiBJZiB0aGF0J3Mgbm90IHRoZXJlLCBgZW5hYmxlX3RkeGAgaXMgc2V0IHRvIDAuICBUaGF0IG1lYW5zIHRoZSBgS1ZNX1g4Nl9URFhfVk1gIGZlYXR1cmUgd29uJ3QgYmUgYWR2ZXJ0aXNlZCwgc28gc3l6a2FsbGVyIGNhbid0IGV2ZW4gKmNyZWF0ZSogYSBURFggVk0uICBUaHVzLCBhbnkgY29kZSBwYXRocyByZWxhdGVkIHRvIFREWCBhcmUgdG90YWxseSBpbmFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc2V0dXAgZm9yIGZ1enppbmcuICBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuQ2FuIFFFTVUgZmFrZSBpdD8gIE5vLCB0aGF0IHdvbid0IHdvcmsuICBURFggbmVlZHMgdGhlIFREWCBtb2R1bGUsIHdoaWNoIGlzIGEgc2lnbmVkIGJpbmFyeSBmcm9tIEludGVsIHRoYXQgcnVucyBpbiBhIHNwZWNpYWwgQ1BVIG1vZGUgKFNFQU0gVk1YIHJvb3QpLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGF0LCBub3IgZG9lcyBpdCBlbXVsYXRlIHRoZSBoYXJkd2FyZSBlbmNyeXB0aW9uIGVuZ2luZXMgKE1LVE1FKSBURFggcmVsaWVzIG9uLiAgU28sIG5vIGRpY2UuIFRoaXMgVERYIHN0dWZmIGlzIGRlZmluaXRlbHkgbm90IHNvbWV0aGluZyB0aGF0J3MgZnV6emVhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQuXG5cbkJ1dCB3aGF0IGFib3V0IHRob3NlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaGA/IExldCdzIHNlZS4uLiAgYF9fdm14X2hhbmRsZV9ub3RpZnlgIGlzIGV4dHJhY3RlZCBhbmQgdXNlZC4gSXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0IHJlZmFjdG9yaW5nOyB0aGUgbG9naWMgc2VlbXMgaWRlbnRpY2FsLiBBbmQgYWxzbyBgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgaXMgY2hhbmdlZCBmcm9tIGBzdGF0aWNgIHRvIGBnbG9iYWxgLiBPa2F5LCBzbyBqdXN0IHJlZmFjdG9yaW5nLiBOb3RoaW5nIGZ1bmN0aW9uYWwuXG5cblNvLCB0aGUgKm9ubHkqIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgaW4gYHRkeC5jYCBhbmQgdGhvc2UgYXJlIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIFREWCBoYXJkd2FyZS4gTGV0J3MgZG91YmxlIGNoZWNrLiBBaCwgYHRkeF90b192bXhfZXhpdF9yZWFzb25gIGlzIG9ubHkgY2FsbGVkIGluIGB0ZHhfdmNwdV9lbnRlcl9leGl0YCBhbmQgYHRkeF9mYWlsZWRfdm1lbnRyeWAsIGFsbCBpbnNpZGUgYHRkeC5jYC4gR290IGl0LCBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5XYWl0LCBsZXQncyByZXZpZXcgdGhlIGluc3RydWN0aW9ucy4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLi4uXCIgIE9rYXksIFREWCByZXF1aXJlcyBoYXJkd2FyZSwgbm90IGVtdWxhdGVkIGJ5IFFFTVUsIGFuZCB0aGUgcmVzdCBpcyBqdXN0IHJlZmFjdG9yaW5nLiBUaGlzIHBhdGNoIGlzIGEgbm8tZ28gZm9yIHN0YW5kYXJkIGZ1enppbmcuXG5cbk9rYXksIGlzIGBfX3ZteF9oYW5kbGVfbm90aWZ5YCBpbmxpbmVkLCBjb3VsZCB0aGF0IGNoYW5nZSBhbnl0aGluZyBpbiBgdm14LmNgPyBJdCAqY291bGQqLCBidXQgaXQncyBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSwganVzdCB0aGUgc2FtZSBsb2dpYyBtb3ZlZCBhcm91bmQuICBMZXQncyB2ZXJpZnkuIExldCBtZSBsb29rIGF0IHRoZSBjb2RlOiAgT3JpZ2luYWwgYGhhbmRsZV9ub3RpZnlgLCBhbmQgdGhlIG5ldyBvbmUuIFRoZSBsb2dpYyBpcyB0aGUgc2FtZTogdGhlIGB2bWNzX3NldF9iaXRzYCBpcyB1bmNoYW5nZWQuIFdhaXQsIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGNoYW5nZWQgc2xpZ2h0bHkgaW4gdGhlIG5ldyBjb2RlLCBgKyt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztgIGlzIG5vdyBjYWxsZWQgKmFmdGVyKiBgdm1jc19zZXRfYml0c2AuICBEb2VzIHRoaXMgbWF0dGVyPyBObywgYCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7YCBpcyBqdXN0IGEgc3RhdCBjb3VudGVyLCBhbmQgYHZtY3Nfc2V0X2JpdHNgIGRvZXMgKm5vdCogZGVwZW5kIG9uIHRoYXQgb3IgdGhlIGNvbnRleHQgaW52YWxpZCBmbGFnLiBTbyB0aGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgemVyby5cblxuVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGlzIGp1c3QgYHRkeC5jYCB3aGljaCwgYWdhaW4sIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQuXG5cbkxldCdzIGRvIG9uZSBsYXN0IGNoZWNrLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHJlYWNoIGB0ZHhfaGFuZGxlX2V4aXRgIGluZGlyZWN0bHk/ICBgdnRfaGFuZGxlX2V4aXRgIGNhbGxzIGl0IGlmIGBpc190ZF92Y3B1KHZjcHUpYC4gYGlzX3RkX3ZjcHVgIGNoZWNrcyBpZiBgaXNfdGQodmNwdS1cdTAwM2Vrdm0pYC4gYGlzX3RkYCBjaGVja3MgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk1gLiBBbmQgdGhhdCByZXF1aXJlcyBgZW5hYmxlX3RkeGAsIHdoaWNoIHJlcXVpcmVzIHRoZSBoYXJkd2FyZS4gR290IGl0LiBJbXBvc3NpYmxlIHRvIHJlYWNoLlxuXG5Pa2F5LCB0aGUgY2hhbmdlcyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBURFggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUvR0NFLCBhbmQgdGhlIHJlc3QgaXMganVzdCByZWZhY3RvcmluZyBvZiBleGlzdGluZyBWTVggY29kZSwgd2l0aCBubyBjaGFuZ2UgdG8gdGhlIGdlbmVyYXRlZCBjb2RlLlxuXG5MZXQncyBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgY2hhbmdlcyBvZiBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgYXJlIGFsc28gVERYIHNwZWNpZmljLiBUaGlzIGxvb2tzIGdvb2QuXG5FdmVyeXRoaW5nIGlzIFREWCBzcGVjaWZpYyBleGNlcHQgdGhlIHJlZmFjdG9yaW5nLiBJJ20gY29uZmlkZW50LiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1NTksIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTI6NTQ6MzQuMDY3NTk2ODE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvZGUsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHN1cHBvcnQgKEludGVsIFREWCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgdG8gc3RhbmRhcmQgVk1YIGNvZGUgYXJlIHB1cmVseSByZWZhY3RvcmluZyB0byBzaGFyZSBsb2dpYyB3aXRoIFREWCwgd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBjb2RlLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBzdXBwb3J0IChJbnRlbCBURFgpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIHRvIHN0YW5kYXJkIFZNWCBjb2RlIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgdG8gc2hhcmUgbG9naWMgd2l0aCBURFgsIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMjo1NDozNC4wNjc2MjE5MTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowg4mrx[1] Phase: Running StartedAt: 2026-08-10 12:54:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg4mrx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 12:54:45 +0000 UTC FinishedAt: 2026-08-10 12:54:50 +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,}