Name: series-workflow7lgjd Phase: Failed StartedAt: 2026-07-16 19:04:13 +0000 UTC FinishedAt: 2026-07-16 19:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lgjd[0] Phase: Succeeded StartedAt: 2026-07-16 19:04:13 +0000 UTC FinishedAt: 2026-07-16 19:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lgjd[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 19:04:13 +0000 UTC FinishedAt: 2026-07-16 19:29:52 +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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgZm9saW8gYWxsb2NhdGlvbiBBUEkuIEl0IHJlbmFtZXMgYF9fZm9saW9fYWxsb2Nfbm9kZWAgdG8gYGZvbGlvX2FsbG9jX25vZGVgLCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgIChtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCksIGFuZCBtb3ZlcyBzb21lIG1lbXBvbGljeSBkZWNsYXJhdGlvbnMgdG8gYW4gaW50ZXJuYWwgaGVhZGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCBmZWF0dXJlcywgb3IgY29tcGxleCBjb2RlIHBhdGhzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjMjA0MTJiZjViNzMyMjk5NjNkOTIyZWE4ZmYyYjBjZWJkMWQ0OTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxOToyNzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA4ODEzZDVkN2ViMGMxZi4uOWNkZTk5YzI1OTYzOTcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNzA2OCw2ICYjNDM7MTcwNjgsNyBAQCBGOlx0aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbiBGOlx0bW0vbWVtcG9saWN5LmNcbiYjNDM7RjpcdG1tL21lbXBvbGljeS5oXG4gRjpcdG1tL21pZ3JhdGUuY1xuIEY6XHRtbS9taWdyYXRlX2RldmljZS5jXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jIGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jXG5pbmRleCAzYmFiMTc1ZDg1NTcxYS4uNDdlMDc1OWYwZTBhZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xuQEAgLTU2LDE0ICYjNDM7NTYsNyBAQCB2b2lkICppb21tdV9hbGxvY19wYWdlc19ub2RlX3N6KGludCBuaWQsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUpXG4gXHQgKi9cbiBcdG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuIFxuLVx0Lypcbi1cdCAqIF9fZm9saW9fYWxsb2Nfbm9kZSgpIGRvZXMgbm90IGhhbmRsZSBOVU1BX05PX05PREUgbGlrZVxuLVx0ICogYWxsb2NfcGFnZXNfbm9kZSgpIGRpZC5cbi1cdCAqL1xuLVx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXG4tXHRcdG5pZCA9IG51bWFfbWVtX2lkKCk7XG4tXG4tXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShnZnAgfCBfX0dGUF9aRVJPLCBvcmRlciwgbmlkKTtcbiYjNDM7XHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7XG4gXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbkBAIC0zODQsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGFibGVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSlcbiBcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcDtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4tXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0Zm9saW8gPSBmb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJUkRfVEFCTEVfUEFHRV9PUkRFUiwgaXJkZS1cdTAwM2Vub2RlKTtcbiBcdGlmICghZm9saW8pIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vZGUgWyVkXSByZWRpcmVjdCB0YWJsZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxuXCYjMzQ7LCBpcmRlLVx1MDAzZW5vZGUpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfcXVldWVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSlcbiBcdHN0cnVjdCByZWRpcmVjdF9xdWV1ZSAqaW52X3F1ZXVlID0gXHUwMDI2aXJkZS1cdTAwM2VpbnZfcXVldWU7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuLVx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVl9RVUVVRV9QQUdFX09SREVSLCBpcmRlLVx1MDAzZW5vZGUpO1xuJiM0MztcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHByX2VycihcJiMzNDtOb2RlIFslZF0gaW52YWxpZCBxdWV1ZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxuXCYjMzQ7LCBpcmRlLVx1MDAzZW5vZGUpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuaW5kZXggODcyYmM1M2YzMmVjODcuLjE3YzE0YjhjYTAwN2RjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTExLDcgJiM0MzsxMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuIFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcbi1zdHJ1Y3QgbWVtcG9saWN5O1xuIFxuIC8qIEhlbHBlciBtYWNybyB0byBhdm9pZCBnZnAgZmxhZ3MgaWYgdGhleSBhcmUgdGhlIGRlZmF1bHQgb25lICovXG4gI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGJcbkBAIC0yMDQsMTAgJiM0MzsyMDMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH1cbiAjZW5kaWZcbiBcbi1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLSNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuLVxuIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXG4gXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuQEAgLTI1MiwxNSAmIzQzOzI0Nyw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3YXJuX2lmX25vZGVfb2ZmbGluZShpbnQgdGhpc19ub2RlLCBnZnBfdCBnZnBfbWFzaylcbiBcdGR1bXBfc3RhY2soKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcbi17XG4tXHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcCk7XG4tXG4tXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMKTtcbi19XG4mIzQzO3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpO1xuIFxuLSNkZWZpbmUgIF9fZm9saW9fYWxsb2Nfbm9kZSguLi4pXHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuJiM0MzsjZGVmaW5lICBmb2xpb19hbGxvY19ub2RlKC4uLilcdFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuIC8qXG4gICogQWxsb2NhdGUgcGFnZXMsIHByZWZlcnJpbmcgdGhlIG5vZGUgZ2l2ZW4gYXMgbmlkLiBXaGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG5AQCAtMjc0LDggJiM0MzsyNjMsNiBAQCBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlclxuICNpZmRlZiBDT05GSUdfTlVNQVxuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1zdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7XG4gc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyKTtcbiAjZWxzZVxuQEAgLTI4NSwxMiAmIzQzOzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyXG4gfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xuLX1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKVxuLXtcbi1cdHJldHVybiBmb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlcik7XG4mIzQzO1x0cmV0dXJuIGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpKTtcbiB9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5AQCAtMzAxLDcgJiM0MzsyODMsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlcixcbiBcbiAjZGVmaW5lIGFsbG9jX3BhZ2VzKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuICNkZWZpbmUgZm9saW9fYWxsb2MoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tI2RlZmluZSBmb2xpb19hbGxvY19tcG9sKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19tcG9sX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gI2RlZmluZSB2bWFfYWxsb2NfZm9saW8oLi4uKVx0XHRcdGFsbG9jX2hvb2tzKHZtYV9hbGxvY19mb2xpb19ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuICNkZWZpbmUgYWxsb2NfcGFnZShnZnBfbWFzaykgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIDApXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCAxZGJiNGM2ZjgyNGU5YS4uMWNmOTE5NzBhNjg1MDEgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTUyLDYgJiM0Mzs1Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21lbXBvbGljeS5oXCYjMzQ7XG4gXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2ZpbGVtYXAuaFx1MDAzZVxuQEAgLTYzLDYgJiM0Mzs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21tYW4uaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDttZW1wb2xpY3kuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuIFxuIC8qXG5AQCAtMTAwNSw3ICYjNDM7MTAwNyw3IEBAIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGRvIHtcbiBcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuIFx0XHRcdG4gPSBjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKCk7XG4tXHRcdFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xuJiM0MztcdFx0XHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xuIFx0XHR9IHdoaWxlICghZm9saW8gXHUwMDI2XHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xuIFxuIFx0XHRyZXR1cm4gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTcyMGY3ZjU0ZDk0MmYuLjMxYzRlOWY0OWI1ZTllIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMTE5LDYgJiM0MzsxMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttZW1wb2xpY3kuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuIFxuIC8qIEludGVybmFsIGZsYWdzICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kODBmZTRjNTU5Nzg2ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmhcbkBAIC0wLDAgJiM0MzsxLDMxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIG1tLWludGVybmFsIEFQSSBmb3IgbWVtcG9saWN5LmMuIFB1YmxpYyBBUEkgbGl2ZXMgaW5cbiYjNDM7ICogaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgX19NTV9NRU1QT0xJQ1lfSFxuJiM0MzsjZGVmaW5lIF9fTU1fTUVNUE9MSUNZX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX05VTUFcbiYjNDM7c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBmb2xpb19hbGxvY19tcG9sKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19tcG9sX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuJiM0MzsjZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuJiM0MztcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19NTV9NRU1QT0xJQ1lfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMjIyYzhjMTVmNzgyZjcuLmI3ODM2YjAyZjMyZGJlIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0yNjgyLDcgJiM0MzsyNjgyLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlzcGxhY2VkX2RzdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0XHRfX0dGUF9OT1dBUk47XG4gXHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9SRUNMQUlNO1xuIFx0fVxuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZShnZnAsIG9yZGVyLCBuaWQpO1xuJiM0MztcdHJldHVybiBmb2xpb19hbGxvY19ub2RlKGdmcCwgb3JkZXIsIG5pZCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAzN2EzYzFjMDBlMTY5Ni4uZmY4NTE1ZTE3M2UxZWYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU0MzUsMTEgJiM0Mzs1NDM1LDIzIEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YpO1xuIHN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRub2RlbWFza190ICpub2RlbWFzaylcbiB7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCB8IF9fR0ZQX0NPTVAsIG9yZGVyLFxuLVx0XHRcdFx0XHRwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChwcmVmZXJyZWRfbmlkID09IE5VTUFfTk9fTk9ERSlcbiYjNDM7XHRcdHByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpO1xuJiM0MztcbiYjNDM7XHR3YXJuX2lmX25vZGVfb2ZmbGluZShwcmVmZXJyZWRfbmlkLCBnZnApO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsXG4mIzQzO1x0XHRcdFx0ICAgIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcbiBcdHJldHVybiBwYWdlX3JtYXBwYWJsZV9mb2xpbyhwYWdlKTtcbiB9XG4tRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2FsbG9jX25vcHJvZik7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub2RlX25vcHJvZik7XG4gXG4gLypcbiAgKiBDb21tb24gaGVscGVyIGZ1bmN0aW9ucy4gTmV2ZXIgdXNlIHdpdGggX19HRlBfSElHSE1FTSBiZWNhdXNlIHRoZSByZXR1cm5lZFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuaCBiL21tL3BhZ2VfYWxsb2MuaFxuaW5kZXggYjkyNTlkZWRkYjU5ZDcuLjQwOWJlMzE4OThhZTc3IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmhcbkBAIC0yNTgsNiAmIzQzOzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfblxuIFx0XHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiAjZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbiYjNDM7c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG4mIzQzO1x0XHRub2RlbWFza190ICpub2RlbWFzayk7XG4mIzQzOyNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuJiM0MztcbiBleHRlcm4gdm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gZXh0ZXJuIHZvaWQgem9uZV9wY3BfZGlzYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gZXh0ZXJuIHZvaWQgem9uZV9wY3BfZW5hYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjY5ZjU2MTMzMmJiOTM0IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTQxLDYgJiM0Mzs0MSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcGZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmljb2RlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWVtcG9saWN5LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbiBcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDViZTgyNTkxMWU2NDVlLi44Y2NkMDNjMzlhNDA3MSAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21lbXBvbGljeS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzI5Li43NDM1MGEyZTA3MDM2ZSAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3ZjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3ZjLmNcbkBAIC03MTEsNyAmIzQzOzcxMSw3IEBAIHN2Y19wcmVwYXJlX3RocmVhZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCwgaW50IG5vZGUpXG4gXHRycXN0cC1cdTAwM2VycV9zZXJ2ZXIgPSBzZXJ2O1xuIFx0cnFzdHAtXHUwMDNlcnFfcG9vbCA9IHBvb2w7XG4gXG4tXHRycXN0cC1cdTAwM2VycV9zY3JhdGNoX2ZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xuJiM0MztcdHJxc3RwLVx1MDAzZXJxX3NjcmF0Y2hfZm9saW8gPSBmb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xuIFx0aWYgKCFycXN0cC1cdTAwM2VycV9zY3JhdGNoX2ZvbGlvKVxuIFx0XHRnb3RvIG91dF9lbm9tZW07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBhbGxvY2F0aW9uIEFQSS4gSXQgcmVuYW1lcyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAsIG1vdmVzIHRoZSBgTlVNQV9OT19OT0RFYCBjaGVjayBpbnRvIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgKG1ha2luZyBpdCBjb25zaXN0ZW50IHdpdGggYGFsbG9jX3BhZ2VzX25vZGVgKSwgYW5kIG1vdmVzIHNvbWUgbWVtcG9saWN5IGRlY2xhcmF0aW9ucyB0byBhbiBpbnRlcm5hbCBoZWFkZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMsIGZlYXR1cmVzLCBvciBjb21wbGV4IGNvZGUgcGF0aHMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzIwNDEyYmY1YjczMjI5OTYzZDkyMmVhOGZmMmIwY2ViZDFkNDkyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTk6Mjc6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDg4MTNkNWQ3ZWIwYzFmLi45Y2RlOTljMjU5NjM5NyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3MDY4LDYgJiM0MzsxNzA2OCw3IEBAIEY6CWluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaAogRjoJaW5jbHVkZS9saW51eC9taWdyYXRlLmgKIEY6CWluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgKIEY6CW1tL21lbXBvbGljeS5jCiYjNDM7RjoJbW0vbWVtcG9saWN5LmgKIEY6CW1tL21pZ3JhdGUuYwogRjoJbW0vbWlncmF0ZV9kZXZpY2UuYwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMKaW5kZXggM2JhYjE3NWQ4NTU3MWEuLjQ3ZTA3NTlmMGUwYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jCkBAIC01NiwxNCAmIzQzOzU2LDcgQEAgdm9pZCAqaW9tbXVfYWxsb2NfcGFnZXNfbm9kZV9zeihpbnQgbmlkLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKQogCSAqLwogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCi0JLyoKLQkgKiBfX2ZvbGlvX2FsbG9jX25vZGUoKSBkb2VzIG5vdCBoYW5kbGUgTlVNQV9OT19OT0RFIGxpa2UKLQkgKiBhbGxvY19wYWdlc19ub2RlKCkgZGlkLgotCSAqLwotCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQotCQluaWQgPSBudW1hX21lbV9pZCgpOwotCi0JZm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7CiYjNDM7CWZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShnZnAgfCBfX0dGUF9aRVJPLCBvcmRlciwgbmlkKTsKIAlpZiAodW5saWtlbHkoIWZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jCmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jCkBAIC0zODQsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGFibGVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSkKIAl1bnNpZ25lZCBsb25nICpiaXRtYXA7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAotCWZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJUkRfVEFCTEVfUEFHRV9PUkRFUiwgaXJkZS0mZ3Q7bm9kZSk7CiYjNDM7CWZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtJmd0O25vZGUpOwogCWlmICghZm9saW8pIHsKIAkJcHJfZXJyKCYjMzQ7Tm9kZSBbJWRdIHJlZGlyZWN0IHRhYmxlIGFsbG9jIHBhZ2VzIGZhaWxlZCFcbiYjMzQ7LCBpcmRlLSZndDtub2RlKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfcXVldWVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSkKIAlzdHJ1Y3QgcmVkaXJlY3RfcXVldWUgKmludl9xdWV1ZSA9ICZhbXA7aXJkZS0mZ3Q7aW52X3F1ZXVlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKLQlmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtJmd0O25vZGUpOwomIzQzOwlmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVl9RVUVVRV9QQUdFX09SREVSLCBpcmRlLSZndDtub2RlKTsKIAlpZiAoIWZvbGlvKSB7CiAJCXByX2VycigmIzM0O05vZGUgWyVkXSBpbnZhbGlkIHF1ZXVlIGFsbG9jIHBhZ2VzIGZhaWxlZCFcbiYjMzQ7LCBpcmRlLSZndDtub2RlKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA4NzJiYzUzZjMyZWM4Ny4uMTdjMTRiOGNhMDA3ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMTEsNyAmIzQzOzExLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7Ci1zdHJ1Y3QgbWVtcG9saWN5OwogCiAvKiBIZWxwZXIgbWFjcm8gdG8gYXZvaWQgZ2ZwIGZsYWdzIGlmIHRoZXkgYXJlIHRoZSBkZWZhdWx0IG9uZSAqLwogI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGIKQEAgLTIwNCwxMCAmIzQzOzIwMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9CiAjZW5kaWYKIAotc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCi0JCW5vZGVtYXNrX3QgKm5vZGVtYXNrKTsKLSNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pCQkJYWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKQotCiB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAJCQkJbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcywKIAkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwpAQCAtMjUyLDE1ICYjNDM7MjQ3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHdhcm5faWZfbm9kZV9vZmZsaW5lKGludCB0aGlzX25vZGUsIGdmcF90IGdmcF9tYXNrKQogCWR1bXBfc3RhY2soKTsKIH0KIAotc3RhdGljIGlubGluZQotc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKQotewotCXdhcm5faWZfbm9kZV9vZmZsaW5lKG5pZCwgZ2ZwKTsKLQotCXJldHVybiBfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIE5VTEwpOwotfQomIzQzO3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpOwogCi0jZGVmaW5lICBfX2ZvbGlvX2FsbG9jX25vZGUoLi4uKQkJYWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpCiYjNDM7I2RlZmluZSAgZm9saW9fYWxsb2Nfbm9kZSguLi4pCQlhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpCiAKIC8qCiAgKiBBbGxvY2F0ZSBwYWdlcywgcHJlZmVycmluZyB0aGUgbm9kZSBnaXZlbiBhcyBuaWQuIFdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSwKQEAgLTI3NCw4ICYjNDM7MjYzLDYgQEAgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIKICNpZmRlZiBDT05GSUdfTlVNQQogc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7CiBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7Ci1zdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLAotCQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7CiBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIpOwogI2Vsc2UKQEAgLTI4NSwxMiAmIzQzOzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyCiB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCXJldHVybiBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpKTsKLX0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwKLQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpCi17Ci0JcmV0dXJuIGZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpKTsKIH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgaW50IG9yZGVyLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtMzAxLDcgJiM0MzsyODMsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlciwKIAogI2RlZmluZSBhbGxvY19wYWdlcyguLi4pCQkJYWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSkKICNkZWZpbmUgZm9saW9fYWxsb2MoLi4uKQkJCWFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIGZvbGlvX2FsbG9jX21wb2woLi4uKQkJCWFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKF9fVkFfQVJHU19fKSkKICNkZWZpbmUgdm1hX2FsbG9jX2ZvbGlvKC4uLikJCQlhbGxvY19ob29rcyh2bWFfYWxsb2NfZm9saW9fbm9wcm9mKF9fVkFfQVJHU19fKSkKIAogI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAxZGJiNGM2ZjgyNGU5YS4uMWNmOTE5NzBhNjg1MDEgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTUyLDYgJiM0Mzs1Miw3IEBACiAKICNpbmNsdWRlICZsdDthc20vdGxiZmx1c2guaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZW1wb2xpY3kuaCYjMzQ7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9maWxlbWFwLmgmZ3Q7CkBAIC02Myw2ICYjNDM7NjQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7YXNtL21tYW4uaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7bWVtcG9saWN5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCiAvKgpAQCAtMTAwNSw3ICYjNDM7MTAwNyw3IEBAIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCWRvIHsKIAkJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiAJCQluID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpOwotCQkJZm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pOwomIzQzOwkJCWZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7CiAJCX0gd2hpbGUgKCFmb2xpbyAmYW1wOyZhbXA7IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpOwogCiAJCXJldHVybiBmb2xpbzsKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggNTcyMGY3ZjU0ZDk0MmYuLjMxYzRlOWY0OWI1ZTllIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTE5LDYgJiM0MzsxMTksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWVtcG9saWN5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogCiAvKiBJbnRlcm5hbCBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZDgwZmU0YzU1OTc4NmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuaApAQCAtMCwwICYjNDM7MSwzMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBtbS1pbnRlcm5hbCBBUEkgZm9yIG1lbXBvbGljeS5jLiBQdWJsaWMgQVBJIGxpdmVzIGluCiYjNDM7ICogaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC4KJiM0MzsgKi8KJiM0MzsjaWZuZGVmIF9fTU1fTUVNUE9MSUNZX0gKJiM0MzsjZGVmaW5lIF9fTU1fTUVNUE9MSUNZX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbXBvbGljeS5oJmd0OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzO3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlcik7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNkZWZpbmUgZm9saW9fYWxsb2NfbXBvbCguLi4pCQkJYWxsb2NfaG9va3MoZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoX19WQV9BUkdTX18pKQomIzQzOwomIzQzO3Vuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCwKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTsKJiM0MzsjZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pCQkJCVwKJiM0MzsJYWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSkKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NTV9NRU1QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDIyMmM4YzE1Zjc4MmY3Li5iNzgzNmIwMmYzMmRiZSAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMjY4Miw3ICYjNDM7MjY4Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsCiAJCQlfX0dGUF9OT1dBUk47CiAJCWdmcCAmYW1wOz0gfl9fR0ZQX1JFQ0xBSU07CiAJfQotCXJldHVybiBfX2ZvbGlvX2FsbG9jX25vZGUoZ2ZwLCBvcmRlciwgbmlkKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2FsbG9jX25vZGUoZ2ZwLCBvcmRlciwgbmlkKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAzN2EzYzFjMDBlMTY5Ni4uZmY4NTE1ZTE3M2UxZWYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTU0MzUsMTEgJiM0Mzs1NDM1LDIzIEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YpOwogc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCiAJCW5vZGVtYXNrX3QgKm5vZGVtYXNrKQogewotCXN0cnVjdCBwYWdlICpwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCi0JCQkJCXByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CWlmIChwcmVmZXJyZWRfbmlkID09IE5VTUFfTk9fTk9ERSkKJiM0MzsJCXByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpOwomIzQzOwomIzQzOwl3YXJuX2lmX25vZGVfb2ZmbGluZShwcmVmZXJyZWRfbmlkLCBnZnApOwomIzQzOwomIzQzOwlwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCiYjNDM7CQkJCSAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7CiAJcmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpOwogfQotRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2FsbG9jX25vcHJvZik7CiYjNDM7CiYjNDM7c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIE5VTEwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKTsKIAogLyoKICAqIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zLiBOZXZlciB1c2Ugd2l0aCBfX0dGUF9ISUdITUVNIGJlY2F1c2UgdGhlIHJldHVybmVkCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmggYi9tbS9wYWdlX2FsbG9jLmgKaW5kZXggYjkyNTlkZWRkYjU5ZDcuLjQwOWJlMzE4OThhZTc3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5oCkBAIC0yNTgsNiAmIzQzOzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbgogCQlub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTsKICNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pCQkJYWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKQogCiYjNDM7c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCiYjNDM7CQlub2RlbWFza190ICpub2RlbWFzayk7CiYjNDM7I2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLikJCQlhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpCiYjNDM7CiBleHRlcm4gdm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSk7CiBleHRlcm4gdm9pZCB6b25lX3BjcF9kaXNhYmxlKHN0cnVjdCB6b25lICp6b25lKTsKIGV4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1MDcxMTc3MDU5YTk2NC4uNjlmNTYxMzMyYmI5MzQgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtNDEsNiAmIzQzOzQxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zd2FwZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2l2ZXJzaW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdW5pY29kZS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWVtcG9saWN5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA1YmU4MjU5MTFlNjQ1ZS4uOGNjZDAzYzM5YTQwNzEgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZW1wb2xpY3kuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXBfdGFibGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGFlOWVjNGJmMzRmNzI5Li43NDM1MGEyZTA3MDM2ZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC03MTEsNyAmIzQzOzcxMSw3IEBAIHN2Y19wcmVwYXJlX3RocmVhZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCwgaW50IG5vZGUpCiAJcnFzdHAtJmd0O3JxX3NlcnZlciA9IHNlcnY7CiAJcnFzdHAtJmd0O3JxX3Bvb2wgPSBwb29sOwogCi0JcnFzdHAtJmd0O3JxX3NjcmF0Y2hfZm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCwgMCwgbm9kZSk7CiYjNDM7CXJxc3RwLSZndDtycV9zY3JhdGNoX2ZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMLCAwLCBub2RlKTsKIAlpZiAoIXJxc3RwLSZndDtycV9zY3JhdGNoX2ZvbGlvKQogCQlnb3RvIG91dF9lbm9tZW07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2xpbyBBbGxvY2F0aW9uIEFQSSBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCYjMzk7cyBhIHJlZmFjdG9yLCBwbGFpbiBhbmQgc2ltcGxlLiBUaGV5JiMzOTtyZSByZW5hbWluZyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAgYW5kIG1vdmluZyB0aGUgYE5VTUFfTk9fTk9ERWAgbG9naWMgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgLiBJdCBhbHNvIGxvb2tzIGxpa2UgYGZvbGlvX2FsbG9jX21wb2xgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgIGFyZSBiZWluZyBzaHVmZmxlZCBpbnRvIGEgbmV3IGludGVybmFsIGhlYWRlciwgYG1tL21lbXBvbGljeS5oYC4gTm8gYmlnIHN1cnByaXNlcyB0aGVyZSwganVzdCB0aWR5aW5nIHRoaW5ncyB1cC4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIGluIGBkcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNgLCBgZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY2AsIGBtbS9maWxlbWFwLmNgLCBgbW0vbWlncmF0ZS5jYCBhbmQgYG5ldC9zdW5ycGMvc3ZjLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWUsIHJlcGxhY2luZyB0aGUgb2xkIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggdGhlIG5ldyBgZm9saW9fYWxsb2Nfbm9kZWAgaW4gdGhvc2UgbG9jYXRpb25zLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gaXMgY2hhbmdlZCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHRocm91Z2ggYGluY2x1ZGUvbGludXgvZ2ZwLmhgLgoKVGhlIGNvcmUgbG9naWMgY2hhbmdlIGlzIHJlYWxseSB0aGUgaGFuZGxpbmcgb2YgYE5VTUFfTk9fTk9ERWAuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgYE5VTUFfTk9fTk9ERWAgd2FzIGJlaW5nIGhhbmRsZWQgYXQgdGhlIGNhbGwgc2l0ZSBvZiBgX19mb2xpb19hbGxvY19ub2RlYCwgb3Igd2FzIGl0IGRlZmluZWQgYXQgYWxsPyBUaGUgcGF0Y2ggbW92ZXMgdGhpcyBjaGVjayBpbnRvIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgaXRzZWxmLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgLiBOb3csIGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAgaXMgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCwgbWFraW5nIHRoZSBjb2RlIGNsZWFuZXIuCgpCZWZvcmUsIGBmb2xpb19hbGxvY19ub2RlYCB3YXMgYSBtYWNybyB0aGF0IGNhbGxlZCBgX19mb2xpb19hbGxvY19ub2RlX25vcHJvZmAuIE5vdyBgZm9saW9fYWxsb2Nfbm9kZWAgZGlyZWN0bHkgY2FsbHMgYGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYC4KYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCBub3cgaGFuZGxlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgYW5kIGB3YXJuX2lmX25vZGVfb2ZmbGluZWAuCgpTbywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGlzIHRoZXJlIHJlYWxseSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2U/IFRoZSBjb3JlIGFsbG9jYXRpb24gbWVjaGFuaXNtIGl0c2VsZiBzZWVtcyB1bnRvdWNoZWQuIEl0JiMzOTtzIGp1c3QgYW4gQVBJIGNoYW5nZSB3aXRoIHNvbWUgbG9naWMgcmVhcnJhbmdlbWVudC4gVGhlIHBvdGVudGlhbCBmb3IgbmV3IGJ1Z3MgaGVyZSBzZWVtcyBwcmV0dHkgbG93LCBnaXZlbiB0aGF0IGl0JiMzOTtzIGp1c3QgcmVvcmdhbml6aW5nIGV4aXN0aW5nIGNvZGUgYW5kIGNlbnRyYWxpemluZyB0aGF0IGBOVU1BX05PX05PREVgIGNoZWNrLiBXaGlsZSBJJiMzOTtkIG5ldmVyIHJ1bGUgb3V0IHRoZSAqcG9zc2liaWxpdHkqIG9mIGEgc3VidGxlIGlzc3VlLCBpdCBkb2VzbiYjMzk7dCBqdW1wIG91dCBhdCBtZSBhcyBhIHByaW1lIHRhcmdldCBmb3IgaW50ZW5zaXZlIGZ1enppbmcgZWZmb3J0cy4gSXQgbWlnaHQgc3RpbGwgYmUgd29ydGggc29tZSBjdXJzb3J5IGZ1enppbmcsIGJ1dCBpdCBwcm9iYWJseSBzaG91bGRuJiMzOTt0IGJlIGEgcHJpb3JpdHkuIFdlIHdvdWxkIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2FsbG9jX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NTQzMz1FWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDM0LVxubW0vcGFnZV9hbGxvYy5jOjU0MzU6c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTQzNi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU0NTA9c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcbm1tL3BhZ2VfYWxsb2MuYy01NDUxLXtcbm1tL3BhZ2VfYWxsb2MuYzo1NDUyOlx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG5tbS9wYWdlX2FsbG9jLmMtNTQ1My19XG4tLVxubW0vcGFnZV9hbGxvYy5oPTI1Nz1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuaC0yNjAtXG5tbS9wYWdlX2FsbG9jLmg6MjYxOnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5oLTI2Mi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xubW0vcGFnZV9hbGxvYy5oOjI2MzojZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcbm1tL3BhZ2VfYWxsb2MuaC0yNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGb2xpbyBBbGxvY2F0aW9uIEZsb3cqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZm9saW8gYWxsb2NhdGlvbiBwYXRoLiBJdCBsb29rcyBsaWtlIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGJ5IGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAgYW5kIGFsc28gYnkgYF9fZm9saW9fYWxsb2NgLiBIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYF9fZm9saW9fYWxsb2NgIGlzIGFjdHVhbGx5IGEgbWFjcm8uIFRoZSBtYWNybyBleHBhbmRzIHRvIGNhbGwgYF9fZm9saW9fYWxsb2Nfbm9wcm9mYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXI7IGEgbWFjcm8gYWJzdHJhY3Rpb24gaXMgaW4gcGxhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBjaGFpbiAqYmVnaW4qPyBXaG8mIzM5O3MgdGhlIGNhbGxpbmcgZnVuY3Rpb24gb2YgYF9fZm9saW9fYWxsb2NgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgdG8gdGhpcyB3aG9sZSBwcm9jZXNzLCB0aGUgcm9vdCBvZiB0aGUgY2FsbHMuIFRyYWNpbmcgdGhhdCBiYWNrIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2FsbG9jXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xMjM4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjQ1LVxubW0va2h1Z2VwYWdlZC5jOjEyNDY6XHRmb2xpbyA9IF9fZm9saW9fYWxsb2MoZ2ZwLCBvcmRlciwgbm9kZSwgXHUwMDI2Y2MtXHUwMDNlYWxsb2Nfbm1hc2spO1xubW0va2h1Z2VwYWdlZC5jLTEyNDctXHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vbWlncmF0ZS5jPTIxOTk9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyMzQtXG5tbS9taWdyYXRlLmM6MjIzNTpcdHJldHVybiBfX2ZvbGlvX2FsbG9jKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBtdGMtXHUwMDNlbm1hc2spO1xubW0vbWlncmF0ZS5jLTIyMzYtfVxuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNjE9c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmgtMjYyLVx0XHRub2RlbWFza190ICpub2RlbWFzayk7XG5tbS9wYWdlX2FsbG9jLmg6MjYzOiNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxubW0vcGFnZV9hbGxvYy5oLTI2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBfX2ZvbGlvX2FsbG9jYCBDYWxsIFNpdGUgYW5kIE5VTUEgTm9kZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBfX2ZvbGlvX2FsbG9jYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5IGBhbGxvY19jaGFyZ2VfZm9saW9gIGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBhbHNvIGJ5IGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCwgcHJpb3IgdG8gdGhpcyBwYXRjaCwgYF9fZm9saW9fYWxsb2NgIHdhc24mIzM5O3QgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgYE5VTUFfTk9fTk9ERWAgdmFsdWUuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgY2FsbGVycyB3ZXJlIGludGVyYWN0aW5nIHdpdGggaXQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCB3ZXJlIGVpdGhlciBvZiB0aG9zZSBmdW5jdGlvbnMsIGBhbGxvY19jaGFyZ2VfZm9saW9gIG9yIGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCwgKmV2ZW4qIHBhc3NpbmcgYE5VTUFfTk9fTk9ERWA/IExldCYjMzk7cyBicmVhayBpdCBkb3duLi4uIGBhbGxvY19jaGFyZ2VfZm9saW9gIHNlZW1zIHRvIHBhc3MgYSBgbm9kZWAgdmFsdWUsIHdoaWxlIGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBwYXNzZXMgYSBgbmlkYC4gSWYgZWl0aGVyIHdhcyBhY3R1YWxseSBzZW5kaW5nIGBOVU1BX05PX05PREVgIGRvd24gdGhlIGxpbmUsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIHJlYWNoIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuIFRoYXQgZnVuY3Rpb24gKnNob3VsZCogaGFuZGxlIHRoZSBgTlVNQV9OT19OT0RFYCBzY2VuYXJpbywgcmlnaHQ/CgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQmIzM5O3Mgd3JvbmcuIExldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGZ1bmN0aW9uIGluIGBtbS9wYWdlX2FsbG9jLmNgLi4uIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgY3J1Y2lhbCB0aGF0IEkgdmVyaWZ5IHRoaXMgcGllY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19wYWdlc19ub3Byb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUxMDY9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjQwLWZhaWxlZDpcbm1tL3BhZ2VfYWxsb2MuYzo1MjQxOlx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xubW0vcGFnZV9hbGxvYy5jLTUyNDItXHRpZiAocGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTQxMD1FWFBPUlRfU1lNQk9MKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTQxMS1cbm1tL3BhZ2VfYWxsb2MuYzo1NDEyOnN0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy01NDEzLVx0XHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTQyND1zdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQzMC1cbm1tL3BhZ2VfYWxsb2MuYzo1NDMxOlx0cmV0dXJuIF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDMyLX1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTQzNT1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ0NC1cbm1tL3BhZ2VfYWxsb2MuYzo1NDQ1Olx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCB8IF9fR0ZQX0NPTVAsIG9yZGVyLFxubW0vcGFnZV9hbGxvYy5jLTU0NDYtXHRcdFx0XHQgICAgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNTU9dm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmgtMjU2LVxubW0vcGFnZV9hbGxvYy5oOjI1NzpzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5oLTI1OC1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG5tbS9wYWdlX2FsbG9jLmg6MjU5OiNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxubW0vcGFnZV9hbGxvYy5oLTI2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3b3JraW5ncyBvZiBgX19hbGxvY19wYWdlc19ub3Byb2ZgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBubyBkb3VidCwgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGdvdCBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiB0cmlja3MgaGlkZGVuIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIGxvZ2ljLCBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMgdGhhdCBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIE5VTUEsIHBhZ2UgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSwgbG93LW1lbW9yeSBzaXR1YXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgc2xhYiBhbGxvY2F0aW9uIG9yIGRpcmVjdCBwaHlzaWNhbCBtYXBwaW5nOyBpdOKAmXMgbGlrZWx5IGEgYmFzZSBsYXllciB0aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGJ1aWxkIHVwb24uIEdvdHRhIGdldCB0aGlzIHJpZ2h0LiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MTI6XHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41NDEzOlx0XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuNTQxNDpcdHtcbjU0MTU6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuNTQxNjpcdFxuNTQxNzpcdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayxcbjU0MTg6XHRcdFx0XHRcdFx0ICAgYWxsb2NfZmxhZ3MpO1xuNTQxOTpcdFx0aWYgKHBhZ2UpXG41NDIwOlx0XHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG41NDIxOlx0XHRyZXR1cm4gcGFnZTtcbjU0MjI6XHR9XG41NDIzOlx0XG41NDI0Olx0c3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG41NDI1Olx0e1xuNTQyNjpcdFx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXG41NDI3Olx0XHRcdG5pZCA9IG51bWFfbWVtX2lkKCk7XG41NDI4Olx0XG41NDI5Olx0XHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcF9tYXNrKTtcbjU0MzA6XHRcbjU0MzE6XHRcdHJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTQwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlVNQSBOb2RlIEhhbmRsaW5nIGluIFBhZ2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBOVU1BX05PX05PREVgIHZhbHVlIGlzIGhhbmRsZWQgaW4gcGFnZSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBOVU1BIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIGFuZCB0aGUgYF9fZm9saW9fYWxsb2NgIGZ1bmN0aW9ucy4KCkluaXRpYWxseSwgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoZSBgTlVNQV9OT19OT0RFYCBjYXNlIGJ5IGNhbGxpbmcgYG51bWFfbWVtX2lkKClgIHRvIGdldCB0aGUgY3VycmVudCBub2RlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgaXRzZWxmICpkb2VzbiYjMzk7dCogaGFuZGxlIGBOVU1BX05PX05PREVgIGRpcmVjdGx5LgoKTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgX19mb2xpb19hbGxvY19ub3Byb2ZgLCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIGZvbGlvIHN0cnVjdHVyZXMsIHVzZWQgdG8gcGFzcyB0aGUgbm9kZSBJRCBkb3duIHRvIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuIFRoZSBwb2ludCBpcywgdGhlIG9sZCBgX19mb2xpb19hbGxvY19ub2RlX25vcHJvZmAgKmFsc28qIGRpZCAqbm90KiBoYW5kbGUgYE5VTUFfTk9fTk9ERWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBfX2ZvbGlvX2FsbG9jX25vZGVgICh3aGljaCBpdHNlbGYgY2FsbGVkIGBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYCksIGFsc28gZGlkIE5PVCBoYW5kbGUgYE5VTUFfTk9fTk9ERWAuIFRoaXMgbWVhbnQgdGhhdCBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCBoYWQgdG8gZG8gZXh0cmEgaGFuZGxpbmcgZm9yIHRoaXMsIHdoaWNoIGl0IGRpZC4KClRoaXMgcGF0Y2gsIGhvd2V2ZXIsIHJlZmFjdG9ycyB0aGluZ3MuIEl0IG1vdmVzIHRoZSBgTlVNQV9OT19OT0RFYCBoYW5kbGluZyAqaW50byogYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCBpdHNlbGYsIG1ha2luZyBpdCByZXNwb25zaWJsZSBmb3IgdGhlIGRlZmF1bHQgbm9kZSBzZWxlY3Rpb24uIFRoZSBjYWxsIGlzIG5vdyBtb3ZlZCB0byBgbnVtYV9tZW1faWQoKWAgYW5kIHRoZSBmdW5jdGlvbiByZW5hbWVkLiBOb3csIGBmb2xpb19hbGxvY19ub2RlYCBoYW5kbGVzIHRoaXMgY2FzZSBjb3JyZWN0bHksIGp1c3QgbGlrZSBgYWxsb2NfcGFnZXNfbm9kZWAgZG9lcy4gSXQgYWxzbyBtZWFucyB0aGF0IGFueSBjYWxsZXIgb2YgYF9fZm9saW9fYWxsb2Nfbm9kZWAgb3IgYF9fZm9saW9fYWxsb2NgIG5vdyBoYW5kbGVzIHRoZSBgLTFgIGBOVU1BX05PX05PREVgLgoKU28sIGl0JiMzOTtzIGEgbWlub3IgcmVmYWN0b3JpbmcsIGVzc2VudGlhbGx5LiBJdCByZXNvbHZlcyBhbiBBUEkgaW5jb25zaXN0ZW5jeS4gUHJldmlvdXNseSwgaWYgYC0xYCB3YXMgcGFzc2VkICh3aGljaCBlcXVhdGVzIHRvIGBOVU1BX05PX05PREVgKSB0byBgX19mb2xpb19hbGxvY2AsIGl0IHdhcyB0aGVuIHBhc3NlZCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgLgoKVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsbHkgaW1wb3J0YW50LCB0aG91Z2gsIGJlY2F1c2UgYW55IGNhbGxlciAqcmVseWluZyogb24gdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBub3cgcmVjZWl2ZSBpdCBjb3JyZWN0bHkuCldoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCAqYmVmb3JlKiBpZiBgTlVNQV9OT19OT0RFYCB3YXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucz8gV2VsbCwgaXQgd2lsbCBqdXN0IGdldCBwYXNzZWQgYXMgYC0xYC4gSSBuZWVkIHRvIHJldmlldyB3aGF0IGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGRvZXMgd2l0aCB0aGF0IGNhc2UsIGp1c3QgdG8gYmUgc3VyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjQwOT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0MjItXHRwcmVmZXJyZWRfZ2ZwIFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XG5tbS9tZW1wb2xpY3kuYzoyNDIzOlx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzayxcbm1tL21lbXBvbGljeS5jLTI0MjQtXHRcdFx0XHRcdCAgIEFMTE9DX0RFRkFVTFQpO1xubW0vbWVtcG9saWN5LmMtMjQyNS1cdGlmICghcGFnZSlcbm1tL21lbXBvbGljeS5jOjI0MjY6XHRcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjQyNy1cdFx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yNDQyPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDcyLVx0XHRcdCAqL1xubW0vbWVtcG9saWN5LmM6MjQ3MzpcdFx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKFxubW0vbWVtcG9saWN5LmMtMjQ3NC1cdFx0XHRcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXG4tLVxubW0vbWVtcG9saWN5LmMtMjQ4Ni1cbm1tL21lbXBvbGljeS5jOjI0ODc6XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xubW0vbWVtcG9saWN5LmMtMjQ4OC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTMyMz1zdGF0aWMgY29uc3QgZ2ZwX3QgZ2ZwX25vbG9jayA9IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT01FTUFMTE9DIHxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMyOC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1MzI5OnN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTMzMC1cdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MDktfVxubW0vcGFnZV9hbGxvYy5jOjU0MTA6RVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xubW0vcGFnZV9hbGxvYy5jLTU0MTEtXG5tbS9wYWdlX2FsbG9jLmM9NTQxMj1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTYtXG5tbS9wYWdlX2FsbG9jLmM6NTQxNzpcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNTQxOC1cdFx0XHRcdFx0ICAgYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03OTg3PXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzk5MS1cbm1tL3BhZ2VfYWxsb2MuYzo3OTkyOlx0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfZmxhZ3MsIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX05PTE9DSyk7XG5tbS9wYWdlX2FsbG9jLmMtNzk5My19XG4tLVxubW0vcGFnZV9hbGxvYy5oPTIzMD1leHRlcm4gaW50IHVzZXJfbWluX2ZyZWVfa2J5dGVzO1xubW0vcGFnZV9hbGxvYy5oLTIzMS1cbm1tL3BhZ2VfYWxsb2MuaDoyMzI6c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCxcbm1tL3BhZ2VfYWxsb2MuaC0yMzMtXHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5oLTIzNC0jZGVmaW5lIF9fYWxsb2NfZnJvemVuX3BhZ2VzKC4uLikgXFxcbm1tL3BhZ2VfYWxsb2MuaDoyMzU6XHRhbGxvY19ob29rcyhfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxubW0vcGFnZV9hbGxvYy5oLTIzNi12b2lkIGZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuaC0yNDMte1xubW0vcGFnZV9hbGxvYy5oOjI0NDpcdHJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG5tbS9wYWdlX2FsbG9jLmgtMjQ1LVx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbi0tXG5tbS9zbHViLmM9NTI5Mj1zdGF0aWMgdm9pZCAqX19fa21hbGxvY19sYXJnZV9ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXG4tLVxubW0vc2x1Yi5jLTUzMDUtXHRlbHNlXG5tbS9zbHViLmM6NTMwNjpcdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwsXG5tbS9zbHViLmMtNTMwNy1cdFx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBhbmQgTlVNQV9OT19OT0RFKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBkZWFscyB3aXRoIGBOVU1BX05PX05PREVgLiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBmcm96ZW4gcGFnZXMsIGxpa2VseSByZWxhdGVkIHRvIGVhcmx5IGJvb3Qgb3IgZXh0cmVtZWx5IGxvdy1sZXZlbCBrZXJuZWwgb3BlcmF0aW9ucy4gYE5VTUFfTk9fTk9ERWAgaXMgdGhlIGltcG9ydGFudCBiaXQsIGxpa2VseSBpbmRpY2F0aW5nIHRoYXQgYSBzcGVjaWZpYyBOVU1BIG5vZGUgaXNuJiMzOTt0IGRlZmluZWQsIG9yIHBlcmhhcHMgdGhhdCB3ZSYjMzk7cmUgaW50ZW50aW9uYWxseSBhdm9pZGluZyBOVU1BIGNvbnNpZGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBmb3IgaG93IGl0JiMzOTtzIGhhbmRsZWQuIElzIGl0IHRyZWF0ZWQgYXMgYW4gZXJyb3I/IERvZXMgaXQgZmFsbCBiYWNrIHRvIGEgZGVmYXVsdCBub2RlLCBtYXliZSBub2RlIHplcm8gb3IgYWxsIG5vZGVzPyBEb2VzIHRoZSBmdW5jdGlvbiBzaW1wbHkgcHJvY2VlZCB3aXRob3V0IE5VTUEgYXdhcmVuZXNzIGlmIGBOVU1BX05PX05PREVgIGlzIHRoZSB0YXJnZXQ/IFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgYWxsb2NhdG9ycyBwZXJmb3JtYW5jZSwgcm9idXN0bmVzcywgYW5kIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBgTlVNQV9OT19OT0RFYCBpcyBjaGVja2VkLCBob3cgaXQmIzM5O3MgdXNlZCBpbiBjYWxjdWxhdGlvbnMsIGFuZCB3aGVyZSBpdCBtYXkgYmUgdHJhbnNsYXRlZCB0byBvdGhlciBub2RlIGluZGljZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhpcyB2YXJpYWJsZS4gTXkgaW50ZXJlc3QgaXM6IHdoYXQgZG9lcyBpdCBkbz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzMjk6XHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuNTMzMDpcdFx0XHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjUzMzE6XHR7XG41MzMyOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUzMzM6XHRcdGdmcF90IGFsbG9jX2dmcDsgLyogVGhlIGdmcF90IHRoYXQgd2FzIGFjdHVhbGx5IHVzZWQgZm9yIGFsbG9jYXRpb24gKi9cbjUzMzQ6XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0ge1xuNTMzNTpcdFx0XHQuYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncyxcbjUzMzY6XHRcdH07XG41MzM3Olx0XHR1bnNpZ25lZCBpbnQgZmFzdHBhdGhfYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncztcbjUzMzg6XHRcbjUzMzk6XHRcdC8qIE90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXG41MzQwOlx0XHRpZiAoV0FSTl9PTihhbGxvY19mbGFncyBcdTAwMjYgfihBTExPQ19OT0xPQ0sgfCBBTExPQ19OT19DT0RFVEFHKSkpXG41MzQxOlx0XHRcdHJldHVybiBOVUxMO1xuNTM0MjpcdFxuNTM0MzpcdFx0aWYgKCFhbGxvY19vcmRlcl9hbGxvd2VkKGdmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzKSlcbjUzNDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG41MzQ1Olx0XG41MzQ2Olx0XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykge1xuNTM0NzpcdFx0XHQvKiBDZXJ0YWluIG90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXG41MzQ4Olx0XHRcdFZNX1dBUk5fT05fT05DRShnZnAgXHUwMDI2IH4oX19HRlBfQUNDT1VOVCB8IGdmcF9ub2xvY2spKTtcbjUzNDk6XHRcdFx0aWYgKCFhbGxvY19ub2xvY2tfYWxsb3dlZCgpKVxuNTM1MDpcdFx0XHRcdHJldHVybiBOVUxMO1xuNTM1MTpcdFx0XHRnZnAgfD0gZ2ZwX25vbG9jaztcbjUzNTI6XHRcdFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gQUxMT0NfV01BUktfTUlOO1xuNTM1MzpcdFx0fSBlbHNlIHtcbjUzNTQ6XHRcdFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gQUxMT0NfV01BUktfTE9XO1xuNTM1NTpcdFx0fVxuNTM1NjpcdFxuNTM1NzpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjUzNTg6XHRcdC8qXG41MzU5Olx0XHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcbjUzNjA6XHRcdCAqIHJlc3AuIEdGUF9OT0lPIHdoaWNoIGhhcyB0byBiZSBpbmhlcml0ZWQgZm9yIGFsbCBhbGxvY2F0aW9uIHJlcXVlc3RzXG41MzYxOlx0XHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxuNTM2MjpcdFx0ICogbWVtYWxsb2Nfbm97ZnMsaW99X3tzYXZlLHJlc3RvcmV9LiBBbmQgUEZfTUVNQUxMT0NfUElOIHdoaWNoIGVuc3VyZXNcbjUzNjM6XHRcdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxuNTM2NDpcdFx0ICovXG41MzY1Olx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG41MzY2Olx0XHRhbGxvY19nZnAgPSBnZnA7XG41MzY3Olx0XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLFxuNTM2ODpcdFx0XHRcdFx1MDAyNmFsbG9jX2dmcCwgXHUwMDI2ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBrZXkgYXNwZWN0cyBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgSSBwcmVzdW1lLCBpbiBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFnZXMuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBzZXR1cCBzdGFnZSBiZWZvcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBhbGxvY2F0aW9uIG9jY3Vycywgb3IgcGVyaGFwcyBzb21lIHByZS12YWxpZGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcmVwYXJpbmcgdG8gZG8sIGFuZCB3aGF0IGl0cyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLiBJcyBpdCB0YWtpbmcgYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXI/IEEgcmVxdWVzdCBzaXplPyBGbGFncyBpbmRpY2F0aW5nIGFsbG9jYXRpb24gYmVoYXZpb3I/IExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIHNlY3Rpb25zIG9yIGxvY2tpbmcgdGhhdCBhcmUgaGFwcGVuaW5nIGhlcmU/IFRoYXQmIzM5O3MgYWx3YXlzIGEgcG9pbnQgb2YgY29uY2Vybi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2FsbG9jX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz00NzMwPV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTAzNi1cbm1tL3BhZ2VfYWxsb2MuYzo1MDM3OnN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTAzOC1cdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTA2PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTE1NS1cdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG5tbS9wYWdlX2FsbG9jLmM6NTE1NjpcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG5tbS9wYWdlX2FsbG9jLmMtNTE1Ny1cdFx0Z290byBvdXQ7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzMjk9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM2Ni1cdGFsbG9jX2dmcCA9IGdmcDtcbm1tL3BhZ2VfYWxsb2MuYzo1MzY3Olx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYyxcbm1tL3BhZ2VfYWxsb2MuYy01MzY4LVx0XHRcdFx1MDAyNmFsbG9jX2dmcCwgXHUwMDI2ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhpcyBuYW1lOyBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHV6emxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGtleSByZXNwb25zaWJpbGl0aWVzIGhlcmU/IElzIGl0IGFib3V0IHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB2YWxpZGF0aW5nIHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgcHJlLXplcm9pbmcgcGFnZXMgb3IgaGFuZGxpbmcgY2FjaGUgY29uc2lkZXJhdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgYWxsb2NhdGlvbj8gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHNhbml0eSBjaGVja3Mgb24gdGhlIHJlcXVlc3RlZCBzaXplIGFuZCB0aGUgbWVtb3J5IHpvbmUsIG1heWJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBwYWdlIGZsYWdzLCBhbmQgcG90ZW50aWFsbHksIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTlVNQSBzeXN0ZW1zLCBzb21lIG5vZGUgc2VsZWN0aW9uIGxvZ2ljLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdCB3aGF0IHByZXBhcmF0b3J5IHdvcmsgaXMgcGVyZm9ybWVkIGJlZm9yZSBoYW5kaW5nIG9mZiB0aGUgcmVxdWVzdCB0byB0aGUgbW9yZSBzdWJzdGFudGlhbCBhbGxvY2F0aW9uIHJvdXRpbmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHJlcXVlc3RzLCBzbywgaGVyZSBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTAzNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41MDM4Olx0XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcbjUwMzk6XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBnZnBfdCAqYWxsb2NfZ2ZwLFxuNTA0MDpcdFx0XHR1bnNpZ25lZCBpbnQgKmFsbG9jX2ZsYWdzKVxuNTA0MTpcdHtcbjUwNDI6XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTtcbjUwNDM6XHRcdGFjLVx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XG41MDQ0Olx0XHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuNTA0NTpcdFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xuNTA0NjpcdFxuNTA0NzpcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpKSB7XG41MDQ4Olx0XHRcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XG41MDQ5Olx0XHRcdC8qXG41MDUwOlx0XHRcdCAqIFdoZW4gd2UgYXJlIGluIHRoZSBpbnRlcnJ1cHQgY29udGV4dCwgaXQgaXMgaXJyZWxldmFudFxuNTA1MTpcdFx0XHQgKiB0byB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuIEl0IG1lYW5zIHRoYXQgYW55IG5vZGUgb2suXG41MDUyOlx0XHRcdCAqL1xuNTA1MzpcdFx0XHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiAhYWMtXHUwMDNlbm9kZW1hc2spXG41MDU0Olx0XHRcdFx0YWMtXHUwMDNlbm9kZW1hc2sgPSBcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG41MDU1Olx0XHRcdGVsc2VcbjUwNTY6XHRcdFx0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfQ1BVU0VUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgTlVNQSBzeXN0ZW1zOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbm9kZV96b25lbGlzdGAgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBub2RlX3pvbmVsaXN0KHByZWZlcnJlZF9uaWQsIGdmcF9tYXNrKWAgaXMgYmVpbmcgaW52b2tlZC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgZmlndXJpbmcgb3V0IHdoZXJlIHRvIGFsbG9jYXRlIG1lbW9yeSwgYW5kIHRoZSBgZ2ZwX21hc2tgIGlzIGNyaXRpY2FsIGZvciBkZWZpbmluZyB0aGUgYWxsb2NhdGlvbiB0eXBlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyB3aGVuIGBwcmVmZXJyZWRfbmlkYCBpcyBgTlVNQV9OT19OT0RFYCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBzaWduYWwgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBhIHByZWZlcnJlZCBOVU1BIG5vZGUuIEl0JiMzOTtzIG9mdGVuIHNldCB0byAtMS4gRG9lcyB0aGUgZnVuY3Rpb24ganVzdCBkZWZhdWx0IHRvIHNvbWUgcHJlLWNvbmZpZ3VyZWQgbm9kZT8gRG9lcyBpdCBmYWxsIGJhY2sgdG8gdGhlIGxvY2FsIG5vZGU/IE9yIGRvZXMgaXQgZW1wbG95IHNvbWUgZ2xvYmFsIHBvbGljeSwgcGVyaGFwcyBiYXNlZCBvbiBsb2FkIGJhbGFuY2luZyBvciBhdmFpbGFiaWxpdHkgYWNyb3NzIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBpbiB0aGlzIHNjZW5hcmlvIGJlY2F1c2UgaXQgZGljdGF0ZXMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgd2hlbiBOVU1BIGFmZmluaXR5IGlzbiYjMzk7dCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgd2hpY2ggaXMgYSB2ZXJ5IGNvbW1vbiBjYXNlLiBVbmRlcnN0YW5kaW5nIHRoZSBmYWxsYmFjayBiZWhhdmlvciBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYG5vZGVfem9uZWxpc3RgIGRvZXMgd2hlbiB0aGVyZSBpcyBubyBzcGVjaWZpZWQgbm9kZS4gSSBuZWVkIHRvIHJldmlldyBpdHMgYmVoYXZpb3IgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGZhbGxiYWNrIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfem9uZWxpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTIxMD1HZW5lcmFsXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxNC0gIFRoZSB6b25lcyBmb3IgdGhpcyBub2RlLiAgTm90IGFsbCBvZiB0aGUgem9uZXMgbWF5IGJlIHBvcHVsYXRlZCwgYnV0IGl0IGlzXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjE1OiAgdGhlIGZ1bGwgbGlzdC4gSXQgaXMgcmVmZXJlbmNlZCBieSB0aGlzIG5vZGUmIzM5O3Mgbm9kZV96b25lbGlzdHMgYXMgd2VsbCBhc1xuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIxNjogIG90aGVyIG5vZGUmIzM5O3Mgbm9kZV96b25lbGlzdHMuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE3LVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIxODpgYG5vZGVfem9uZWxpc3RzYGBcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMTktICBUaGUgbGlzdCBvZiBhbGwgem9uZXMgaW4gYWxsIG5vZGVzLiBUaGlzIGxpc3QgZGVmaW5lcyB0aGUgb3JkZXIgb2Ygem9uZXNcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMjA6ICB0aGF0IGFsbG9jYXRpb25zIGFyZSBwcmVmZXJyZWQgZnJvbS4gVGhlIGBgbm9kZV96b25lbGlzdHNgYCBpcyBzZXQgdXAgYnlcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjEtICBgYGJ1aWxkX3pvbmVsaXN0cygpYGAgaW4gYGBtbS9wYWdlX2FsbG9jLmNgYCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD05NT1SQU3lubPlnYfliIbphY3lnKjkuKTkuKroioLngrnkuIrnmoRhcm02NOacuuWZqOS4iu+8jOS9v+eUqCBgYG1vdmFibGVjb3JlPTgwJWBgIOWPguaVsFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjAzLeihqOekuuivpeiKgueCueeahOWMuuWfn+WIl+ihqOOAguW5tumdnuaJgOacieWMuuWfn+mDveWPr+iDveiiq+Whq+WFhe+8jOS9hui/meaYr1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMDQ65a6M5pW055qE5YiX6KGo44CC5a6D6KKr6K+l6IqC54K555qEbm9kZV96b25lbGlzdHPku6Xlj4rlhbblroPoioLngrnnmoRcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA1Om5vZGVfem9uZWxpc3Rz5byV55So44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIwNi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA3OmBgbm9kZV96b25lbGlzdHNgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMDgt6KGo56S65omA5pyJ6IqC54K55Lit5omA5pyJ5Yy65Z+f55qE5YiX6KGo44CC5q2k5YiX6KGo5a6a5LmJ5LqG5YiG6YWN5YaF5a2Y5pe26aaW6YCJ55qE5Yy65Z+fXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIwOTrpobrluo/jgIJgYG5vZGVfem9uZWxpc3RzYGAg5Zyo5qC45b+D5YaF5a2Y566h55CG57uT5p6E5Yid5aeL5YyW5pyf6Ze077yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxMC3nlLEgYGBtbS9wYWdlX2FsbG9jLmNgYCDkuK3nmoQgYGBidWlsZF96b25lbGlzdHMoKWBgXG4tLVxuZHJpdmVycy90dHkvc3lzcnEuYz0zODU9c3RhdGljIHZvaWQgbW9vbV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpXG4tLVxuZHJpdmVycy90dHkvc3lzcnEuYy0zODgtXHRzdHJ1Y3Qgb29tX2NvbnRyb2wgb2MgPSB7XG5kcml2ZXJzL3R0eS9zeXNycS5jOjM4OTpcdFx0LnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChmaXJzdF9tZW1vcnlfbm9kZSwgZ2ZwX21hc2spLFxuZHJpdmVycy90dHkvc3lzcnEuYy0zOTAtXHRcdC5ub2RlbWFzayA9IE5VTEwsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD0xNzk9c3RhdGljIGlubGluZSBnZnBfdCBnZnBfbmVzdGVkX21hc2soZ2ZwX3QgZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0xOTMtICovXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjE5NDpzdGF0aWMgaW5saW5lIHN0cnVjdCB6b25lbGlzdCAqbm9kZV96b25lbGlzdChpbnQgbmlkLCBnZnBfdCBmbGFncylcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMTk1LXtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MTk2Olx0cmV0dXJuIE5PREVfREFUQShuaWQpLVx1MDAzZW5vZGVfem9uZWxpc3RzICYjNDM7IGdmcF96b25lbGlzdChmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTE5Ny19XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDY3PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzAtXHQgKiB6b25lcyBtYXkgYmUgcG9wdWxhdGVkLCBidXQgaXQgaXMgdGhlIGZ1bGwgbGlzdC4gSXQgaXMgcmVmZXJlbmNlZCBieVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDcxOlx0ICogdGhpcyBub2RlJiMzOTtzIG5vZGVfem9uZWxpc3RzIGFzIHdlbGwgYXMgb3RoZXIgbm9kZSYjMzk7cyBub2RlX3pvbmVsaXN0cy5cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ3Mi1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ3NS1cdC8qXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0NzY6XHQgKiBub2RlX3pvbmVsaXN0cyBjb250YWlucyByZWZlcmVuY2VzIHRvIGFsbCB6b25lcyBpbiBhbGwgbm9kZXMuXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzctXHQgKiBHZW5lcmFsbHkgdGhlIGZpcnN0IHpvbmVzIHdpbGwgYmUgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUmIzM5O3Ncbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzktXHQgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTQ4MDpcdHN0cnVjdCB6b25lbGlzdCBub2RlX3pvbmVsaXN0c1tNQVhfWk9ORUxJU1RTXTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ4MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE5MDg9c3RhdGljIGlubGluZSBib29sIG1vdmFibGVfb25seV9ub2Rlcyhub2RlbWFza190ICpub2Rlcylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE5MjItXHRuaWQgPSBmaXJzdF9ub2RlKCpub2Rlcyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE5MjM6XHR6b25lbGlzdCA9IFx1MDAyNk5PREVfREFUQShuaWQpLVx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTkyNC1cdHogPSBmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgWk9ORV9OT1JNQUwsXHRub2Rlcyk7XG4tLVxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjg3LVxubW0vaHVnZXRsYi5jOjEyODg6XHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobmlkLCBnZnBfbWFzayk7XG5tbS9odWdldGxiLmMtMTI4OS1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTM4PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMjE3MC1cdFx0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoR0ZQX0tFUk5FTCk7XG5tbS9tZW1wb2xpY3kuYzoyMTcxOlx0XHR6b25lbGlzdCA9IFx1MDAyNk5PREVfREFUQShub2RlKS1cdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS107XG5tbS9tZW1wb2xpY3kuYy0yMTcyLVx0XHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hlc3Rfem9uZWlkeCxcbi0tXG5tbS9tZW1wb2xpY3kuYz0yOTgxPWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDUwLVx0XHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoXG5tbS9tZW1wb2xpY3kuYzozMDUxOlx0XHRcdFx0bm9kZV96b25lbGlzdCh0aGlzbmlkLCBHRlBfSElHSFVTRVIpLFxubW0vbWVtcG9saWN5LmMtMzA1Mi1cdFx0XHRcdGdmcF96b25lKEdGUF9ISUdIVVNFUiksXG4tLVxubW0vbW1faW5pdC5jPTc1PXZvaWQgX19pbml0IG1taW5pdF92ZXJpZnlfem9uZWxpc3Qodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtOTMtXHRcdFx0bGlzdGlkID0gaSAvIE1BWF9OUl9aT05FUztcbm1tL21tX2luaXQuYzo5NDpcdFx0XHR6b25lbGlzdCA9IFx1MDAyNnBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW2xpc3RpZF07XG5tbS9tbV9pbml0LmMtOTUtXHRcdFx0em9uZSA9IFx1MDAyNnBnZGF0LVx1MDAzZW5vZGVfem9uZXNbem9uZWlkXTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTAzNz1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MDQyLVx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jOjUwNDM6XHRhYy1cdTAwM2V6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QocHJlZmVycmVkX25pZCwgZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTUwNDQtXHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01NjYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2ZyZWVfem9uZV9wYWdlcyhpbnQgb2Zmc2V0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NjY4LVxubW0vcGFnZV9hbGxvYy5jOjU2Njk6XHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTCk7XG5tbS9wYWdlX2FsbG9jLmMtNTY3MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTgyNT1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU4MzAtXG5tbS9wYWdlX2FsbG9jLmM6NTgzMTpcdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcbm1tL3BhZ2VfYWxsb2MuYy01ODMyLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01ODQ3LSAqL1xubW0vcGFnZV9hbGxvYy5jOjU4NDg6c3RhdGljIHZvaWQgYnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG5tbS9wYWdlX2FsbG9jLmMtNTg0OS17XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU4NTItXG5tbS9wYWdlX2FsbG9jLmM6NTg1MzpcdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfTk9GQUxMQkFDS10uX3pvbmVyZWZzO1xubW0vcGFnZV9hbGxvYy5jLTU4NTQtXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUocGdkYXQsIHpvbmVyZWZzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTg2MD1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTg4Ni1cdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7XG5tbS9wYWdlX2FsbG9jLmM6NTg4NzpcdGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ2RhdCk7XG5tbS9wYWdlX2FsbG9jLmMtNTg4OC1cdHByX2luZm8oXCYjMzQ7RmFsbGJhY2sgb3JkZXIgZm9yIE5vZGUgJWQ6IFwmIzM0OywgbG9jYWxfbm9kZSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU5MDE9aW50IGxvY2FsX21lbW9yeV9ub2RlKGludCBub2RlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01OTA0LVxubW0vcGFnZV9hbGxvYy5jOjU5MDU6XHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qobm9kZV96b25lbGlzdChub2RlLCBHRlBfS0VSTkVMKSxcbm1tL3BhZ2VfYWxsb2MuYy01OTA2LVx0XHRcdFx0ICAgZ2ZwX3pvbmUoR0ZQX0tFUk5FTCksXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU5MTY9c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU5MjAtXG5tbS9wYWdlX2FsbG9jLmM6NTkyMTpcdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcbm1tL3BhZ2VfYWxsb2MuYy01OTIyLVx0bnJfem9uZXMgPSBidWlsZF96b25lcmVmc19ub2RlKHBnZGF0LCB6b25lcmVmcyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTc0ODU9c3RydWN0IHBhZ2UgKmFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc0OTUtcmV0cnk6XG5tbS9wYWdlX2FsbG9jLmM6NzQ5NjpcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChuaWQsIGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy03NDk3LVx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCxcbi0tXG5tbS9zbHViLmM9Mzg5Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9zbHViLmMtMzkzNS1cbm1tL3NsdWIuYzozOTM2Olx0XHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnBfZmxhZ3MpO1xubW0vc2x1Yi5jLTM5MzctXHRcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Qoem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hlc3Rfem9uZWlkeCkge1xuLS1cbm1tL3NsdWIuYz03MjU0PV9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy03MjcwLVx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jOjcyNzE6XHRcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcCk7XG5tbS9zbHViLmMtNzI3Mi1cdFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdCh6b25lLCB6LCB6b25lbGlzdCwgaGlnaGVzdF96b25laWR4KSB7XG4tLVxubW0vdm1zY2FuLmM9Njc1MD11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NzUtXHQgKi9cbm1tL3Ztc2Nhbi5jOjY3NzY6XHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgc2MuZ2ZwX21hc2spO1xubW0vdm1zY2FuLmMtNjc3Ny1cbi0tXG5tbS92bXNjYW4uYz03NTQ4PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTktXHR9O1xubW0vdm1zY2FuLmM6NzU2MDpcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7XG5tbS92bXNjYW4uYy03NTYxLVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzkwCgkJCQkJCQlvdXRwdXQ6IDEyOQoJCQkJCQkJdGhvdWdodHM6IDEwNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3aGVuIGxvb2tpbmcgYXQgdGhpcyBgbm9kZV96b25lbGlzdGAgZnVuY3Rpb24gaXMsICYjMzQ7QWhhLCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgYG5pZGAgaXMgYC0xYCAoTlVNQV9OT19OT0RFKSEmIzM0OyBUaGF0IGBOT0RFX0RBVEEoLTEpYCB3b3VsZCBkZWZpbml0ZWx5IGNhdXNlIHByb2JsZW1zLiBCdXQsIHdhaXQsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIHRoZSAqcG90ZW50aWFsKiBmb3IgdGhpcyBpc3N1ZTsgaXQmIzM5O3MgcmV2ZWFsaW5nIGFuICpleGlzdGluZyogb25lLiBUaGUgY29kZSB3YXMgYWxyZWFkeSB2dWxuZXJhYmxlISBJdCBzZWVtcyB0aGF0IGJlZm9yZSB0aGlzIHBhdGNoLCBjYWxsaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2ZvbGlvX2FsbG9jYCB3aXRoIGBOVU1BX05PX05PREVgIHdvdWxkIHVsdGltYXRlbHkgbGVhZCB0byB0aGlzIHByb2JsZW1hdGljIGFjY2Vzcy4KClRoZW4gSSByZWFsaXplZCB0aGF0IGBhbGxvY19wYWdlc19ub2RlYCwgd2hpY2ggaXMgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiwgY29ycmVjdGx5IGhhbmRsZWQgdGhlIGBOVU1BX05PX05PREVgIGNhc2UuIEl0IHdvdWxkIGNhbGwgYG51bWFfbWVtX2lkKClgIHdoZW4gYG5pZGAgd2FzIGBOVU1BX05PX05PREVgLiBIb3dldmVyLCAgYF9fZm9saW9fYWxsb2Nfbm9kZWAgYW5kIGl0cyB2YXJpYW50cywgY3J1Y2lhbGx5LCAqZGlkbiYjMzk7dCogaGF2ZSB0aGlzIGNoZWNrLiAgU28sIGFueSBjb2RlIHVzaW5nIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggYE5VTUFfTk9fTk9ERWAgd2FzIGFscmVhZHkgZXhwb3NlZCB0byB0aGlzIHBvdGVudGlhbCBjcmFzaC4gSSBjYW4gc2VlIHRoaXMgYnkgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCwgd2hpY2ggY29udGFpbnMgdGhpcyBleHBsaWNpdCBoYW5kbGluZywgaXQgY2FsbHMgYG51bWFfbWVtX2lkKClgIQoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGp1c3QgYSBjbGVhbnVwLiBJdCYjMzk7cyBtYWtpbmcgYGZvbGlvX2FsbG9jX25vZGVgIGJlaGF2ZSAqY29uc2lzdGVudGx5KiB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCBieSBpbmNvcnBvcmF0aW5nIHRoZSBgTlVNQV9OT19OT0RFYCBoYW5kbGluZyBkaXJlY3RseS4gSXQgYWxzbyByZW1vdmVzIHRoZSB3b3JrYXJvdW5kIGluIGBkcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNgIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGlzOiBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55ICpuZXcqIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiBJdCYjMzk7cyBzaW1wbHkgbW92aW5nIHRoZSBjaGVjayBpbnRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2U6CgpgYGBjCnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLAoJCW5vZGVtYXNrX3QgKm5vZGVtYXNrKQp7CglzdHJ1Y3QgcGFnZSAqcGFnZTsKCglpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpCgkJcHJlZmVycmVkX25pZCA9IG51bWFfbWVtX2lkKCk7CgoJd2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTsKCglwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCgkJCQkgICAgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpOwoJcmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpOwp9CmBgYAoKVGhpcyBpcywgZnJhbmtseSwgZXh0cmVtZWx5IHNpbXBsZS4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcuIE5vIG5ldyBjb21wbGV4IGxvZ2ljLCBubyBuZXcgZmVhdHVyZXMsIG5vIG5ldyBkcml2ZXJzLCBubyBuZXcgc3lzdGVtIGNhbGxzLiBKdXN0IGEgbWlub3IgQVBJIGNsZWFudXAgdGhhdCBjZW50cmFsaXplcyB0aGUgaGFuZGxpbmcgb2YgYE5VTUFfTk9fTk9ERWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBvdGhlciBmaWxlcyB0b3VjaGVkLiBUaGUgYG1tL21lbXBvbGljeS5oYCBjaGFuZ2UgaXMganVzdCBtb3ZpbmcgZGVjbGFyYXRpb25zLCB3aGljaCBpc24mIzM5O3QgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBvdGhlciBmaWxlcyDigJMgYG1tL2ZpbGVtYXAuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbmV0L3N1bnJwYy9zdmMuY2AsIGBkcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jYCDigJMgYXJlIHNpbXBseSByZW5hbWluZyBvciBpbmNsdWRpbmcgdGhlIGhlYWRlci4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyBzcGVjaWZpY2FsbHkuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29kZSBwYXRocyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gZXhlcmNpc2VkIGFscmVhZHksIGFuZCB0aGUgY29yZSBjaGFuZ2VzIGFyZSB2ZXJ5IG1pbmltYWwgYW5kIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIGZvbGlvIGFsbG9jYXRpb24gQVBJLiBJdCByZW5hbWVzIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHRvIGBmb2xpb19hbGxvY19ub2RlYCwgbW92ZXMgdGhlIGBOVU1BX05PX05PREVgIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCAobWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWApLCBhbmQgbW92ZXMgc29tZSBtZW1wb2xpY3kgZGVjbGFyYXRpb25zIHRvIGFuIGludGVybmFsIGhlYWRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgZmVhdHVyZXMsIG9yIGNvbXBsZXggY29kZSBwYXRocyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgZm9saW8gYWxsb2NhdGlvbiBBUEkuIEl0IHJlbmFtZXMgYF9fZm9saW9fYWxsb2Nfbm9kZWAgdG8gYGZvbGlvX2FsbG9jX25vZGVgLCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgIChtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCksIGFuZCBtb3ZlcyBzb21lIG1lbXBvbGljeSBkZWNsYXJhdGlvbnMgdG8gYW4gaW50ZXJuYWwgaGVhZGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCBmZWF0dXJlcywgb3IgY29tcGxleCBjb2RlIHBhdGhzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjM0LjgxNDUxNTUyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjIwOTM5NjcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBhbGxvY2F0aW9uIEFQSS4gSXQgcmVuYW1lcyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAsIG1vdmVzIHRoZSBgTlVNQV9OT19OT0RFYCBjaGVjayBpbnRvIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgKG1ha2luZyBpdCBjb25zaXN0ZW50IHdpdGggYGFsbG9jX3BhZ2VzX25vZGVgKSwgYW5kIG1vdmVzIHNvbWUgbWVtcG9saWN5IGRlY2xhcmF0aW9ucyB0byBhbiBpbnRlcm5hbCBoZWFkZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMsIGZlYXR1cmVzLCBvciBjb21wbGV4IGNvZGUgcGF0aHMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyNzozNC44MTQ1MjEyMDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDE2NTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjMjA0MTJiZjViNzMyMjk5NjNkOTIyZWE4ZmYyYjBjZWJkMWQ0OTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTk6Mjc6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDg4MTNkNWQ3ZWIwYzFmLi45Y2RlOTljMjU5NjM5NyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE3MDY4LDYgKzE3MDY4LDcgQEAgRjpcXHRpbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbiBGOlxcdGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG4gRjpcXHRtbS9tZW1wb2xpY3kuY1xcbitGOlxcdG1tL21lbXBvbGljeS5oXFxuIEY6XFx0bW0vbWlncmF0ZS5jXFxuIEY6XFx0bW0vbWlncmF0ZV9kZXZpY2UuY1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jIGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jXFxuaW5kZXggM2JhYjE3NWQ4NTU3MWEuLjQ3ZTA3NTlmMGUwYWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xcbkBAIC01NiwxNCArNTYsNyBAQCB2b2lkICppb21tdV9hbGxvY19wYWdlc19ub2RlX3N6KGludCBuaWQsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUpXFxuIFxcdCAqL1xcbiBcXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIF9fZm9saW9fYWxsb2Nfbm9kZSgpIGRvZXMgbm90IGhhbmRsZSBOVU1BX05PX05PREUgbGlrZVxcbi1cXHQgKiBhbGxvY19wYWdlc19ub2RlKCkgZGlkLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXFxuLVxcdFxcdG5pZCA9IG51bWFfbWVtX2lkKCk7XFxuLVxcbi1cXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShnZnAgfCBfX0dGUF9aRVJPLCBvcmRlciwgbmlkKTtcXG4rXFx0Zm9saW8gPSBmb2xpb19hbGxvY19ub2RlKGdmcCB8IF9fR0ZQX1pFUk8sIG9yZGVyLCBuaWQpO1xcbiBcXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY1xcbmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jXFxuKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY1xcbkBAIC0zODQsNyArMzg0LDcgQEAgc3RhdGljIGludCByZWRpcmVjdF90YWJsZV9pbml0KHN0cnVjdCByZWRpcmVjdF9kZXNjICppcmRlKVxcbiBcXHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcbi1cXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElSRF9UQUJMRV9QQUdFX09SREVSLCBpcmRlLVxcdTAwM2Vub2RlKTtcXG4gXFx0aWYgKCFmb2xpbykge1xcbiBcXHRcXHRwcl9lcnIoXFxcIk5vZGUgWyVkXSByZWRpcmVjdCB0YWJsZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxcXG5cXFwiLCBpcmRlLVxcdTAwM2Vub2RlKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW50IHJlZGlyZWN0X3F1ZXVlX2luaXQoc3RydWN0IHJlZGlyZWN0X2Rlc2MgKmlyZGUpXFxuIFxcdHN0cnVjdCByZWRpcmVjdF9xdWV1ZSAqaW52X3F1ZXVlID0gXFx1MDAyNmlyZGUtXFx1MDAzZWludl9xdWV1ZTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFxuLVxcdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJTlZfUVVFVUVfUEFHRV9PUkRFUiwgaXJkZS1cXHUwMDNlbm9kZSk7XFxuK1xcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtXFx1MDAzZW5vZGUpO1xcbiBcXHRpZiAoIWZvbGlvKSB7XFxuIFxcdFxcdHByX2VycihcXFwiTm9kZSBbJWRdIGludmFsaWQgcXVldWUgYWxsb2MgcGFnZXMgZmFpbGVkIVxcXFxuXFxcIiwgaXJkZS1cXHUwMDNlbm9kZSk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxcbmluZGV4IDg3MmJjNTNmMzJlYzg3Li4xN2MxNGI4Y2EwMDdkYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaFxcbkBAIC0xMSw3ICsxMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHZtX2FyZWFfc3RydWN0O1xcbi1zdHJ1Y3QgbWVtcG9saWN5O1xcbiBcXG4gLyogSGVscGVyIG1hY3JvIHRvIGF2b2lkIGdmcCBmbGFncyBpZiB0aGV5IGFyZSB0aGUgZGVmYXVsdCBvbmUgKi9cXG4gI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGJcXG5AQCAtMjA0LDEwICsyMDMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XFxuICNlbmRpZlxcbiBcXG4tc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxuLVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tI2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuLVxcbiB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuQEAgLTI1MiwxNSArMjQ3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHdhcm5faWZfbm9kZV9vZmZsaW5lKGludCB0aGlzX25vZGUsIGdmcF90IGdmcF9tYXNrKVxcbiBcXHRkdW1wX3N0YWNrKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKVxcbi17XFxuLVxcdHdhcm5faWZfbm9kZV9vZmZsaW5lKG5pZCwgZ2ZwKTtcXG4tXFxuLVxcdHJldHVybiBfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIE5VTEwpO1xcbi19XFxuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpO1xcbiBcXG4tI2RlZmluZSAgX19mb2xpb19hbGxvY19ub2RlKC4uLilcXHRcXHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rI2RlZmluZSAgZm9saW9fYWxsb2Nfbm9kZSguLi4pXFx0XFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4gLypcXG4gICogQWxsb2NhdGUgcGFnZXMsIHByZWZlcnJpbmcgdGhlIG5vZGUgZ2l2ZW4gYXMgbmlkLiBXaGVuIG5pZCA9PSBOVU1BX05PX05PREUsXFxuQEAgLTI3NCw4ICsyNjMsNiBAQCBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlclxcbiAjaWZkZWYgQ09ORklHX05VTUFcXG4gc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4tc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpO1xcbiBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIpO1xcbiAjZWxzZVxcbkBAIC0yODUsMTIgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyXFxuIH1cXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSk7XFxuLX1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZClcXG4te1xcbi1cXHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIpO1xcbitcXHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xcbiB9XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgaW50IG9yZGVyLFxcbiBcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbkBAIC0zMDEsNyArMjgzLDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXFxuIFxcbiAjZGVmaW5lIGFsbG9jX3BhZ2VzKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxcbiAjZGVmaW5lIGZvbGlvX2FsbG9jKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxcbi0jZGVmaW5lIGZvbGlvX2FsbG9jX21wb2woLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4gI2RlZmluZSB2bWFfYWxsb2NfZm9saW8oLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKHZtYV9hbGxvY19mb2xpb19ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4gI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMClcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggMWRiYjRjNmY4MjRlOWEuLjFjZjkxOTcwYTY4NTAxIDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC01Miw2ICs1Miw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWVtcG9saWN5LmhcXFwiXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbWFwLmhcXHUwMDNlXFxuQEAgLTYzLDYgKzY0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbW1hbi5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcIm1lbXBvbGljeS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiBcXG4gLypcXG5AQCAtMTAwNSw3ICsxMDA3LDcgQEAgc3RydWN0IGZvbGlvICpmaWxlbWFwX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0ZG8ge1xcbiBcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbiBcXHRcXHRcXHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xcbi1cXHRcXHRcXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7XFxuK1xcdFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7XFxuIFxcdFxcdH0gd2hpbGUgKCFmb2xpbyBcXHUwMDI2XFx1MDAyNiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG4gXFxuIFxcdFxcdHJldHVybiBmb2xpbztcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDU3MjBmN2Y1NGQ5NDJmLi4zMWM0ZTlmNDliNWU5ZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTExOSw2ICsxMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm1lbXBvbGljeS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiBcXG4gLyogSW50ZXJuYWwgZmxhZ3MgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQ4MGZlNGM1NTk3ODZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL21lbXBvbGljeS5oXFxuQEAgLTAsMCArMSwzMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBtbS1pbnRlcm5hbCBBUEkgZm9yIG1lbXBvbGljeS5jLiBQdWJsaWMgQVBJIGxpdmVzIGluXFxuKyAqIGluY2x1ZGUvbGludXgvbWVtcG9saWN5LmguXFxuKyAqL1xcbisjaWZuZGVmIF9fTU1fTUVNUE9MSUNZX0hcXG4rI2RlZmluZSBfX01NX01FTVBPTElDWV9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4rXFxuKyNpZmRlZiBDT05GSUdfTlVNQVxcbitzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbitcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNkZWZpbmUgZm9saW9fYWxsb2NfbXBvbCguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoX19WQV9BUkdTX18pKVxcbitcXG4rdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbisjZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbitcXG4rI2VuZGlmIC8qIF9fTU1fTUVNUE9MSUNZX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggMjIyYzhjMTVmNzgyZjcuLmI3ODM2YjAyZjMyZGJlIDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0yNjgyLDcgKzI2ODIsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taXNwbGFjZWRfZHN0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxcbiBcXHRcXHRcXHRfX0dGUF9OT1dBUk47XFxuIFxcdFxcdGdmcCBcXHUwMDI2PSB+X19HRlBfUkVDTEFJTTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub2RlKGdmcCwgb3JkZXIsIG5pZCk7XFxuK1xcdHJldHVybiBmb2xpb19hbGxvY19ub2RlKGdmcCwgb3JkZXIsIG5pZCk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDM3YTNjMWMwMGUxNjk2Li5mZjg1MTVlMTczZTFlZiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtNTQzNSwxMSArNTQzNSwyMyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcXG4gc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbiB7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcbitcXHRpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpXFxuK1xcdFxcdHByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpO1xcbitcXG4rXFx0d2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTtcXG4rXFxuK1xcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0ICAgIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0cmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0woX19mb2xpb19hbGxvY19ub3Byb2YpO1xcbitcXG4rc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcXG4re1xcbitcXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKTtcXG4gXFxuIC8qXFxuICAqIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zLiBOZXZlciB1c2Ugd2l0aCBfX0dGUF9ISUdITUVNIGJlY2F1c2UgdGhlIHJldHVybmVkXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuaCBiL21tL3BhZ2VfYWxsb2MuaFxcbmluZGV4IGI5MjU5ZGVkZGI1OWQ3Li40MDliZTMxODk4YWU3NyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmhcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmhcXG5AQCAtMjU4LDYgKzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfblxcbiBcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4gI2RlZmluZSBfX2FsbG9jX3BhZ2VzKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuIFxcbitzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4rXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbisjZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rXFxuIGV4dGVybiB2b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKTtcXG4gZXh0ZXJuIHZvaWQgem9uZV9wY3BfZGlzYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuIGV4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjY5ZjU2MTMzMmJiOTM0IDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTQxLDYgKzQxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBmaWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pdmVyc2lvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5pY29kZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwibWVtcG9saWN5LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuIFxcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggNWJlODI1OTExZTY0NWUuLjhjY2QwM2MzOWE0MDcxIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWVtcG9saWN5LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuY1xcbmluZGV4IGFlOWVjNGJmMzRmNzI5Li43NDM1MGEyZTA3MDM2ZSAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXFxuKysrIGIvbmV0L3N1bnJwYy9zdmMuY1xcbkBAIC03MTEsNyArNzExLDcgQEAgc3ZjX3ByZXBhcmVfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y19wb29sICpwb29sLCBpbnQgbm9kZSlcXG4gXFx0cnFzdHAtXFx1MDAzZXJxX3NlcnZlciA9IHNlcnY7XFxuIFxcdHJxc3RwLVxcdTAwM2VycV9wb29sID0gcG9vbDtcXG4gXFxuLVxcdHJxc3RwLVxcdTAwM2VycV9zY3JhdGNoX2ZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xcbitcXHRycXN0cC1cXHUwMDNlcnFfc2NyYXRjaF9mb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCwgMCwgbm9kZSk7XFxuIFxcdGlmICghcnFzdHAtXFx1MDAzZXJxX3NjcmF0Y2hfZm9saW8pXFxuIFxcdFxcdGdvdG8gb3V0X2Vub21lbTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjM1LjcwOTQyODEzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MzE0NDc4Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIGZvbGlvIGFsbG9jYXRpb24gQVBJLiBJdCByZW5hbWVzIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHRvIGBmb2xpb19hbGxvY19ub2RlYCwgbW92ZXMgdGhlIGBOVU1BX05PX05PREVgIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCAobWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWApLCBhbmQgbW92ZXMgc29tZSBtZW1wb2xpY3kgZGVjbGFyYXRpb25zIHRvIGFuIGludGVybmFsIGhlYWRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgZmVhdHVyZXMsIG9yIGNvbXBsZXggY29kZSBwYXRocyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGMyMDQxMmJmNWI3MzIyOTk2M2Q5MjJlYThmZjJiMGNlYmQxZDQ5MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE5OjI3OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggODgxM2Q1ZDdlYjBjMWYuLjljZGU5OWMyNTk2Mzk3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcwNjgsNiArMTcwNjgsNyBAQCBGOlx0aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbiBGOlx0bW0vbWVtcG9saWN5LmNcbitGOlx0bW0vbWVtcG9saWN5LmhcbiBGOlx0bW0vbWlncmF0ZS5jXG4gRjpcdG1tL21pZ3JhdGVfZGV2aWNlLmNcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNcbmluZGV4IDNiYWIxNzVkODU1NzFhLi40N2UwNzU5ZjBlMGFlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xuKysrIGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jXG5AQCAtNTYsMTQgKzU2LDcgQEAgdm9pZCAqaW9tbXVfYWxsb2NfcGFnZXNfbm9kZV9zeihpbnQgbmlkLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxuIFx0ICovXG4gXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbiBcbi1cdC8qXG4tXHQgKiBfX2ZvbGlvX2FsbG9jX25vZGUoKSBkb2VzIG5vdCBoYW5kbGUgTlVNQV9OT19OT0RFIGxpa2Vcbi1cdCAqIGFsbG9jX3BhZ2VzX25vZGUoKSBkaWQuXG4tXHQgKi9cbi1cdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxuLVx0XHRuaWQgPSBudW1hX21lbV9pZCgpO1xuLVxuLVx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7XG4rXHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7XG4gXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbkBAIC0zODQsNyArMzg0LDcgQEAgc3RhdGljIGludCByZWRpcmVjdF90YWJsZV9pbml0KHN0cnVjdCByZWRpcmVjdF9kZXNjICppcmRlKVxuIFx0dW5zaWduZWQgbG9uZyAqYml0bWFwO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbi1cdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJUkRfVEFCTEVfUEFHRV9PUkRFUiwgaXJkZS1cdTAwM2Vub2RlKTtcbitcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHByX2VycihcIk5vZGUgWyVkXSByZWRpcmVjdCB0YWJsZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxuXCIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW50IHJlZGlyZWN0X3F1ZXVlX2luaXQoc3RydWN0IHJlZGlyZWN0X2Rlc2MgKmlyZGUpXG4gXHRzdHJ1Y3QgcmVkaXJlY3RfcXVldWUgKmludl9xdWV1ZSA9IFx1MDAyNmlyZGUtXHUwMDNlaW52X3F1ZXVlO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbi1cdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJTlZfUVVFVUVfUEFHRV9PUkRFUiwgaXJkZS1cdTAwM2Vub2RlKTtcbitcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHByX2VycihcIk5vZGUgWyVkXSBpbnZhbGlkIHF1ZXVlIGFsbG9jIHBhZ2VzIGZhaWxlZCFcXG5cIiwgaXJkZS1cdTAwM2Vub2RlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IDg3MmJjNTNmMzJlYzg3Li4xN2MxNGI4Y2EwMDdkYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbkBAIC0xMSw3ICsxMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuIFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcbi1zdHJ1Y3QgbWVtcG9saWN5O1xuIFxuIC8qIEhlbHBlciBtYWNybyB0byBhdm9pZCBnZnAgZmxhZ3MgaWYgdGhleSBhcmUgdGhlIGRlZmF1bHQgb25lICovXG4gI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGJcbkBAIC0yMDQsMTAgKzIwMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpIHsgfVxuICNlbmRpZlxuIFxuLXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLVx0XHRub2RlbWFza190ICpub2RlbWFzayk7XG4tI2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcdFx0XHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tXG4gdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbiBcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5AQCAtMjUyLDE1ICsyNDcsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2Fybl9pZl9ub2RlX29mZmxpbmUoaW50IHRoaXNfbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRkdW1wX3N0YWNrKCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmVcbi1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXG4te1xuLVx0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnApO1xuLVxuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4tfVxuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpO1xuIFxuLSNkZWZpbmUgIF9fZm9saW9fYWxsb2Nfbm9kZSguLi4pXHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuKyNkZWZpbmUgIGZvbGlvX2FsbG9jX25vZGUoLi4uKVx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gLypcbiAgKiBBbGxvY2F0ZSBwYWdlcywgcHJlZmVycmluZyB0aGUgbm9kZSBnaXZlbiBhcyBuaWQuIFdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcbkBAIC0yNzQsOCArMjYzLDYgQEAgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXJcbiAjaWZkZWYgQ09ORklHX05VTUFcbiBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi1cdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpO1xuIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcik7XG4gI2Vsc2VcbkBAIC0yODUsMTIgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyXG4gfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xuLX1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKVxuLXtcbi1cdHJldHVybiBmb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlcik7XG4rXHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xuIH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlcixcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbkBAIC0zMDEsNyArMjgzLDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXG4gXG4gI2RlZmluZSBhbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiAjZGVmaW5lIGZvbGlvX2FsbG9jKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuLSNkZWZpbmUgZm9saW9fYWxsb2NfbXBvbCguLi4pXHRcdFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoX19WQV9BUkdTX18pKVxuICNkZWZpbmUgdm1hX2FsbG9jX2ZvbGlvKC4uLilcdFx0XHRhbGxvY19ob29rcyh2bWFfYWxsb2NfZm9saW9fbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbiAjZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21hc2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKVxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggMWRiYjRjNmY4MjRlOWEuLjFjZjkxOTcwYTY4NTAxIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC01Miw2ICs1Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwibWVtcG9saWN5LmhcIlxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbWFwLmhcdTAwM2VcbkBAIC02Myw2ICs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21tYW4uaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwibWVtcG9saWN5LmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbiBcbiAvKlxuQEAgLTEwMDUsNyArMTAwNyw3IEBAIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGRvIHtcbiBcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuIFx0XHRcdG4gPSBjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKCk7XG4tXHRcdFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xuK1x0XHRcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7XG4gXHRcdH0gd2hpbGUgKCFmb2xpbyBcdTAwMjZcdTAwMjYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG4gXG4gXHRcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1NzIwZjdmNTRkOTQyZi4uMzFjNGU5ZjQ5YjVlOWUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0xMTksNiArMTE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJtZW1wb2xpY3kuaFwiXG4gI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuIFxuIC8qIEludGVybmFsIGZsYWdzICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kODBmZTRjNTU5Nzg2ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbW0vbWVtcG9saWN5LmhcbkBAIC0wLDAgKzEsMzEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogbW0taW50ZXJuYWwgQVBJIGZvciBtZW1wb2xpY3kuYy4gUHVibGljIEFQSSBsaXZlcyBpblxuKyAqIGluY2x1ZGUvbGludXgvbWVtcG9saWN5LmguXG4rICovXG4rI2lmbmRlZiBfX01NX01FTVBPTElDWV9IXG4rI2RlZmluZSBfX01NX01FTVBPTElDWV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuK1xuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpXG4re1xuK1x0cmV0dXJuIGZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyKTtcbit9XG4rI2VuZGlmXG4rXG4rI2RlZmluZSBmb2xpb19hbGxvY19tcG9sKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19tcG9sX25vcHJvZihfX1ZBX0FSR1NfXykpXG4rXG4rdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbitcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG4rI2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbitcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG4rXG4rI2VuZGlmIC8qIF9fTU1fTUVNUE9MSUNZX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDIyMmM4YzE1Zjc4MmY3Li5iNzgzNmIwMmYzMmRiZSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtMjY4Miw3ICsyNjgyLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlzcGxhY2VkX2RzdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0XHRfX0dGUF9OT1dBUk47XG4gXHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9SRUNMQUlNO1xuIFx0fVxuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZShnZnAsIG9yZGVyLCBuaWQpO1xuK1x0cmV0dXJuIGZvbGlvX2FsbG9jX25vZGUoZ2ZwLCBvcmRlciwgbmlkKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDM3YTNjMWMwMGUxNjk2Li5mZjg1MTVlMTczZTFlZiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTQzNSwxMSArNTQzNSwyMyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXG4ge1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcbi1cdFx0XHRcdFx0cHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpXG4rXHRcdHByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpO1xuK1xuK1x0d2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTtcbitcbitcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcbitcdFx0XHRcdCAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4gXHRyZXR1cm4gcGFnZV9ybWFwcGFibGVfZm9saW8ocGFnZSk7XG4gfVxuLUVYUE9SVF9TWU1CT0woX19mb2xpb19hbGxvY19ub3Byb2YpO1xuK1xuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXG4re1xuK1x0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4rfVxuK0VYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YpO1xuIFxuIC8qXG4gICogQ29tbW9uIGhlbHBlciBmdW5jdGlvbnMuIE5ldmVyIHVzZSB3aXRoIF9fR0ZQX0hJR0hNRU0gYmVjYXVzZSB0aGUgcmV0dXJuZWRcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmggYi9tbS9wYWdlX2FsbG9jLmhcbmluZGV4IGI5MjU5ZGVkZGI1OWQ3Li40MDliZTMxODk4YWU3NyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuaFxuKysrIGIvbW0vcGFnZV9hbGxvYy5oXG5AQCAtMjU4LDYgKzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfblxuIFx0XHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiAjZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbitzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbitcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuKyNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuK1xuIGV4dGVybiB2b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKTtcbiBleHRlcm4gdm9pZCB6b25lX3BjcF9kaXNhYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbiBleHRlcm4gdm9pZCB6b25lX3BjcF9lbmFibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1MDcxMTc3MDU5YTk2NC4uNjlmNTYxMzMyYmI5MzQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtNDEsNiArNDEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBmaWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW5pY29kZS5oXHUwMDNlXG4rI2luY2x1ZGUgXCJtZW1wb2xpY3kuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNWJlODI1OTExZTY0NWUuLjhjY2QwM2MzOWE0MDcxIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbisjaW5jbHVkZSBcIm1lbXBvbGljeS5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jXG5pbmRleCBhZTllYzRiZjM0ZjcyOS4uNzQzNTBhMmUwNzAzNmUgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4rKysgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtNzExLDcgKzcxMSw3IEBAIHN2Y19wcmVwYXJlX3RocmVhZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCwgaW50IG5vZGUpXG4gXHRycXN0cC1cdTAwM2VycV9zZXJ2ZXIgPSBzZXJ2O1xuIFx0cnFzdHAtXHUwMDNlcnFfcG9vbCA9IHBvb2w7XG4gXG4tXHRycXN0cC1cdTAwM2VycV9zY3JhdGNoX2ZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xuK1x0cnFzdHAtXHUwMDNlcnFfc2NyYXRjaF9mb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCwgMCwgbm9kZSk7XG4gXHRpZiAoIXJxc3RwLVx1MDAzZXJxX3NjcmF0Y2hfZm9saW8pXG4gXHRcdGdvdG8gb3V0X2Vub21lbTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjM1LjcwOTQyOTk0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzOTI3OTI2NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9saW8gQWxsb2NhdGlvbiBBUEkgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0J3MgYSByZWZhY3RvciwgcGxhaW4gYW5kIHNpbXBsZS4gVGhleSdyZSByZW5hbWluZyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAgYW5kIG1vdmluZyB0aGUgYE5VTUFfTk9fTk9ERWAgbG9naWMgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgLiBJdCBhbHNvIGxvb2tzIGxpa2UgYGZvbGlvX2FsbG9jX21wb2xgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgIGFyZSBiZWluZyBzaHVmZmxlZCBpbnRvIGEgbmV3IGludGVybmFsIGhlYWRlciwgYG1tL21lbXBvbGljeS5oYC4gTm8gYmlnIHN1cnByaXNlcyB0aGVyZSwganVzdCB0aWR5aW5nIHRoaW5ncyB1cC5cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbiBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCwgYGRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNgLCBgbW0vZmlsZW1hcC5jYCwgYG1tL21pZ3JhdGUuY2AgYW5kIGBuZXQvc3VucnBjL3N2Yy5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWUsIHJlcGxhY2luZyB0aGUgb2xkIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggdGhlIG5ldyBgZm9saW9fYWxsb2Nfbm9kZWAgaW4gdGhvc2UgbG9jYXRpb25zLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gaXMgY2hhbmdlZCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHRocm91Z2ggYGluY2x1ZGUvbGludXgvZ2ZwLmhgLlxuXG5UaGUgY29yZSBsb2dpYyBjaGFuZ2UgaXMgcmVhbGx5IHRoZSBoYW5kbGluZyBvZiBgTlVNQV9OT19OT0RFYC4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBgTlVNQV9OT19OT0RFYCB3YXMgYmVpbmcgaGFuZGxlZCBhdCB0aGUgY2FsbCBzaXRlIG9mIGBfX2ZvbGlvX2FsbG9jX25vZGVgLCBvciB3YXMgaXQgZGVmaW5lZCBhdCBhbGw/IFRoZSBwYXRjaCBtb3ZlcyB0aGlzIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCBpdHNlbGYsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAuIE5vdywgYGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYCBpcyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsLCBtYWtpbmcgdGhlIGNvZGUgY2xlYW5lci5cblxuQmVmb3JlLCBgZm9saW9fYWxsb2Nfbm9kZWAgd2FzIGEgbWFjcm8gdGhhdCBjYWxsZWQgYF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgLiBOb3cgYGZvbGlvX2FsbG9jX25vZGVgIGRpcmVjdGx5IGNhbGxzIGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAuXG5gX19mb2xpb19hbGxvY19ub3Byb2ZgIG5vdyBoYW5kbGVzIHRoZSBgTlVNQV9OT19OT0RFYCBjaGVjayBhbmQgYHdhcm5faWZfbm9kZV9vZmZsaW5lYC5cblxuU28sIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBpcyB0aGVyZSByZWFsbHkgYW55IGZ1bmN0aW9uYWwgY2hhbmdlPyBUaGUgY29yZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSBpdHNlbGYgc2VlbXMgdW50b3VjaGVkLiBJdCdzIGp1c3QgYW4gQVBJIGNoYW5nZSB3aXRoIHNvbWUgbG9naWMgcmVhcnJhbmdlbWVudC4gVGhlIHBvdGVudGlhbCBmb3IgbmV3IGJ1Z3MgaGVyZSBzZWVtcyBwcmV0dHkgbG93LCBnaXZlbiB0aGF0IGl0J3MganVzdCByZW9yZ2FuaXppbmcgZXhpc3RpbmcgY29kZSBhbmQgY2VudHJhbGl6aW5nIHRoYXQgYE5VTUFfTk9fTk9ERWAgY2hlY2suIFdoaWxlIEknZCBuZXZlciBydWxlIG91dCB0aGUgKnBvc3NpYmlsaXR5KiBvZiBhIHN1YnRsZSBpc3N1ZSwgaXQgZG9lc24ndCBqdW1wIG91dCBhdCBtZSBhcyBhIHByaW1lIHRhcmdldCBmb3IgaW50ZW5zaXZlIGZ1enppbmcgZWZmb3J0cy4gSXQgbWlnaHQgc3RpbGwgYmUgd29ydGggc29tZSBjdXJzb3J5IGZ1enppbmcsIGJ1dCBpdCBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBwcmlvcml0eS4gV2Ugd291bGQgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjU5LjYzNzM1OTIxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE5NjI4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fYWxsb2Nfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz01NDMzPUVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDM0LVxcbm1tL3BhZ2VfYWxsb2MuYzo1NDM1OnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDM2LVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU0NTA9c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcXG5tbS9wYWdlX2FsbG9jLmMtNTQ1MS17XFxubW0vcGFnZV9hbGxvYy5jOjU0NTI6XFx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NTMtfVxcbi0tXFxubW0vcGFnZV9hbGxvYy5oPTI1Nz1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5oLTI2MC1cXG5tbS9wYWdlX2FsbG9jLmg6MjYxOnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuaC0yNjItXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbm1tL3BhZ2VfYWxsb2MuaDoyNjM6I2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxubW0vcGFnZV9hbGxvYy5oLTI2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjg6MDIuNTU2OTk0NzAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0ODc1NDY3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBGb2xpbyBBbGxvY2F0aW9uIEZsb3cqKlxuXG5SaWdodCwgc28gSSdtIHRyYWNpbmcgdGhlIGZvbGlvIGFsbG9jYXRpb24gcGF0aC4gSXQgbG9va3MgbGlrZSBgX19mb2xpb19hbGxvY19ub3Byb2ZgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBkaXJlY3RseSBieSBgZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgIGFuZCBhbHNvIGJ5IGBfX2ZvbGlvX2FsbG9jYC4gSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBfX2ZvbGlvX2FsbG9jYCBpcyBhY3R1YWxseSBhIG1hY3JvLiBUaGUgbWFjcm8gZXhwYW5kcyB0byBjYWxsIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAuIFRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXI7IGEgbWFjcm8gYWJzdHJhY3Rpb24gaXMgaW4gcGxhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBjaGFpbiAqYmVnaW4qPyBXaG8ncyB0aGUgY2FsbGluZyBmdW5jdGlvbiBvZiBgX19mb2xpb19hbGxvY2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludCB0byB0aGlzIHdob2xlIHByb2Nlc3MsIHRoZSByb290IG9mIHRoZSBjYWxscy4gVHJhY2luZyB0aGF0IGJhY2sgaXMgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjg6MzIuMDQ0NTQ0NTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTY5MTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19hbGxvY1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xMjM4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNDUtXFxubW0va2h1Z2VwYWdlZC5jOjEyNDY6XFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jKGdmcCwgb3JkZXIsIG5vZGUsIFxcdTAwMjZjYy1cXHUwMDNlYWxsb2Nfbm1hc2spO1xcbm1tL2todWdlcGFnZWQuYy0xMjQ3LVxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTk5PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTIyMzQtXFxubW0vbWlncmF0ZS5jOjIyMzU6XFx0cmV0dXJuIF9fZm9saW9fYWxsb2MoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIG10Yy1cXHUwMDNlbm1hc2spO1xcbm1tL21pZ3JhdGUuYy0yMjM2LX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuaD0yNjE9c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5oLTI2Mi1cXHRcXHRub2RlbWFza190ICpub2RlbWFzayk7XFxubW0vcGFnZV9hbGxvYy5oOjI2MzojZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5tbS9wYWdlX2FsbG9jLmgtMjY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyODozNS40MDE0NjgzNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAzODEyMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBfX2ZvbGlvX2FsbG9jYCBDYWxsIFNpdGUgYW5kIE5VTUEgTm9kZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgX19mb2xpb19hbGxvY2AgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGVkIGJ5IGBhbGxvY19jaGFyZ2VfZm9saW9gIGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBhbHNvIGJ5IGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCwgcHJpb3IgdG8gdGhpcyBwYXRjaCwgYF9fZm9saW9fYWxsb2NgIHdhc24ndCBleHBsaWNpdGx5IGhhbmRsaW5nIHRoZSBgTlVNQV9OT19OT0RFYCB2YWx1ZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjYWxsZXJzIHdlcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgd2VyZSBlaXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zLCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBvciBgYWxsb2NfbWlncmF0aW9uX3RhcmdldGAsICpldmVuKiBwYXNzaW5nIGBOVU1BX05PX05PREVgPyBMZXQncyBicmVhayBpdCBkb3duLi4uIGBhbGxvY19jaGFyZ2VfZm9saW9gIHNlZW1zIHRvIHBhc3MgYSBgbm9kZWAgdmFsdWUsIHdoaWxlIGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBwYXNzZXMgYSBgbmlkYC4gSWYgZWl0aGVyIHdhcyBhY3R1YWxseSBzZW5kaW5nIGBOVU1BX05PX05PREVgIGRvd24gdGhlIGxpbmUsIEknZCBleHBlY3QgaXQgdG8gcmVhY2ggYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gVGhhdCBmdW5jdGlvbiAqc2hvdWxkKiBoYW5kbGUgdGhlIGBOVU1BX05PX05PREVgIHNjZW5hcmlvLCByaWdodD9cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQncyB3cm9uZy4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgZnVuY3Rpb24gaW4gYG1tL3BhZ2VfYWxsb2MuY2AuLi4ganVzdCB0byBiZSBzdXJlLiBJdCdzIGNydWNpYWwgdGhhdCBJIHZlcmlmeSB0aGlzIHBpZWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI4OjQwLjQwNTI4MjIzMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2MDM0MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfcGFnZXNfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz01MTA2PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MjQwLWZhaWxlZDpcXG5tbS9wYWdlX2FsbG9jLmM6NTI0MTpcXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyNDItXFx0aWYgKHBhZ2UpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTQxMD1FWFBPUlRfU1lNQk9MKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTU0MTEtXFxubW0vcGFnZV9hbGxvYy5jOjU0MTI6c3RydWN0IHBhZ2UgKl9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDEzLVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU0MjQ9c3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQzMC1cXG5tbS9wYWdlX2FsbG9jLmM6NTQzMTpcXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDMyLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01NDM1PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0NDQtXFxubW0vcGFnZV9hbGxvYy5jOjU0NDU6XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCB8IF9fR0ZQX0NPTVAsIG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDQ2LVxcdFxcdFxcdFxcdCAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmg9MjU1PXZvaWQgZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbm1tL3BhZ2VfYWxsb2MuaC0yNTYtXFxubW0vcGFnZV9hbGxvYy5oOjI1NzpzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuaC0yNTgtXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxubW0vcGFnZV9hbGxvYy5oOjI1OTojZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5tbS9wYWdlX2FsbG9jLmgtMjYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyODo0Mi43MDEzMjEwOTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg3NTE5NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdvcmtpbmdzIG9mIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgbm8gZG91YnQsIGFuZCBpdCdzIHByb2JhYmx5IGdvdCBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiB0cmlja3MgaGlkZGVuIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgbG9naWMsIGxvb2tpbmcgZm9yIHRoZSBrZXkgY29tcG9uZW50cyB0aGF0IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBOVU1BLCBwYWdlIGZsYWdzLCBhbmQgcG90ZW50aWFsbHksIGxvdy1tZW1vcnkgc2l0dWF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgc2xhYiBhbGxvY2F0aW9uIG9yIGRpcmVjdCBwaHlzaWNhbCBtYXBwaW5nOyBpdOKAmXMgbGlrZWx5IGEgYmFzZSBsYXllciB0aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGJ1aWxkIHVwb24uIEdvdHRhIGdldCB0aGlzIHJpZ2h0LiBMZXQncyBzZWUgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI4OjQ1LjY4ODg0MzQ0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTI6XFx0c3RydWN0IHBhZ2UgKl9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjU0MTM6XFx0XFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuNTQxNDpcXHR7XFxuNTQxNTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41NDE2OlxcdFxcbjU0MTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayxcXG41NDE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGFsbG9jX2ZsYWdzKTtcXG41NDE5OlxcdFxcdGlmIChwYWdlKVxcbjU0MjA6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41NDIxOlxcdFxcdHJldHVybiBwYWdlO1xcbjU0MjI6XFx0fVxcbjU0MjM6XFx0XFxuNTQyNDpcXHRzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG41NDI1OlxcdHtcXG41NDI2OlxcdFxcdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxcbjU0Mjc6XFx0XFx0XFx0bmlkID0gbnVtYV9tZW1faWQoKTtcXG41NDI4OlxcdFxcbjU0Mjk6XFx0XFx0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnBfbWFzayk7XFxuNTQzMDpcXHRcXG41NDMxOlxcdFxcdHJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI4OjQ1LjY4OTUyODU5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg0NzM0NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5VTUEgTm9kZSBIYW5kbGluZyBpbiBQYWdlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBOVU1BX05PX05PREVgIHZhbHVlIGlzIGhhbmRsZWQgaW4gcGFnZSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBOVU1BIGFyY2hpdGVjdHVyZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgYW5kIHRoZSBgX19mb2xpb19hbGxvY2AgZnVuY3Rpb25zLlxuXG5Jbml0aWFsbHksIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgY29ycmVjdGx5IGFkZHJlc3NlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2FzZSBieSBjYWxsaW5nIGBudW1hX21lbV9pZCgpYCB0byBnZXQgdGhlIGN1cnJlbnQgbm9kZS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGl0c2VsZiAqZG9lc24ndCogaGFuZGxlIGBOVU1BX05PX05PREVgIGRpcmVjdGx5LlxuXG5Ob3csIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAsIHdoaWNoIGlzIHVzZWQgdG8gYWxsb2NhdGUgZm9saW8gc3RydWN0dXJlcywgdXNlZCB0byBwYXNzIHRoZSBub2RlIElEIGRvd24gdG8gYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gVGhlIHBvaW50IGlzLCB0aGUgb2xkIGBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYCAqYWxzbyogZGlkICpub3QqIGhhbmRsZSBgTlVNQV9OT19OT0RFYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYF9fZm9saW9fYWxsb2Nfbm9kZWAgKHdoaWNoIGl0c2VsZiBjYWxsZWQgYF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgKSwgYWxzbyBkaWQgTk9UIGhhbmRsZSBgTlVNQV9OT19OT0RFYC4gVGhpcyBtZWFudCB0aGF0IGBkcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNgIGhhZCB0byBkbyBleHRyYSBoYW5kbGluZyBmb3IgdGhpcywgd2hpY2ggaXQgZGlkLlxuXG5UaGlzIHBhdGNoLCBob3dldmVyLCByZWZhY3RvcnMgdGhpbmdzLiBJdCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgaGFuZGxpbmcgKmludG8qIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgaXRzZWxmLCBtYWtpbmcgaXQgcmVzcG9uc2libGUgZm9yIHRoZSBkZWZhdWx0IG5vZGUgc2VsZWN0aW9uLiBUaGUgY2FsbCBpcyBub3cgbW92ZWQgdG8gYG51bWFfbWVtX2lkKClgIGFuZCB0aGUgZnVuY3Rpb24gcmVuYW1lZC4gTm93LCBgZm9saW9fYWxsb2Nfbm9kZWAgaGFuZGxlcyB0aGlzIGNhc2UgY29ycmVjdGx5LCBqdXN0IGxpa2UgYGFsbG9jX3BhZ2VzX25vZGVgIGRvZXMuIEl0IGFsc28gbWVhbnMgdGhhdCBhbnkgY2FsbGVyIG9mIGBfX2ZvbGlvX2FsbG9jX25vZGVgIG9yIGBfX2ZvbGlvX2FsbG9jYCBub3cgaGFuZGxlcyB0aGUgYC0xYCBgTlVNQV9OT19OT0RFYC5cblxuU28sIGl0J3MgYSBtaW5vciByZWZhY3RvcmluZywgZXNzZW50aWFsbHkuIEl0IHJlc29sdmVzIGFuIEFQSSBpbmNvbnNpc3RlbmN5LiBQcmV2aW91c2x5LCBpZiBgLTFgIHdhcyBwYXNzZWQgKHdoaWNoIGVxdWF0ZXMgdG8gYE5VTUFfTk9fTk9ERWApIHRvIGBfX2ZvbGlvX2FsbG9jYCwgaXQgd2FzIHRoZW4gcGFzc2VkIHRvIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuXG5cblRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbGx5IGltcG9ydGFudCwgdGhvdWdoLCBiZWNhdXNlIGFueSBjYWxsZXIgKnJlbHlpbmcqIG9uIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgbm93IHJlY2VpdmUgaXQgY29ycmVjdGx5LlxuV2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkICpiZWZvcmUqIGlmIGBOVU1BX05PX05PREVgIHdhcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zPyBXZWxsLCBpdCB3aWxsIGp1c3QgZ2V0IHBhc3NlZCBhcyBgLTFgLiBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgZG9lcyB3aXRoIHRoYXQgY2FzZSwganVzdCB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTQwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjg6NTYuNTM2ODc2MjA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMxMDYyMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNDA5PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDIyLVxcdHByZWZlcnJlZF9nZnAgXFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XFxubW0vbWVtcG9saWN5LmM6MjQyMzpcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI0MjQtXFx0XFx0XFx0XFx0XFx0ICAgQUxMT0NfREVGQVVMVCk7XFxubW0vbWVtcG9saWN5LmMtMjQyNS1cXHRpZiAoIXBhZ2UpXFxubW0vbWVtcG9saWN5LmM6MjQyNjpcXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNDI3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIEFMTE9DX0RFRkFVTFQpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjQ0Mj1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX21wb2woZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDcyLVxcdFxcdFxcdCAqL1xcbm1tL21lbXBvbGljeS5jOjI0NzM6XFx0XFx0XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihcXG5tbS9tZW1wb2xpY3kuYy0yNDc0LVxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDg2LVxcbm1tL21lbXBvbGljeS5jOjI0ODc6XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG5tbS9tZW1wb2xpY3kuYy0yNDg4LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzMjM9c3RhdGljIGNvbnN0IGdmcF90IGdmcF9ub2xvY2sgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9NRU1BTExPQyB8XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTMyOC0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTMyOTpzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01MzMwLVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0MDktfVxcbm1tL3BhZ2VfYWxsb2MuYzo1NDEwOkVYUE9SVF9TWU1CT0woX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTQxMS1cXG5tbS9wYWdlX2FsbG9jLmM9NTQxMj1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxNi1cXG5tbS9wYWdlX2FsbG9jLmM6NTQxNzpcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDE4LVxcdFxcdFxcdFxcdFxcdCAgIGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03OTg3PXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03OTkxLVxcbm1tL3BhZ2VfYWxsb2MuYzo3OTkyOlxcdHJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX2ZsYWdzLCBvcmRlciwgbmlkLCBOVUxMLCBBTExPQ19OT0xPQ0spO1xcbm1tL3BhZ2VfYWxsb2MuYy03OTkzLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuaD0yMzA9ZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlcztcXG5tbS9wYWdlX2FsbG9jLmgtMjMxLVxcbm1tL3BhZ2VfYWxsb2MuaDoyMzI6c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCxcXG5tbS9wYWdlX2FsbG9jLmgtMjMzLVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuaC0yMzQtI2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXFxcXG5tbS9wYWdlX2FsbG9jLmg6MjM1OlxcdGFsbG9jX2hvb2tzKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXFxubW0vcGFnZV9hbGxvYy5oLTIzNi12b2lkIGZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5oPTI0Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuaC0yNDMte1xcbm1tL3BhZ2VfYWxsb2MuaDoyNDQ6XFx0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9wYWdlX2FsbG9jLmgtMjQ1LVxcdFxcdFxcdFxcdFxcdCAgIEFMTE9DX0RFRkFVTFQpO1xcbi0tXFxubW0vc2x1Yi5jPTUyOTI9c3RhdGljIHZvaWQgKl9fX2ttYWxsb2NfbGFyZ2Vfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTUzMDUtXFx0ZWxzZVxcbm1tL3NsdWIuYzo1MzA2OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMLFxcbm1tL3NsdWIuYy01MzA3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIEFMTE9DX0RFRkFVTFQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyODo1OS4xNjc5NDQ3NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MzkwOTIwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIE5VTUFfTk9fTk9ERSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgaG93IGl0IGRlYWxzIHdpdGggYE5VTUFfTk9fTk9ERWAuIFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBmcm96ZW4gcGFnZXMsIGxpa2VseSByZWxhdGVkIHRvIGVhcmx5IGJvb3Qgb3IgZXh0cmVtZWx5IGxvdy1sZXZlbCBrZXJuZWwgb3BlcmF0aW9ucy4gYE5VTUFfTk9fTk9ERWAgaXMgdGhlIGltcG9ydGFudCBiaXQsIGxpa2VseSBpbmRpY2F0aW5nIHRoYXQgYSBzcGVjaWZpYyBOVU1BIG5vZGUgaXNuJ3QgZGVmaW5lZCwgb3IgcGVyaGFwcyB0aGF0IHdlJ3JlIGludGVudGlvbmFsbHkgYXZvaWRpbmcgTlVNQSBjb25zaWRlcmF0aW9ucy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBmb3IgaG93IGl0J3MgaGFuZGxlZC4gSXMgaXQgdHJlYXRlZCBhcyBhbiBlcnJvcj8gRG9lcyBpdCBmYWxsIGJhY2sgdG8gYSBkZWZhdWx0IG5vZGUsIG1heWJlIG5vZGUgemVybyBvciBhbGwgbm9kZXM/IERvZXMgdGhlIGZ1bmN0aW9uIHNpbXBseSBwcm9jZWVkIHdpdGhvdXQgTlVNQSBhd2FyZW5lc3MgaWYgYE5VTUFfTk9fTk9ERWAgaXMgdGhlIHRhcmdldD8gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBhbGxvY2F0b3JzIHBlcmZvcm1hbmNlLCByb2J1c3RuZXNzLCBhbmQgdGhlIHN5c3RlbSdzIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBsb29raW5nIGZvciB3aGVyZSBgTlVNQV9OT19OT0RFYCBpcyBjaGVja2VkLCBob3cgaXQncyB1c2VkIGluIGNhbGN1bGF0aW9ucywgYW5kIHdoZXJlIGl0IG1heSBiZSB0cmFuc2xhdGVkIHRvIG90aGVyIG5vZGUgaW5kaWNlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIHRoaXMgdmFyaWFibGUuIE15IGludGVyZXN0IGlzOiB3aGF0IGRvZXMgaXQgZG8/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6MTEuNzA3MDM5ODI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMyOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTMyOTpcXHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjUzMzA6XFx0XFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuNTMzMTpcXHR7XFxuNTMzMjpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MzMzOlxcdFxcdGdmcF90IGFsbG9jX2dmcDsgLyogVGhlIGdmcF90IHRoYXQgd2FzIGFjdHVhbGx5IHVzZWQgZm9yIGFsbG9jYXRpb24gKi9cXG41MzM0OlxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0ge1xcbjUzMzU6XFx0XFx0XFx0LmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3MsXFxuNTMzNjpcXHRcXHR9O1xcbjUzMzc6XFx0XFx0dW5zaWduZWQgaW50IGZhc3RwYXRoX2FsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3M7XFxuNTMzODpcXHRcXG41MzM5OlxcdFxcdC8qIE90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXFxuNTM0MDpcXHRcXHRpZiAoV0FSTl9PTihhbGxvY19mbGFncyBcXHUwMDI2IH4oQUxMT0NfTk9MT0NLIHwgQUxMT0NfTk9fQ09ERVRBRykpKVxcbjUzNDE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTM0MjpcXHRcXG41MzQzOlxcdFxcdGlmICghYWxsb2Nfb3JkZXJfYWxsb3dlZChnZnAsIG9yZGVyLCBhbGxvY19mbGFncykpXFxuNTM0NDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG41MzQ1OlxcdFxcbjUzNDY6XFx0XFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKSB7XFxuNTM0NzpcXHRcXHRcXHQvKiBDZXJ0YWluIG90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXFxuNTM0ODpcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoZ2ZwIFxcdTAwMjYgfihfX0dGUF9BQ0NPVU5UIHwgZ2ZwX25vbG9jaykpO1xcbjUzNDk6XFx0XFx0XFx0aWYgKCFhbGxvY19ub2xvY2tfYWxsb3dlZCgpKVxcbjUzNTA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTM1MTpcXHRcXHRcXHRnZnAgfD0gZ2ZwX25vbG9jaztcXG41MzUyOlxcdFxcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IEFMTE9DX1dNQVJLX01JTjtcXG41MzUzOlxcdFxcdH0gZWxzZSB7XFxuNTM1NDpcXHRcXHRcXHRmYXN0cGF0aF9hbGxvY19mbGFncyB8PSBBTExPQ19XTUFSS19MT1c7XFxuNTM1NTpcXHRcXHR9XFxuNTM1NjpcXHRcXG41MzU3OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjUzNTg6XFx0XFx0LypcXG41MzU5OlxcdFxcdCAqIEFwcGx5IHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzLiBUaGlzIGlzIG1haW5seSBhYm91dCBHRlBfTk9GU1xcbjUzNjA6XFx0XFx0ICogcmVzcC4gR0ZQX05PSU8gd2hpY2ggaGFzIHRvIGJlIGluaGVyaXRlZCBmb3IgYWxsIGFsbG9jYXRpb24gcmVxdWVzdHNcXG41MzYxOlxcdFxcdCAqIGZyb20gYSBwYXJ0aWN1bGFyIGNvbnRleHQgd2hpY2ggaGFzIGJlZW4gbWFya2VkIGJ5XFxuNTM2MjpcXHRcXHQgKiBtZW1hbGxvY19ub3tmcyxpb31fe3NhdmUscmVzdG9yZX0uIEFuZCBQRl9NRU1BTExPQ19QSU4gd2hpY2ggZW5zdXJlc1xcbjUzNjM6XFx0XFx0ICogbW92YWJsZSB6b25lcyBhcmUgbm90IHVzZWQgZHVyaW5nIGFsbG9jYXRpb24uXFxuNTM2NDpcXHRcXHQgKi9cXG41MzY1OlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MzY2OlxcdFxcdGFsbG9jX2dmcCA9IGdmcDtcXG41MzY3OlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLFxcbjUzNjg6XFx0XFx0XFx0XFx0XFx1MDAyNmFsbG9jX2dmcCwgXFx1MDAyNmZhc3RwYXRoX2FsbG9jX2ZsYWdzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6MTEuNzA3MzA2Mjc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODk2NzI0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIHF1aWNrbHkgemVybyBpbiBvbiB0aGUga2V5IGFzcGVjdHMgaGVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIEkgcHJlc3VtZSwgaW4gaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhZ2VzLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBzZXR1cCBzdGFnZSBiZWZvcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBhbGxvY2F0aW9uIG9jY3Vycywgb3IgcGVyaGFwcyBzb21lIHByZS12YWxpZGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcmVwYXJpbmcgdG8gZG8sIGFuZCB3aGF0IGl0cyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLiBJcyBpdCB0YWtpbmcgYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXI/IEEgcmVxdWVzdCBzaXplPyBGbGFncyBpbmRpY2F0aW5nIGFsbG9jYXRpb24gYmVoYXZpb3I/IExldCdzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgc2VjdGlvbnMgb3IgbG9ja2luZyB0aGF0IGFyZSBoYXBwZW5pbmcgaGVyZT8gVGhhdCdzIGFsd2F5cyBhIHBvaW50IG9mIGNvbmNlcm4uIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yIEknbSB3b3JraW5nIHdpdGguIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyOToxNS4zOTY5ODA4MjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODM5NzQ2MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9hbGxvY19wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NDczMD1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTAzNi1cXG5tbS9wYWdlX2FsbG9jLmM6NTAzNzpzdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01MDM4LVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MTA2PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU1LVxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTU2OlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxubW0vcGFnZV9hbGxvYy5jLTUxNTctXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTMyOT1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNjYtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MzY3OlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLFxcbm1tL3BhZ2VfYWxsb2MuYy01MzY4LVxcdFxcdFxcdFxcdTAwMjZhbGxvY19nZnAsIFxcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI5OjE3Ljc4MDk2NTk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDIzNjMzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcHJlcGFyZV9hbGxvY19wYWdlc2AgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoaXMgbmFtZTsgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHV6emxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGtleSByZXNwb25zaWJpbGl0aWVzIGhlcmU/IElzIGl0IGFib3V0IHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB2YWxpZGF0aW5nIHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgcHJlLXplcm9pbmcgcGFnZXMgb3IgaGFuZGxpbmcgY2FjaGUgY29uc2lkZXJhdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgYWxsb2NhdGlvbj8gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugc2FuaXR5IGNoZWNrcyBvbiB0aGUgcmVxdWVzdGVkIHNpemUgYW5kIHRoZSBtZW1vcnkgem9uZSwgbWF5YmUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSwgaWYgd2UncmUgZGVhbGluZyB3aXRoIE5VTUEgc3lzdGVtcywgc29tZSBub2RlIHNlbGVjdGlvbiBsb2dpYy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdCB3aGF0IHByZXBhcmF0b3J5IHdvcmsgaXMgcGVyZm9ybWVkIGJlZm9yZSBoYW5kaW5nIG9mZiB0aGUgcmVxdWVzdCB0byB0aGUgbW9yZSBzdWJzdGFudGlhbCBhbGxvY2F0aW9uIHJvdXRpbmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHJlcXVlc3RzLCBzbywgaGVyZSBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI5OjIxLjA4MzMzMzY3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwMzc6XFx0c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG41MDM4OlxcdFxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcXG41MDM5OlxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgZ2ZwX3QgKmFsbG9jX2dmcCxcXG41MDQwOlxcdFxcdFxcdHVuc2lnbmVkIGludCAqYWxsb2NfZmxhZ3MpXFxuNTA0MTpcXHR7XFxuNTA0MjpcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xcbjUwNDM6XFx0XFx0YWMtXFx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XFxuNTA0NDpcXHRcXHRhYy1cXHUwMDNlbm9kZW1hc2sgPSBub2RlbWFzaztcXG41MDQ1OlxcdFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XFxuNTA0NjpcXHRcXG41MDQ3OlxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSkge1xcbjUwNDg6XFx0XFx0XFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcXG41MDQ5OlxcdFxcdFxcdC8qXFxuNTA1MDpcXHRcXHRcXHQgKiBXaGVuIHdlIGFyZSBpbiB0aGUgaW50ZXJydXB0IGNvbnRleHQsIGl0IGlzIGlycmVsZXZhbnRcXG41MDUxOlxcdFxcdFxcdCAqIHRvIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dC4gSXQgbWVhbnMgdGhhdCBhbnkgbm9kZSBvay5cXG41MDUyOlxcdFxcdFxcdCAqL1xcbjUwNTM6XFx0XFx0XFx0aWYgKGluX3Rhc2soKSBcXHUwMDI2XFx1MDAyNiAhYWMtXFx1MDAzZW5vZGVtYXNrKVxcbjUwNTQ6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG41MDU1OlxcdFxcdFxcdGVsc2VcXG41MDU2OlxcdFxcdFxcdFxcdCphbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI5OjIxLjA4MzgyOTA0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ5NDMzMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE5VTUEgc3lzdGVtczpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbm9kZV96b25lbGlzdGAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gYG5vZGVfem9uZWxpc3QocHJlZmVycmVkX25pZCwgZ2ZwX21hc2spYCBpcyBiZWluZyBpbnZva2VkLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGZpZ3VyaW5nIG91dCB3aGVyZSB0byBhbGxvY2F0ZSBtZW1vcnksIGFuZCB0aGUgYGdmcF9tYXNrYCBpcyBjcml0aWNhbCBmb3IgZGVmaW5pbmcgdGhlIGFsbG9jYXRpb24gdHlwZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgd2hlbiBgcHJlZmVycmVkX25pZGAgaXMgYE5VTUFfTk9fTk9ERWAsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgc2lnbmFsIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIHByZWZlcnJlZCBOVU1BIG5vZGUuIEl0J3Mgb2Z0ZW4gc2V0IHRvIC0xLiBEb2VzIHRoZSBmdW5jdGlvbiBqdXN0IGRlZmF1bHQgdG8gc29tZSBwcmUtY29uZmlndXJlZCBub2RlPyBEb2VzIGl0IGZhbGwgYmFjayB0byB0aGUgbG9jYWwgbm9kZT8gT3IgZG9lcyBpdCBlbXBsb3kgc29tZSBnbG9iYWwgcG9saWN5LCBwZXJoYXBzIGJhc2VkIG9uIGxvYWQgYmFsYW5jaW5nIG9yIGF2YWlsYWJpbGl0eSBhY3Jvc3MgdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIGluIHRoaXMgc2NlbmFyaW8gYmVjYXVzZSBpdCBkaWN0YXRlcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3aGVuIE5VTUEgYWZmaW5pdHkgaXNuJ3QgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHdoaWNoIGlzIGEgdmVyeSBjb21tb24gY2FzZS4gVW5kZXJzdGFuZGluZyB0aGUgZmFsbGJhY2sgYmVoYXZpb3IgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBub2RlX3pvbmVsaXN0YCBkb2VzIHdoZW4gdGhlcmUgaXMgbm8gc3BlY2lmaWVkIG5vZGUuIEkgbmVlZCB0byByZXZpZXcgaXRzIGJlaGF2aW9yIGluIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBmYWxsYmFjayBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6MjQuNzMzMjY1MTI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgxMTU4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfem9uZWxpc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTIxMD1HZW5lcmFsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE0LSAgVGhlIHpvbmVzIGZvciB0aGlzIG5vZGUuICBOb3QgYWxsIG9mIHRoZSB6b25lcyBtYXkgYmUgcG9wdWxhdGVkLCBidXQgaXQgaXNcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjE1OiAgdGhlIGZ1bGwgbGlzdC4gSXQgaXMgcmVmZXJlbmNlZCBieSB0aGlzIG5vZGUncyBub2RlX3pvbmVsaXN0cyBhcyB3ZWxsIGFzXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIxNjogIG90aGVyIG5vZGUncyBub2RlX3pvbmVsaXN0cy5cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE3LVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMTg6YGBub2RlX3pvbmVsaXN0c2BgXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxOS0gIFRoZSBsaXN0IG9mIGFsbCB6b25lcyBpbiBhbGwgbm9kZXMuIFRoaXMgbGlzdCBkZWZpbmVzIHRoZSBvcmRlciBvZiB6b25lc1xcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMjA6ICB0aGF0IGFsbG9jYXRpb25zIGFyZSBwcmVmZXJyZWQgZnJvbS4gVGhlIGBgbm9kZV96b25lbGlzdHNgYCBpcyBzZXQgdXAgYnlcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjIxLSAgYGBidWlsZF96b25lbGlzdHMoKWBgIGluIGBgbW0vcGFnZV9hbGxvYy5jYGAgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD05NT1SQU3lubPlnYfliIbphY3lnKjkuKTkuKroioLngrnkuIrnmoRhcm02NOacuuWZqOS4iu+8jOS9v+eUqCBgYG1vdmFibGVjb3JlPTgwJWBgIOWPguaVsFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMDMt6KGo56S66K+l6IqC54K555qE5Yy65Z+f5YiX6KGo44CC5bm26Z2e5omA5pyJ5Yy65Z+f6YO95Y+v6IO96KKr5aGr5YWF77yM5L2G6L+Z5pivXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMDQ65a6M5pW055qE5YiX6KGo44CC5a6D6KKr6K+l6IqC54K555qEbm9kZV96b25lbGlzdHPku6Xlj4rlhbblroPoioLngrnnmoRcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIwNTpub2RlX3pvbmVsaXN0c+W8leeUqOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjA2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA3OmBgbm9kZV96b25lbGlzdHNgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjA4LeihqOekuuaJgOacieiKgueCueS4reaJgOacieWMuuWfn+eahOWIl+ihqOOAguatpOWIl+ihqOWumuS5ieS6huWIhumFjeWGheWtmOaXtummlumAieeahOWMuuWfn1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA5OumhuuW6j+OAgmBgbm9kZV96b25lbGlzdHNgYCDlnKjmoLjlv4PlhoXlrZjnrqHnkIbnu5PmnoTliJ3lp4vljJbmnJ/pl7TvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxMC3nlLEgYGBtbS9wYWdlX2FsbG9jLmNgYCDkuK3nmoQgYGBidWlsZF96b25lbGlzdHMoKWBgXFxuLS1cXG5kcml2ZXJzL3R0eS9zeXNycS5jPTM4NT1zdGF0aWMgdm9pZCBtb29tX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZClcXG4tLVxcbmRyaXZlcnMvdHR5L3N5c3JxLmMtMzg4LVxcdHN0cnVjdCBvb21fY29udHJvbCBvYyA9IHtcXG5kcml2ZXJzL3R0eS9zeXNycS5jOjM4OTpcXHRcXHQuem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KGZpcnN0X21lbW9yeV9ub2RlLCBnZnBfbWFzayksXFxuZHJpdmVycy90dHkvc3lzcnEuYy0zOTAtXFx0XFx0Lm5vZGVtYXNrID0gTlVMTCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MTc5PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgZ2ZwX25lc3RlZF9tYXNrKGdmcF90IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0xOTMtICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoxOTQ6c3RhdGljIGlubGluZSBzdHJ1Y3Qgem9uZWxpc3QgKm5vZGVfem9uZWxpc3QoaW50IG5pZCwgZ2ZwX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0xOTUte1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MTk2OlxcdHJldHVybiBOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lbGlzdHMgKyBnZnBfem9uZWxpc3QoZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMTk3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTQ2Nz10eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzAtXFx0ICogem9uZXMgbWF5IGJlIHBvcHVsYXRlZCwgYnV0IGl0IGlzIHRoZSBmdWxsIGxpc3QuIEl0IGlzIHJlZmVyZW5jZWQgYnlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0NzE6XFx0ICogdGhpcyBub2RlJ3Mgbm9kZV96b25lbGlzdHMgYXMgd2VsbCBhcyBvdGhlciBub2RlJ3Mgbm9kZV96b25lbGlzdHMuXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDcyLVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDc1LVxcdC8qXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDc2OlxcdCAqIG5vZGVfem9uZWxpc3RzIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gYWxsIHpvbmVzIGluIGFsbCBub2Rlcy5cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzctXFx0ICogR2VuZXJhbGx5IHRoZSBmaXJzdCB6b25lcyB3aWxsIGJlIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlJ3NcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ3OS1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0ODA6XFx0c3RydWN0IHpvbmVsaXN0IG5vZGVfem9uZWxpc3RzW01BWF9aT05FTElTVFNdO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ4MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTkwOD1zdGF0aWMgaW5saW5lIGJvb2wgbW92YWJsZV9vbmx5X25vZGVzKG5vZGVtYXNrX3QgKm5vZGVzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xOTIyLVxcdG5pZCA9IGZpcnN0X25vZGUoKm5vZGVzKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE5MjM6XFx0em9uZWxpc3QgPSBcXHUwMDI2Tk9ERV9EQVRBKG5pZCktXFx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE5MjQtXFx0eiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBaT05FX05PUk1BTCxcXHRub2Rlcyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTI3NT1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTI4Ny1cXG5tbS9odWdldGxiLmM6MTI4ODpcXHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobmlkLCBnZnBfbWFzayk7XFxubW0vaHVnZXRsYi5jLTEyODktXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMTM4PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMTcwLVxcdFxcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKEdGUF9LRVJORUwpO1xcbm1tL21lbXBvbGljeS5jOjIxNzE6XFx0XFx0em9uZWxpc3QgPSBcXHUwMDI2Tk9ERV9EQVRBKG5vZGUpLVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS107XFxubW0vbWVtcG9saWN5LmMtMjE3Mi1cXHRcXHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hlc3Rfem9uZWlkeCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI5ODE9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzA1MC1cXHRcXHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoXFxubW0vbWVtcG9saWN5LmM6MzA1MTpcXHRcXHRcXHRcXHRub2RlX3pvbmVsaXN0KHRoaXNuaWQsIEdGUF9ISUdIVVNFUiksXFxubW0vbWVtcG9saWN5LmMtMzA1Mi1cXHRcXHRcXHRcXHRnZnBfem9uZShHRlBfSElHSFVTRVIpLFxcbi0tXFxubW0vbW1faW5pdC5jPTc1PXZvaWQgX19pbml0IG1taW5pdF92ZXJpZnlfem9uZWxpc3Qodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy05My1cXHRcXHRcXHRsaXN0aWQgPSBpIC8gTUFYX05SX1pPTkVTO1xcbm1tL21tX2luaXQuYzo5NDpcXHRcXHRcXHR6b25lbGlzdCA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lbGlzdHNbbGlzdGlkXTtcXG5tbS9tbV9pbml0LmMtOTUtXFx0XFx0XFx0em9uZSA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lc1t6b25laWRdO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwMzc9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MDQyLVxcdGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHggPSBnZnBfem9uZShnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jOjUwNDM6XFx0YWMtXFx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTUwNDQtXFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTY2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBucl9mcmVlX3pvbmVfcGFnZXMoaW50IG9mZnNldClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NjY4LVxcbm1tL3BhZ2VfYWxsb2MuYzo1NjY5OlxcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTY3MC1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01ODI1PXN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01ODMwLVxcbm1tL3BhZ2VfYWxsb2MuYzo1ODMxOlxcdHpvbmVyZWZzID0gcGdkYXQtXFx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXS5fem9uZXJlZnM7XFxubW0vcGFnZV9hbGxvYy5jLTU4MzItXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTg0Ny0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTg0ODpzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG5tbS9wYWdlX2FsbG9jLmMtNTg0OS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTg1Mi1cXG5tbS9wYWdlX2FsbG9jLmM6NTg1MzpcXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9OT0ZBTExCQUNLXS5fem9uZXJlZnM7XFxubW0vcGFnZV9hbGxvYy5jLTU4NTQtXFx0bnJfem9uZXMgPSBidWlsZF96b25lcmVmc19ub2RlKHBnZGF0LCB6b25lcmVmcyk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTg2MD1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01ODg2LVxcdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7XFxubW0vcGFnZV9hbGxvYy5jOjU4ODc6XFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcXG5tbS9wYWdlX2FsbG9jLmMtNTg4OC1cXHRwcl9pbmZvKFxcXCJGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogXFxcIiwgbG9jYWxfbm9kZSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTkwMT1pbnQgbG9jYWxfbWVtb3J5X25vZGUoaW50IG5vZGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTkwNC1cXG5tbS9wYWdlX2FsbG9jLmM6NTkwNTpcXHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qobm9kZV96b25lbGlzdChub2RlLCBHRlBfS0VSTkVMKSxcXG5tbS9wYWdlX2FsbG9jLmMtNTkwNi1cXHRcXHRcXHRcXHQgICBnZnBfem9uZShHRlBfS0VSTkVMKSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01OTE2PXN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU5MjAtXFxubW0vcGFnZV9hbGxvYy5jOjU5MjE6XFx0em9uZXJlZnMgPSBwZ2RhdC1cXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcXG5tbS9wYWdlX2FsbG9jLmMtNTkyMi1cXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUocGdkYXQsIHpvbmVyZWZzKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03NDg1PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc0OTUtcmV0cnk6XFxubW0vcGFnZV9hbGxvYy5jOjc0OTY6XFx0em9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG5pZCwgZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy03NDk3LVxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsXFxuLS1cXG5tbS9zbHViLmM9Mzg5Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zOTM1LVxcbm1tL3NsdWIuYzozOTM2OlxcdFxcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcF9mbGFncyk7XFxubW0vc2x1Yi5jLTM5MzctXFx0XFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdCh6b25lLCB6LCB6b25lbGlzdCwgaGlnaGVzdF96b25laWR4KSB7XFxuLS1cXG5tbS9zbHViLmM9NzI1ND1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MjcwLVxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vc2x1Yi5jOjcyNzE6XFx0XFx0em9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG1lbXBvbGljeV9zbGFiX25vZGUoKSwgZ2ZwKTtcXG5tbS9zbHViLmMtNzI3Mi1cXHRcXHRmb3JfZWFjaF96b25lX3pvbmVsaXN0KHpvbmUsIHosIHpvbmVsaXN0LCBoaWdoZXN0X3pvbmVpZHgpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3NTA9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzUtXFx0ICovXFxubW0vdm1zY2FuLmM6Njc3NjpcXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgc2MuZ2ZwX21hc2spO1xcbm1tL3Ztc2Nhbi5jLTY3NzctXFxuLS1cXG5tbS92bXNjYW4uYz03NTQ4PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU1OS1cXHR9O1xcbm1tL3Ztc2Nhbi5jOjc1NjA6XFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIHNjLmdmcF9tYXNrKTtcXG5tbS92bXNjYW4uYy03NTYxLVxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyOToyNy4xMTQ0Mjg3NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MDk0NTAzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2hlbiBsb29raW5nIGF0IHRoaXMgYG5vZGVfem9uZWxpc3RgIGZ1bmN0aW9uIGlzLCBcIkFoYSwgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIGBuaWRgIGlzIGAtMWAgKE5VTUFfTk9fTk9ERSkhXCIgVGhhdCBgTk9ERV9EQVRBKC0xKWAgd291bGQgZGVmaW5pdGVseSBjYXVzZSBwcm9ibGVtcy4gQnV0LCB3YWl0LCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIHRoZSAqcG90ZW50aWFsKiBmb3IgdGhpcyBpc3N1ZTsgaXQncyByZXZlYWxpbmcgYW4gKmV4aXN0aW5nKiBvbmUuIFRoZSBjb2RlIHdhcyBhbHJlYWR5IHZ1bG5lcmFibGUhIEl0IHNlZW1zIHRoYXQgYmVmb3JlIHRoaXMgcGF0Y2gsIGNhbGxpbmcgZnVuY3Rpb25zIGxpa2UgYF9fZm9saW9fYWxsb2NgIHdpdGggYE5VTUFfTk9fTk9ERWAgd291bGQgdWx0aW1hdGVseSBsZWFkIHRvIHRoaXMgcHJvYmxlbWF0aWMgYWNjZXNzLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhhdCBgYWxsb2NfcGFnZXNfbm9kZWAsIHdoaWNoIGlzIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24sIGNvcnJlY3RseSBoYW5kbGVkIHRoZSBgTlVNQV9OT19OT0RFYCBjYXNlLiBJdCB3b3VsZCBjYWxsIGBudW1hX21lbV9pZCgpYCB3aGVuIGBuaWRgIHdhcyBgTlVNQV9OT19OT0RFYC4gSG93ZXZlciwgIGBfX2ZvbGlvX2FsbG9jX25vZGVgIGFuZCBpdHMgdmFyaWFudHMsIGNydWNpYWxseSwgKmRpZG4ndCogaGF2ZSB0aGlzIGNoZWNrLiAgU28sIGFueSBjb2RlIHVzaW5nIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggYE5VTUFfTk9fTk9ERWAgd2FzIGFscmVhZHkgZXhwb3NlZCB0byB0aGlzIHBvdGVudGlhbCBjcmFzaC4gSSBjYW4gc2VlIHRoaXMgYnkgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCwgd2hpY2ggY29udGFpbnMgdGhpcyBleHBsaWNpdCBoYW5kbGluZywgaXQgY2FsbHMgYG51bWFfbWVtX2lkKClgIVxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkganVzdCBhIGNsZWFudXAuIEl0J3MgbWFraW5nIGBmb2xpb19hbGxvY19ub2RlYCBiZWhhdmUgKmNvbnNpc3RlbnRseSogd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWAgYnkgaW5jb3Jwb3JhdGluZyB0aGUgYE5VTUFfTk9fTk9ERWAgaGFuZGxpbmcgZGlyZWN0bHkuIEl0IGFsc28gcmVtb3ZlcyB0aGUgd29ya2Fyb3VuZCBpbiBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhpczogaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55ICpuZXcqIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiBJdCdzIHNpbXBseSBtb3ZpbmcgdGhlIGNoZWNrIGludG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2U6XG5cbmBgYGNcbnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuXHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxue1xuXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcblxuXHRpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpXG5cdFx0cHJlZmVycmVkX25pZCA9IG51bWFfbWVtX2lkKCk7XG5cblx0d2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTtcblxuXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsXG5cdFx0XHRcdCAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG5cdHJldHVybiBwYWdlX3JtYXBwYWJsZV9mb2xpbyhwYWdlKTtcbn1cbmBgYFxuXG5UaGlzIGlzLCBmcmFua2x5LCBleHRyZW1lbHkgc2ltcGxlLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLiBObyBuZXcgY29tcGxleCBsb2dpYywgbm8gbmV3IGZlYXR1cmVzLCBubyBuZXcgZHJpdmVycywgbm8gbmV3IHN5c3RlbSBjYWxscy4gSnVzdCBhIG1pbm9yIEFQSSBjbGVhbnVwIHRoYXQgY2VudHJhbGl6ZXMgdGhlIGhhbmRsaW5nIG9mIGBOVU1BX05PX05PREVgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIG90aGVyIGZpbGVzIHRvdWNoZWQuIFRoZSBgbW0vbWVtcG9saWN5LmhgIGNoYW5nZSBpcyBqdXN0IG1vdmluZyBkZWNsYXJhdGlvbnMsIHdoaWNoIGlzbid0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgb3RoZXIgZmlsZXMg4oCTIGBtbS9maWxlbWFwLmNgLCBgbW0vbWlncmF0ZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG5ldC9zdW5ycGMvc3ZjLmNgLCBgZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY2Ag4oCTIGFyZSBzaW1wbHkgcmVuYW1pbmcgb3IgaW5jbHVkaW5nIHRoZSBoZWFkZXIuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyBzcGVjaWZpY2FsbHkuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBjb2RlIHBhdGhzIHRoYXQgaGF2ZW4ndCBiZWVuIGV4ZXJjaXNlZCBhbHJlYWR5LCBhbmQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgdmVyeSBtaW5pbWFsIGFuZCBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzkwLCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6NDEuMDIzODgxMjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIGZvbGlvIGFsbG9jYXRpb24gQVBJLiBJdCByZW5hbWVzIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHRvIGBmb2xpb19hbGxvY19ub2RlYCwgbW92ZXMgdGhlIGBOVU1BX05PX05PREVgIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCAobWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWApLCBhbmQgbW92ZXMgc29tZSBtZW1wb2xpY3kgZGVjbGFyYXRpb25zIHRvIGFuIGludGVybmFsIGhlYWRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgZmVhdHVyZXMsIG9yIGNvbXBsZXggY29kZSBwYXRocyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgZm9saW8gYWxsb2NhdGlvbiBBUEkuIEl0IHJlbmFtZXMgYF9fZm9saW9fYWxsb2Nfbm9kZWAgdG8gYGZvbGlvX2FsbG9jX25vZGVgLCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgIChtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCksIGFuZCBtb3ZlcyBzb21lIG1lbXBvbGljeSBkZWNsYXJhdGlvbnMgdG8gYW4gaW50ZXJuYWwgaGVhZGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCBmZWF0dXJlcywgb3IgY29tcGxleCBjb2RlIHBhdGhzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7lgjd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 19:04:13 +0000 UTC FinishedAt: 2026-07-16 19:29:42 +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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgZm9saW8gYWxsb2NhdGlvbiBBUEkuIEl0IHJlbmFtZXMgYF9fZm9saW9fYWxsb2Nfbm9kZWAgdG8gYGZvbGlvX2FsbG9jX25vZGVgLCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgIChtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCksIGFuZCBtb3ZlcyBzb21lIG1lbXBvbGljeSBkZWNsYXJhdGlvbnMgdG8gYW4gaW50ZXJuYWwgaGVhZGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCBmZWF0dXJlcywgb3IgY29tcGxleCBjb2RlIHBhdGhzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjMjA0MTJiZjViNzMyMjk5NjNkOTIyZWE4ZmYyYjBjZWJkMWQ0OTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxOToyNzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA4ODEzZDVkN2ViMGMxZi4uOWNkZTk5YzI1OTYzOTcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNzA2OCw2ICYjNDM7MTcwNjgsNyBAQCBGOlx0aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbiBGOlx0bW0vbWVtcG9saWN5LmNcbiYjNDM7RjpcdG1tL21lbXBvbGljeS5oXG4gRjpcdG1tL21pZ3JhdGUuY1xuIEY6XHRtbS9taWdyYXRlX2RldmljZS5jXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jIGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jXG5pbmRleCAzYmFiMTc1ZDg1NTcxYS4uNDdlMDc1OWYwZTBhZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xuQEAgLTU2LDE0ICYjNDM7NTYsNyBAQCB2b2lkICppb21tdV9hbGxvY19wYWdlc19ub2RlX3N6KGludCBuaWQsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUpXG4gXHQgKi9cbiBcdG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuIFxuLVx0Lypcbi1cdCAqIF9fZm9saW9fYWxsb2Nfbm9kZSgpIGRvZXMgbm90IGhhbmRsZSBOVU1BX05PX05PREUgbGlrZVxuLVx0ICogYWxsb2NfcGFnZXNfbm9kZSgpIGRpZC5cbi1cdCAqL1xuLVx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXG4tXHRcdG5pZCA9IG51bWFfbWVtX2lkKCk7XG4tXG4tXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShnZnAgfCBfX0dGUF9aRVJPLCBvcmRlciwgbmlkKTtcbiYjNDM7XHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7XG4gXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbkBAIC0zODQsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGFibGVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSlcbiBcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcDtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4tXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4mIzQzO1x0Zm9saW8gPSBmb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJUkRfVEFCTEVfUEFHRV9PUkRFUiwgaXJkZS1cdTAwM2Vub2RlKTtcbiBcdGlmICghZm9saW8pIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vZGUgWyVkXSByZWRpcmVjdCB0YWJsZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxuXCYjMzQ7LCBpcmRlLVx1MDAzZW5vZGUpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfcXVldWVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSlcbiBcdHN0cnVjdCByZWRpcmVjdF9xdWV1ZSAqaW52X3F1ZXVlID0gXHUwMDI2aXJkZS1cdTAwM2VpbnZfcXVldWU7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuLVx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVl9RVUVVRV9QQUdFX09SREVSLCBpcmRlLVx1MDAzZW5vZGUpO1xuJiM0MztcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHByX2VycihcJiMzNDtOb2RlIFslZF0gaW52YWxpZCBxdWV1ZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxuXCYjMzQ7LCBpcmRlLVx1MDAzZW5vZGUpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuaW5kZXggODcyYmM1M2YzMmVjODcuLjE3YzE0YjhjYTAwN2RjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTExLDcgJiM0MzsxMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuIFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcbi1zdHJ1Y3QgbWVtcG9saWN5O1xuIFxuIC8qIEhlbHBlciBtYWNybyB0byBhdm9pZCBnZnAgZmxhZ3MgaWYgdGhleSBhcmUgdGhlIGRlZmF1bHQgb25lICovXG4gI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGJcbkBAIC0yMDQsMTAgJiM0MzsyMDMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH1cbiAjZW5kaWZcbiBcbi1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLSNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuLVxuIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXG4gXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuQEAgLTI1MiwxNSAmIzQzOzI0Nyw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3YXJuX2lmX25vZGVfb2ZmbGluZShpbnQgdGhpc19ub2RlLCBnZnBfdCBnZnBfbWFzaylcbiBcdGR1bXBfc3RhY2soKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcbi17XG4tXHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcCk7XG4tXG4tXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMKTtcbi19XG4mIzQzO3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpO1xuIFxuLSNkZWZpbmUgIF9fZm9saW9fYWxsb2Nfbm9kZSguLi4pXHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuJiM0MzsjZGVmaW5lICBmb2xpb19hbGxvY19ub2RlKC4uLilcdFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuIC8qXG4gICogQWxsb2NhdGUgcGFnZXMsIHByZWZlcnJpbmcgdGhlIG5vZGUgZ2l2ZW4gYXMgbmlkLiBXaGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG5AQCAtMjc0LDggJiM0MzsyNjMsNiBAQCBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlclxuICNpZmRlZiBDT05GSUdfTlVNQVxuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1zdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7XG4gc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyKTtcbiAjZWxzZVxuQEAgLTI4NSwxMiAmIzQzOzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyXG4gfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xuLX1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKVxuLXtcbi1cdHJldHVybiBmb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlcik7XG4mIzQzO1x0cmV0dXJuIGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpKTtcbiB9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5AQCAtMzAxLDcgJiM0MzsyODMsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlcixcbiBcbiAjZGVmaW5lIGFsbG9jX3BhZ2VzKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuICNkZWZpbmUgZm9saW9fYWxsb2MoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tI2RlZmluZSBmb2xpb19hbGxvY19tcG9sKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19tcG9sX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gI2RlZmluZSB2bWFfYWxsb2NfZm9saW8oLi4uKVx0XHRcdGFsbG9jX2hvb2tzKHZtYV9hbGxvY19mb2xpb19ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuICNkZWZpbmUgYWxsb2NfcGFnZShnZnBfbWFzaykgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIDApXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCAxZGJiNGM2ZjgyNGU5YS4uMWNmOTE5NzBhNjg1MDEgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTUyLDYgJiM0Mzs1Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21lbXBvbGljeS5oXCYjMzQ7XG4gXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2ZpbGVtYXAuaFx1MDAzZVxuQEAgLTYzLDYgJiM0Mzs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21tYW4uaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDttZW1wb2xpY3kuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuIFxuIC8qXG5AQCAtMTAwNSw3ICYjNDM7MTAwNyw3IEBAIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGRvIHtcbiBcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuIFx0XHRcdG4gPSBjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKCk7XG4tXHRcdFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xuJiM0MztcdFx0XHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xuIFx0XHR9IHdoaWxlICghZm9saW8gXHUwMDI2XHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xuIFxuIFx0XHRyZXR1cm4gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTcyMGY3ZjU0ZDk0MmYuLjMxYzRlOWY0OWI1ZTllIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMTE5LDYgJiM0MzsxMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttZW1wb2xpY3kuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuIFxuIC8qIEludGVybmFsIGZsYWdzICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kODBmZTRjNTU5Nzg2ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmhcbkBAIC0wLDAgJiM0MzsxLDMxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIG1tLWludGVybmFsIEFQSSBmb3IgbWVtcG9saWN5LmMuIFB1YmxpYyBBUEkgbGl2ZXMgaW5cbiYjNDM7ICogaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgX19NTV9NRU1QT0xJQ1lfSFxuJiM0MzsjZGVmaW5lIF9fTU1fTUVNUE9MSUNZX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX05VTUFcbiYjNDM7c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBmb2xpb19hbGxvY19tcG9sKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19tcG9sX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuJiM0MzsjZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuJiM0MztcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19NTV9NRU1QT0xJQ1lfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMjIyYzhjMTVmNzgyZjcuLmI3ODM2YjAyZjMyZGJlIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0yNjgyLDcgJiM0MzsyNjgyLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlzcGxhY2VkX2RzdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0XHRfX0dGUF9OT1dBUk47XG4gXHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9SRUNMQUlNO1xuIFx0fVxuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZShnZnAsIG9yZGVyLCBuaWQpO1xuJiM0MztcdHJldHVybiBmb2xpb19hbGxvY19ub2RlKGdmcCwgb3JkZXIsIG5pZCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAzN2EzYzFjMDBlMTY5Ni4uZmY4NTE1ZTE3M2UxZWYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU0MzUsMTEgJiM0Mzs1NDM1LDIzIEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YpO1xuIHN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRub2RlbWFza190ICpub2RlbWFzaylcbiB7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCB8IF9fR0ZQX0NPTVAsIG9yZGVyLFxuLVx0XHRcdFx0XHRwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChwcmVmZXJyZWRfbmlkID09IE5VTUFfTk9fTk9ERSlcbiYjNDM7XHRcdHByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpO1xuJiM0MztcbiYjNDM7XHR3YXJuX2lmX25vZGVfb2ZmbGluZShwcmVmZXJyZWRfbmlkLCBnZnApO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsXG4mIzQzO1x0XHRcdFx0ICAgIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcbiBcdHJldHVybiBwYWdlX3JtYXBwYWJsZV9mb2xpbyhwYWdlKTtcbiB9XG4tRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2FsbG9jX25vcHJvZik7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub2RlX25vcHJvZik7XG4gXG4gLypcbiAgKiBDb21tb24gaGVscGVyIGZ1bmN0aW9ucy4gTmV2ZXIgdXNlIHdpdGggX19HRlBfSElHSE1FTSBiZWNhdXNlIHRoZSByZXR1cm5lZFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuaCBiL21tL3BhZ2VfYWxsb2MuaFxuaW5kZXggYjkyNTlkZWRkYjU5ZDcuLjQwOWJlMzE4OThhZTc3IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmhcbkBAIC0yNTgsNiAmIzQzOzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfblxuIFx0XHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiAjZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbiYjNDM7c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG4mIzQzO1x0XHRub2RlbWFza190ICpub2RlbWFzayk7XG4mIzQzOyNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuJiM0MztcbiBleHRlcm4gdm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gZXh0ZXJuIHZvaWQgem9uZV9wY3BfZGlzYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gZXh0ZXJuIHZvaWQgem9uZV9wY3BfZW5hYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjY5ZjU2MTMzMmJiOTM0IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTQxLDYgJiM0Mzs0MSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcGZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmljb2RlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWVtcG9saWN5LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbiBcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDViZTgyNTkxMWU2NDVlLi44Y2NkMDNjMzlhNDA3MSAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21lbXBvbGljeS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzI5Li43NDM1MGEyZTA3MDM2ZSAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3ZjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3ZjLmNcbkBAIC03MTEsNyAmIzQzOzcxMSw3IEBAIHN2Y19wcmVwYXJlX3RocmVhZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCwgaW50IG5vZGUpXG4gXHRycXN0cC1cdTAwM2VycV9zZXJ2ZXIgPSBzZXJ2O1xuIFx0cnFzdHAtXHUwMDNlcnFfcG9vbCA9IHBvb2w7XG4gXG4tXHRycXN0cC1cdTAwM2VycV9zY3JhdGNoX2ZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xuJiM0MztcdHJxc3RwLVx1MDAzZXJxX3NjcmF0Y2hfZm9saW8gPSBmb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xuIFx0aWYgKCFycXN0cC1cdTAwM2VycV9zY3JhdGNoX2ZvbGlvKVxuIFx0XHRnb3RvIG91dF9lbm9tZW07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBhbGxvY2F0aW9uIEFQSS4gSXQgcmVuYW1lcyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAsIG1vdmVzIHRoZSBgTlVNQV9OT19OT0RFYCBjaGVjayBpbnRvIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgKG1ha2luZyBpdCBjb25zaXN0ZW50IHdpdGggYGFsbG9jX3BhZ2VzX25vZGVgKSwgYW5kIG1vdmVzIHNvbWUgbWVtcG9saWN5IGRlY2xhcmF0aW9ucyB0byBhbiBpbnRlcm5hbCBoZWFkZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMsIGZlYXR1cmVzLCBvciBjb21wbGV4IGNvZGUgcGF0aHMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzIwNDEyYmY1YjczMjI5OTYzZDkyMmVhOGZmMmIwY2ViZDFkNDkyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTk6Mjc6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDg4MTNkNWQ3ZWIwYzFmLi45Y2RlOTljMjU5NjM5NyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3MDY4LDYgJiM0MzsxNzA2OCw3IEBAIEY6CWluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaAogRjoJaW5jbHVkZS9saW51eC9taWdyYXRlLmgKIEY6CWluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgKIEY6CW1tL21lbXBvbGljeS5jCiYjNDM7RjoJbW0vbWVtcG9saWN5LmgKIEY6CW1tL21pZ3JhdGUuYwogRjoJbW0vbWlncmF0ZV9kZXZpY2UuYwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMKaW5kZXggM2JhYjE3NWQ4NTU3MWEuLjQ3ZTA3NTlmMGUwYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jCkBAIC01NiwxNCAmIzQzOzU2LDcgQEAgdm9pZCAqaW9tbXVfYWxsb2NfcGFnZXNfbm9kZV9zeihpbnQgbmlkLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKQogCSAqLwogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCi0JLyoKLQkgKiBfX2ZvbGlvX2FsbG9jX25vZGUoKSBkb2VzIG5vdCBoYW5kbGUgTlVNQV9OT19OT0RFIGxpa2UKLQkgKiBhbGxvY19wYWdlc19ub2RlKCkgZGlkLgotCSAqLwotCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQotCQluaWQgPSBudW1hX21lbV9pZCgpOwotCi0JZm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7CiYjNDM7CWZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShnZnAgfCBfX0dGUF9aRVJPLCBvcmRlciwgbmlkKTsKIAlpZiAodW5saWtlbHkoIWZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jCmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jCkBAIC0zODQsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGFibGVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSkKIAl1bnNpZ25lZCBsb25nICpiaXRtYXA7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAotCWZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJUkRfVEFCTEVfUEFHRV9PUkRFUiwgaXJkZS0mZ3Q7bm9kZSk7CiYjNDM7CWZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtJmd0O25vZGUpOwogCWlmICghZm9saW8pIHsKIAkJcHJfZXJyKCYjMzQ7Tm9kZSBbJWRdIHJlZGlyZWN0IHRhYmxlIGFsbG9jIHBhZ2VzIGZhaWxlZCFcbiYjMzQ7LCBpcmRlLSZndDtub2RlKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfcXVldWVfaW5pdChzdHJ1Y3QgcmVkaXJlY3RfZGVzYyAqaXJkZSkKIAlzdHJ1Y3QgcmVkaXJlY3RfcXVldWUgKmludl9xdWV1ZSA9ICZhbXA7aXJkZS0mZ3Q7aW52X3F1ZXVlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKLQlmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtJmd0O25vZGUpOwomIzQzOwlmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVl9RVUVVRV9QQUdFX09SREVSLCBpcmRlLSZndDtub2RlKTsKIAlpZiAoIWZvbGlvKSB7CiAJCXByX2VycigmIzM0O05vZGUgWyVkXSBpbnZhbGlkIHF1ZXVlIGFsbG9jIHBhZ2VzIGZhaWxlZCFcbiYjMzQ7LCBpcmRlLSZndDtub2RlKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA4NzJiYzUzZjMyZWM4Ny4uMTdjMTRiOGNhMDA3ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMTEsNyAmIzQzOzExLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7Ci1zdHJ1Y3QgbWVtcG9saWN5OwogCiAvKiBIZWxwZXIgbWFjcm8gdG8gYXZvaWQgZ2ZwIGZsYWdzIGlmIHRoZXkgYXJlIHRoZSBkZWZhdWx0IG9uZSAqLwogI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGIKQEAgLTIwNCwxMCAmIzQzOzIwMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9CiAjZW5kaWYKIAotc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCi0JCW5vZGVtYXNrX3QgKm5vZGVtYXNrKTsKLSNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pCQkJYWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKQotCiB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAJCQkJbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcywKIAkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwpAQCAtMjUyLDE1ICYjNDM7MjQ3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHdhcm5faWZfbm9kZV9vZmZsaW5lKGludCB0aGlzX25vZGUsIGdmcF90IGdmcF9tYXNrKQogCWR1bXBfc3RhY2soKTsKIH0KIAotc3RhdGljIGlubGluZQotc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKQotewotCXdhcm5faWZfbm9kZV9vZmZsaW5lKG5pZCwgZ2ZwKTsKLQotCXJldHVybiBfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIE5VTEwpOwotfQomIzQzO3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpOwogCi0jZGVmaW5lICBfX2ZvbGlvX2FsbG9jX25vZGUoLi4uKQkJYWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpCiYjNDM7I2RlZmluZSAgZm9saW9fYWxsb2Nfbm9kZSguLi4pCQlhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpCiAKIC8qCiAgKiBBbGxvY2F0ZSBwYWdlcywgcHJlZmVycmluZyB0aGUgbm9kZSBnaXZlbiBhcyBuaWQuIFdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSwKQEAgLTI3NCw4ICYjNDM7MjYzLDYgQEAgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIKICNpZmRlZiBDT05GSUdfTlVNQQogc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7CiBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7Ci1zdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLAotCQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7CiBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIpOwogI2Vsc2UKQEAgLTI4NSwxMiAmIzQzOzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyCiB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCXJldHVybiBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpKTsKLX0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwKLQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpCi17Ci0JcmV0dXJuIGZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpKTsKIH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgaW50IG9yZGVyLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtMzAxLDcgJiM0MzsyODMsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlciwKIAogI2RlZmluZSBhbGxvY19wYWdlcyguLi4pCQkJYWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSkKICNkZWZpbmUgZm9saW9fYWxsb2MoLi4uKQkJCWFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIGZvbGlvX2FsbG9jX21wb2woLi4uKQkJCWFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKF9fVkFfQVJHU19fKSkKICNkZWZpbmUgdm1hX2FsbG9jX2ZvbGlvKC4uLikJCQlhbGxvY19ob29rcyh2bWFfYWxsb2NfZm9saW9fbm9wcm9mKF9fVkFfQVJHU19fKSkKIAogI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAxZGJiNGM2ZjgyNGU5YS4uMWNmOTE5NzBhNjg1MDEgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTUyLDYgJiM0Mzs1Miw3IEBACiAKICNpbmNsdWRlICZsdDthc20vdGxiZmx1c2guaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZW1wb2xpY3kuaCYjMzQ7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9maWxlbWFwLmgmZ3Q7CkBAIC02Myw2ICYjNDM7NjQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7YXNtL21tYW4uaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7bWVtcG9saWN5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCiAvKgpAQCAtMTAwNSw3ICYjNDM7MTAwNyw3IEBAIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCWRvIHsKIAkJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiAJCQluID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpOwotCQkJZm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pOwomIzQzOwkJCWZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7CiAJCX0gd2hpbGUgKCFmb2xpbyAmYW1wOyZhbXA7IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpOwogCiAJCXJldHVybiBmb2xpbzsKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggNTcyMGY3ZjU0ZDk0MmYuLjMxYzRlOWY0OWI1ZTllIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTE5LDYgJiM0MzsxMTksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbW9yeS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWVtcG9saWN5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogCiAvKiBJbnRlcm5hbCBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZDgwZmU0YzU1OTc4NmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuaApAQCAtMCwwICYjNDM7MSwzMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBtbS1pbnRlcm5hbCBBUEkgZm9yIG1lbXBvbGljeS5jLiBQdWJsaWMgQVBJIGxpdmVzIGluCiYjNDM7ICogaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC4KJiM0MzsgKi8KJiM0MzsjaWZuZGVmIF9fTU1fTUVNUE9MSUNZX0gKJiM0MzsjZGVmaW5lIF9fTU1fTUVNUE9MSUNZX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbXBvbGljeS5oJmd0OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzO3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlcik7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNkZWZpbmUgZm9saW9fYWxsb2NfbXBvbCguLi4pCQkJYWxsb2NfaG9va3MoZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoX19WQV9BUkdTX18pKQomIzQzOwomIzQzO3Vuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCwKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTsKJiM0MzsjZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pCQkJCVwKJiM0MzsJYWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSkKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NTV9NRU1QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDIyMmM4YzE1Zjc4MmY3Li5iNzgzNmIwMmYzMmRiZSAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMjY4Miw3ICYjNDM7MjY4Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsCiAJCQlfX0dGUF9OT1dBUk47CiAJCWdmcCAmYW1wOz0gfl9fR0ZQX1JFQ0xBSU07CiAJfQotCXJldHVybiBfX2ZvbGlvX2FsbG9jX25vZGUoZ2ZwLCBvcmRlciwgbmlkKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2FsbG9jX25vZGUoZ2ZwLCBvcmRlciwgbmlkKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAzN2EzYzFjMDBlMTY5Ni4uZmY4NTE1ZTE3M2UxZWYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTU0MzUsMTEgJiM0Mzs1NDM1LDIzIEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YpOwogc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCiAJCW5vZGVtYXNrX3QgKm5vZGVtYXNrKQogewotCXN0cnVjdCBwYWdlICpwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCi0JCQkJCXByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CWlmIChwcmVmZXJyZWRfbmlkID09IE5VTUFfTk9fTk9ERSkKJiM0MzsJCXByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpOwomIzQzOwomIzQzOwl3YXJuX2lmX25vZGVfb2ZmbGluZShwcmVmZXJyZWRfbmlkLCBnZnApOwomIzQzOwomIzQzOwlwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCiYjNDM7CQkJCSAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7CiAJcmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpOwogfQotRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2FsbG9jX25vcHJvZik7CiYjNDM7CiYjNDM7c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIE5VTEwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKTsKIAogLyoKICAqIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zLiBOZXZlciB1c2Ugd2l0aCBfX0dGUF9ISUdITUVNIGJlY2F1c2UgdGhlIHJldHVybmVkCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmggYi9tbS9wYWdlX2FsbG9jLmgKaW5kZXggYjkyNTlkZWRkYjU5ZDcuLjQwOWJlMzE4OThhZTc3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5oCkBAIC0yNTgsNiAmIzQzOzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbgogCQlub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTsKICNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pCQkJYWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKQogCiYjNDM7c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCiYjNDM7CQlub2RlbWFza190ICpub2RlbWFzayk7CiYjNDM7I2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLikJCQlhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpCiYjNDM7CiBleHRlcm4gdm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSk7CiBleHRlcm4gdm9pZCB6b25lX3BjcF9kaXNhYmxlKHN0cnVjdCB6b25lICp6b25lKTsKIGV4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1MDcxMTc3MDU5YTk2NC4uNjlmNTYxMzMyYmI5MzQgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtNDEsNiAmIzQzOzQxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zd2FwZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2l2ZXJzaW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdW5pY29kZS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWVtcG9saWN5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA1YmU4MjU5MTFlNjQ1ZS4uOGNjZDAzYzM5YTQwNzEgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZW1wb2xpY3kuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXBfdGFibGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGFlOWVjNGJmMzRmNzI5Li43NDM1MGEyZTA3MDM2ZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC03MTEsNyAmIzQzOzcxMSw3IEBAIHN2Y19wcmVwYXJlX3RocmVhZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCwgaW50IG5vZGUpCiAJcnFzdHAtJmd0O3JxX3NlcnZlciA9IHNlcnY7CiAJcnFzdHAtJmd0O3JxX3Bvb2wgPSBwb29sOwogCi0JcnFzdHAtJmd0O3JxX3NjcmF0Y2hfZm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCwgMCwgbm9kZSk7CiYjNDM7CXJxc3RwLSZndDtycV9zY3JhdGNoX2ZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMLCAwLCBub2RlKTsKIAlpZiAoIXJxc3RwLSZndDtycV9zY3JhdGNoX2ZvbGlvKQogCQlnb3RvIG91dF9lbm9tZW07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2xpbyBBbGxvY2F0aW9uIEFQSSBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCYjMzk7cyBhIHJlZmFjdG9yLCBwbGFpbiBhbmQgc2ltcGxlLiBUaGV5JiMzOTtyZSByZW5hbWluZyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAgYW5kIG1vdmluZyB0aGUgYE5VTUFfTk9fTk9ERWAgbG9naWMgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgLiBJdCBhbHNvIGxvb2tzIGxpa2UgYGZvbGlvX2FsbG9jX21wb2xgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgIGFyZSBiZWluZyBzaHVmZmxlZCBpbnRvIGEgbmV3IGludGVybmFsIGhlYWRlciwgYG1tL21lbXBvbGljeS5oYC4gTm8gYmlnIHN1cnByaXNlcyB0aGVyZSwganVzdCB0aWR5aW5nIHRoaW5ncyB1cC4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIGluIGBkcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNgLCBgZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY2AsIGBtbS9maWxlbWFwLmNgLCBgbW0vbWlncmF0ZS5jYCBhbmQgYG5ldC9zdW5ycGMvc3ZjLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWUsIHJlcGxhY2luZyB0aGUgb2xkIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggdGhlIG5ldyBgZm9saW9fYWxsb2Nfbm9kZWAgaW4gdGhvc2UgbG9jYXRpb25zLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gaXMgY2hhbmdlZCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHRocm91Z2ggYGluY2x1ZGUvbGludXgvZ2ZwLmhgLgoKVGhlIGNvcmUgbG9naWMgY2hhbmdlIGlzIHJlYWxseSB0aGUgaGFuZGxpbmcgb2YgYE5VTUFfTk9fTk9ERWAuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgYE5VTUFfTk9fTk9ERWAgd2FzIGJlaW5nIGhhbmRsZWQgYXQgdGhlIGNhbGwgc2l0ZSBvZiBgX19mb2xpb19hbGxvY19ub2RlYCwgb3Igd2FzIGl0IGRlZmluZWQgYXQgYWxsPyBUaGUgcGF0Y2ggbW92ZXMgdGhpcyBjaGVjayBpbnRvIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgaXRzZWxmLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgLiBOb3csIGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAgaXMgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCwgbWFraW5nIHRoZSBjb2RlIGNsZWFuZXIuCgpCZWZvcmUsIGBmb2xpb19hbGxvY19ub2RlYCB3YXMgYSBtYWNybyB0aGF0IGNhbGxlZCBgX19mb2xpb19hbGxvY19ub2RlX25vcHJvZmAuIE5vdyBgZm9saW9fYWxsb2Nfbm9kZWAgZGlyZWN0bHkgY2FsbHMgYGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYC4KYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCBub3cgaGFuZGxlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgYW5kIGB3YXJuX2lmX25vZGVfb2ZmbGluZWAuCgpTbywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGlzIHRoZXJlIHJlYWxseSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2U/IFRoZSBjb3JlIGFsbG9jYXRpb24gbWVjaGFuaXNtIGl0c2VsZiBzZWVtcyB1bnRvdWNoZWQuIEl0JiMzOTtzIGp1c3QgYW4gQVBJIGNoYW5nZSB3aXRoIHNvbWUgbG9naWMgcmVhcnJhbmdlbWVudC4gVGhlIHBvdGVudGlhbCBmb3IgbmV3IGJ1Z3MgaGVyZSBzZWVtcyBwcmV0dHkgbG93LCBnaXZlbiB0aGF0IGl0JiMzOTtzIGp1c3QgcmVvcmdhbml6aW5nIGV4aXN0aW5nIGNvZGUgYW5kIGNlbnRyYWxpemluZyB0aGF0IGBOVU1BX05PX05PREVgIGNoZWNrLiBXaGlsZSBJJiMzOTtkIG5ldmVyIHJ1bGUgb3V0IHRoZSAqcG9zc2liaWxpdHkqIG9mIGEgc3VidGxlIGlzc3VlLCBpdCBkb2VzbiYjMzk7dCBqdW1wIG91dCBhdCBtZSBhcyBhIHByaW1lIHRhcmdldCBmb3IgaW50ZW5zaXZlIGZ1enppbmcgZWZmb3J0cy4gSXQgbWlnaHQgc3RpbGwgYmUgd29ydGggc29tZSBjdXJzb3J5IGZ1enppbmcsIGJ1dCBpdCBwcm9iYWJseSBzaG91bGRuJiMzOTt0IGJlIGEgcHJpb3JpdHkuIFdlIHdvdWxkIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2FsbG9jX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NTQzMz1FWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDM0LVxubW0vcGFnZV9hbGxvYy5jOjU0MzU6c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTQzNi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU0NTA9c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcbm1tL3BhZ2VfYWxsb2MuYy01NDUxLXtcbm1tL3BhZ2VfYWxsb2MuYzo1NDUyOlx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG5tbS9wYWdlX2FsbG9jLmMtNTQ1My19XG4tLVxubW0vcGFnZV9hbGxvYy5oPTI1Nz1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuaC0yNjAtXG5tbS9wYWdlX2FsbG9jLmg6MjYxOnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5oLTI2Mi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xubW0vcGFnZV9hbGxvYy5oOjI2MzojZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcbm1tL3BhZ2VfYWxsb2MuaC0yNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGb2xpbyBBbGxvY2F0aW9uIEZsb3cqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZm9saW8gYWxsb2NhdGlvbiBwYXRoLiBJdCBsb29rcyBsaWtlIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGJ5IGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAgYW5kIGFsc28gYnkgYF9fZm9saW9fYWxsb2NgLiBIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYF9fZm9saW9fYWxsb2NgIGlzIGFjdHVhbGx5IGEgbWFjcm8uIFRoZSBtYWNybyBleHBhbmRzIHRvIGNhbGwgYF9fZm9saW9fYWxsb2Nfbm9wcm9mYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXI7IGEgbWFjcm8gYWJzdHJhY3Rpb24gaXMgaW4gcGxhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBjaGFpbiAqYmVnaW4qPyBXaG8mIzM5O3MgdGhlIGNhbGxpbmcgZnVuY3Rpb24gb2YgYF9fZm9saW9fYWxsb2NgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgdG8gdGhpcyB3aG9sZSBwcm9jZXNzLCB0aGUgcm9vdCBvZiB0aGUgY2FsbHMuIFRyYWNpbmcgdGhhdCBiYWNrIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2FsbG9jXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xMjM4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjQ1LVxubW0va2h1Z2VwYWdlZC5jOjEyNDY6XHRmb2xpbyA9IF9fZm9saW9fYWxsb2MoZ2ZwLCBvcmRlciwgbm9kZSwgXHUwMDI2Y2MtXHUwMDNlYWxsb2Nfbm1hc2spO1xubW0va2h1Z2VwYWdlZC5jLTEyNDctXHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vbWlncmF0ZS5jPTIxOTk9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyMzQtXG5tbS9taWdyYXRlLmM6MjIzNTpcdHJldHVybiBfX2ZvbGlvX2FsbG9jKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBtdGMtXHUwMDNlbm1hc2spO1xubW0vbWlncmF0ZS5jLTIyMzYtfVxuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNjE9c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmgtMjYyLVx0XHRub2RlbWFza190ICpub2RlbWFzayk7XG5tbS9wYWdlX2FsbG9jLmg6MjYzOiNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxubW0vcGFnZV9hbGxvYy5oLTI2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBfX2ZvbGlvX2FsbG9jYCBDYWxsIFNpdGUgYW5kIE5VTUEgTm9kZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBfX2ZvbGlvX2FsbG9jYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5IGBhbGxvY19jaGFyZ2VfZm9saW9gIGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBhbHNvIGJ5IGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCwgcHJpb3IgdG8gdGhpcyBwYXRjaCwgYF9fZm9saW9fYWxsb2NgIHdhc24mIzM5O3QgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgYE5VTUFfTk9fTk9ERWAgdmFsdWUuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgY2FsbGVycyB3ZXJlIGludGVyYWN0aW5nIHdpdGggaXQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCB3ZXJlIGVpdGhlciBvZiB0aG9zZSBmdW5jdGlvbnMsIGBhbGxvY19jaGFyZ2VfZm9saW9gIG9yIGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCwgKmV2ZW4qIHBhc3NpbmcgYE5VTUFfTk9fTk9ERWA/IExldCYjMzk7cyBicmVhayBpdCBkb3duLi4uIGBhbGxvY19jaGFyZ2VfZm9saW9gIHNlZW1zIHRvIHBhc3MgYSBgbm9kZWAgdmFsdWUsIHdoaWxlIGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBwYXNzZXMgYSBgbmlkYC4gSWYgZWl0aGVyIHdhcyBhY3R1YWxseSBzZW5kaW5nIGBOVU1BX05PX05PREVgIGRvd24gdGhlIGxpbmUsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIHJlYWNoIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuIFRoYXQgZnVuY3Rpb24gKnNob3VsZCogaGFuZGxlIHRoZSBgTlVNQV9OT19OT0RFYCBzY2VuYXJpbywgcmlnaHQ/CgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQmIzM5O3Mgd3JvbmcuIExldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGZ1bmN0aW9uIGluIGBtbS9wYWdlX2FsbG9jLmNgLi4uIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgY3J1Y2lhbCB0aGF0IEkgdmVyaWZ5IHRoaXMgcGllY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19wYWdlc19ub3Byb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUxMDY9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjQwLWZhaWxlZDpcbm1tL3BhZ2VfYWxsb2MuYzo1MjQxOlx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xubW0vcGFnZV9hbGxvYy5jLTUyNDItXHRpZiAocGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTQxMD1FWFBPUlRfU1lNQk9MKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTQxMS1cbm1tL3BhZ2VfYWxsb2MuYzo1NDEyOnN0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy01NDEzLVx0XHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTQyND1zdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQzMC1cbm1tL3BhZ2VfYWxsb2MuYzo1NDMxOlx0cmV0dXJuIF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDMyLX1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTQzNT1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ0NC1cbm1tL3BhZ2VfYWxsb2MuYzo1NDQ1Olx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCB8IF9fR0ZQX0NPTVAsIG9yZGVyLFxubW0vcGFnZV9hbGxvYy5jLTU0NDYtXHRcdFx0XHQgICAgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNTU9dm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmgtMjU2LVxubW0vcGFnZV9hbGxvYy5oOjI1NzpzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5oLTI1OC1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG5tbS9wYWdlX2FsbG9jLmg6MjU5OiNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxubW0vcGFnZV9hbGxvYy5oLTI2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3b3JraW5ncyBvZiBgX19hbGxvY19wYWdlc19ub3Byb2ZgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBubyBkb3VidCwgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGdvdCBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiB0cmlja3MgaGlkZGVuIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIGxvZ2ljLCBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMgdGhhdCBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIE5VTUEsIHBhZ2UgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSwgbG93LW1lbW9yeSBzaXR1YXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgc2xhYiBhbGxvY2F0aW9uIG9yIGRpcmVjdCBwaHlzaWNhbCBtYXBwaW5nOyBpdOKAmXMgbGlrZWx5IGEgYmFzZSBsYXllciB0aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGJ1aWxkIHVwb24uIEdvdHRhIGdldCB0aGlzIHJpZ2h0LiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MTI6XHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41NDEzOlx0XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuNTQxNDpcdHtcbjU0MTU6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuNTQxNjpcdFxuNTQxNzpcdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayxcbjU0MTg6XHRcdFx0XHRcdFx0ICAgYWxsb2NfZmxhZ3MpO1xuNTQxOTpcdFx0aWYgKHBhZ2UpXG41NDIwOlx0XHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG41NDIxOlx0XHRyZXR1cm4gcGFnZTtcbjU0MjI6XHR9XG41NDIzOlx0XG41NDI0Olx0c3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG41NDI1Olx0e1xuNTQyNjpcdFx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXG41NDI3Olx0XHRcdG5pZCA9IG51bWFfbWVtX2lkKCk7XG41NDI4Olx0XG41NDI5Olx0XHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcF9tYXNrKTtcbjU0MzA6XHRcbjU0MzE6XHRcdHJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTQwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlVNQSBOb2RlIEhhbmRsaW5nIGluIFBhZ2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBOVU1BX05PX05PREVgIHZhbHVlIGlzIGhhbmRsZWQgaW4gcGFnZSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBOVU1BIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIGFuZCB0aGUgYF9fZm9saW9fYWxsb2NgIGZ1bmN0aW9ucy4KCkluaXRpYWxseSwgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoZSBgTlVNQV9OT19OT0RFYCBjYXNlIGJ5IGNhbGxpbmcgYG51bWFfbWVtX2lkKClgIHRvIGdldCB0aGUgY3VycmVudCBub2RlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgaXRzZWxmICpkb2VzbiYjMzk7dCogaGFuZGxlIGBOVU1BX05PX05PREVgIGRpcmVjdGx5LgoKTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgX19mb2xpb19hbGxvY19ub3Byb2ZgLCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIGZvbGlvIHN0cnVjdHVyZXMsIHVzZWQgdG8gcGFzcyB0aGUgbm9kZSBJRCBkb3duIHRvIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuIFRoZSBwb2ludCBpcywgdGhlIG9sZCBgX19mb2xpb19hbGxvY19ub2RlX25vcHJvZmAgKmFsc28qIGRpZCAqbm90KiBoYW5kbGUgYE5VTUFfTk9fTk9ERWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBfX2ZvbGlvX2FsbG9jX25vZGVgICh3aGljaCBpdHNlbGYgY2FsbGVkIGBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYCksIGFsc28gZGlkIE5PVCBoYW5kbGUgYE5VTUFfTk9fTk9ERWAuIFRoaXMgbWVhbnQgdGhhdCBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCBoYWQgdG8gZG8gZXh0cmEgaGFuZGxpbmcgZm9yIHRoaXMsIHdoaWNoIGl0IGRpZC4KClRoaXMgcGF0Y2gsIGhvd2V2ZXIsIHJlZmFjdG9ycyB0aGluZ3MuIEl0IG1vdmVzIHRoZSBgTlVNQV9OT19OT0RFYCBoYW5kbGluZyAqaW50byogYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCBpdHNlbGYsIG1ha2luZyBpdCByZXNwb25zaWJsZSBmb3IgdGhlIGRlZmF1bHQgbm9kZSBzZWxlY3Rpb24uIFRoZSBjYWxsIGlzIG5vdyBtb3ZlZCB0byBgbnVtYV9tZW1faWQoKWAgYW5kIHRoZSBmdW5jdGlvbiByZW5hbWVkLiBOb3csIGBmb2xpb19hbGxvY19ub2RlYCBoYW5kbGVzIHRoaXMgY2FzZSBjb3JyZWN0bHksIGp1c3QgbGlrZSBgYWxsb2NfcGFnZXNfbm9kZWAgZG9lcy4gSXQgYWxzbyBtZWFucyB0aGF0IGFueSBjYWxsZXIgb2YgYF9fZm9saW9fYWxsb2Nfbm9kZWAgb3IgYF9fZm9saW9fYWxsb2NgIG5vdyBoYW5kbGVzIHRoZSBgLTFgIGBOVU1BX05PX05PREVgLgoKU28sIGl0JiMzOTtzIGEgbWlub3IgcmVmYWN0b3JpbmcsIGVzc2VudGlhbGx5LiBJdCByZXNvbHZlcyBhbiBBUEkgaW5jb25zaXN0ZW5jeS4gUHJldmlvdXNseSwgaWYgYC0xYCB3YXMgcGFzc2VkICh3aGljaCBlcXVhdGVzIHRvIGBOVU1BX05PX05PREVgKSB0byBgX19mb2xpb19hbGxvY2AsIGl0IHdhcyB0aGVuIHBhc3NlZCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgLgoKVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsbHkgaW1wb3J0YW50LCB0aG91Z2gsIGJlY2F1c2UgYW55IGNhbGxlciAqcmVseWluZyogb24gdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBub3cgcmVjZWl2ZSBpdCBjb3JyZWN0bHkuCldoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCAqYmVmb3JlKiBpZiBgTlVNQV9OT19OT0RFYCB3YXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucz8gV2VsbCwgaXQgd2lsbCBqdXN0IGdldCBwYXNzZWQgYXMgYC0xYC4gSSBuZWVkIHRvIHJldmlldyB3aGF0IGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGRvZXMgd2l0aCB0aGF0IGNhc2UsIGp1c3QgdG8gYmUgc3VyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjQwOT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0MjItXHRwcmVmZXJyZWRfZ2ZwIFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XG5tbS9tZW1wb2xpY3kuYzoyNDIzOlx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzayxcbm1tL21lbXBvbGljeS5jLTI0MjQtXHRcdFx0XHRcdCAgIEFMTE9DX0RFRkFVTFQpO1xubW0vbWVtcG9saWN5LmMtMjQyNS1cdGlmICghcGFnZSlcbm1tL21lbXBvbGljeS5jOjI0MjY6XHRcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjQyNy1cdFx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yNDQyPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDcyLVx0XHRcdCAqL1xubW0vbWVtcG9saWN5LmM6MjQ3MzpcdFx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKFxubW0vbWVtcG9saWN5LmMtMjQ3NC1cdFx0XHRcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXG4tLVxubW0vbWVtcG9saWN5LmMtMjQ4Ni1cbm1tL21lbXBvbGljeS5jOjI0ODc6XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xubW0vbWVtcG9saWN5LmMtMjQ4OC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTMyMz1zdGF0aWMgY29uc3QgZ2ZwX3QgZ2ZwX25vbG9jayA9IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT01FTUFMTE9DIHxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMyOC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1MzI5OnN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTMzMC1cdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MDktfVxubW0vcGFnZV9hbGxvYy5jOjU0MTA6RVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xubW0vcGFnZV9hbGxvYy5jLTU0MTEtXG5tbS9wYWdlX2FsbG9jLmM9NTQxMj1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTYtXG5tbS9wYWdlX2FsbG9jLmM6NTQxNzpcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNTQxOC1cdFx0XHRcdFx0ICAgYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03OTg3PXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzk5MS1cbm1tL3BhZ2VfYWxsb2MuYzo3OTkyOlx0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfZmxhZ3MsIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX05PTE9DSyk7XG5tbS9wYWdlX2FsbG9jLmMtNzk5My19XG4tLVxubW0vcGFnZV9hbGxvYy5oPTIzMD1leHRlcm4gaW50IHVzZXJfbWluX2ZyZWVfa2J5dGVzO1xubW0vcGFnZV9hbGxvYy5oLTIzMS1cbm1tL3BhZ2VfYWxsb2MuaDoyMzI6c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCxcbm1tL3BhZ2VfYWxsb2MuaC0yMzMtXHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5oLTIzNC0jZGVmaW5lIF9fYWxsb2NfZnJvemVuX3BhZ2VzKC4uLikgXFxcbm1tL3BhZ2VfYWxsb2MuaDoyMzU6XHRhbGxvY19ob29rcyhfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxubW0vcGFnZV9hbGxvYy5oLTIzNi12b2lkIGZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuaC0yNDMte1xubW0vcGFnZV9hbGxvYy5oOjI0NDpcdHJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG5tbS9wYWdlX2FsbG9jLmgtMjQ1LVx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbi0tXG5tbS9zbHViLmM9NTI5Mj1zdGF0aWMgdm9pZCAqX19fa21hbGxvY19sYXJnZV9ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXG4tLVxubW0vc2x1Yi5jLTUzMDUtXHRlbHNlXG5tbS9zbHViLmM6NTMwNjpcdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwsXG5tbS9zbHViLmMtNTMwNy1cdFx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBhbmQgTlVNQV9OT19OT0RFKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBkZWFscyB3aXRoIGBOVU1BX05PX05PREVgLiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBmcm96ZW4gcGFnZXMsIGxpa2VseSByZWxhdGVkIHRvIGVhcmx5IGJvb3Qgb3IgZXh0cmVtZWx5IGxvdy1sZXZlbCBrZXJuZWwgb3BlcmF0aW9ucy4gYE5VTUFfTk9fTk9ERWAgaXMgdGhlIGltcG9ydGFudCBiaXQsIGxpa2VseSBpbmRpY2F0aW5nIHRoYXQgYSBzcGVjaWZpYyBOVU1BIG5vZGUgaXNuJiMzOTt0IGRlZmluZWQsIG9yIHBlcmhhcHMgdGhhdCB3ZSYjMzk7cmUgaW50ZW50aW9uYWxseSBhdm9pZGluZyBOVU1BIGNvbnNpZGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBmb3IgaG93IGl0JiMzOTtzIGhhbmRsZWQuIElzIGl0IHRyZWF0ZWQgYXMgYW4gZXJyb3I/IERvZXMgaXQgZmFsbCBiYWNrIHRvIGEgZGVmYXVsdCBub2RlLCBtYXliZSBub2RlIHplcm8gb3IgYWxsIG5vZGVzPyBEb2VzIHRoZSBmdW5jdGlvbiBzaW1wbHkgcHJvY2VlZCB3aXRob3V0IE5VTUEgYXdhcmVuZXNzIGlmIGBOVU1BX05PX05PREVgIGlzIHRoZSB0YXJnZXQ/IFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgYWxsb2NhdG9ycyBwZXJmb3JtYW5jZSwgcm9idXN0bmVzcywgYW5kIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBgTlVNQV9OT19OT0RFYCBpcyBjaGVja2VkLCBob3cgaXQmIzM5O3MgdXNlZCBpbiBjYWxjdWxhdGlvbnMsIGFuZCB3aGVyZSBpdCBtYXkgYmUgdHJhbnNsYXRlZCB0byBvdGhlciBub2RlIGluZGljZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhpcyB2YXJpYWJsZS4gTXkgaW50ZXJlc3QgaXM6IHdoYXQgZG9lcyBpdCBkbz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzMjk6XHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuNTMzMDpcdFx0XHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjUzMzE6XHR7XG41MzMyOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUzMzM6XHRcdGdmcF90IGFsbG9jX2dmcDsgLyogVGhlIGdmcF90IHRoYXQgd2FzIGFjdHVhbGx5IHVzZWQgZm9yIGFsbG9jYXRpb24gKi9cbjUzMzQ6XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0ge1xuNTMzNTpcdFx0XHQuYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncyxcbjUzMzY6XHRcdH07XG41MzM3Olx0XHR1bnNpZ25lZCBpbnQgZmFzdHBhdGhfYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncztcbjUzMzg6XHRcbjUzMzk6XHRcdC8qIE90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXG41MzQwOlx0XHRpZiAoV0FSTl9PTihhbGxvY19mbGFncyBcdTAwMjYgfihBTExPQ19OT0xPQ0sgfCBBTExPQ19OT19DT0RFVEFHKSkpXG41MzQxOlx0XHRcdHJldHVybiBOVUxMO1xuNTM0MjpcdFxuNTM0MzpcdFx0aWYgKCFhbGxvY19vcmRlcl9hbGxvd2VkKGdmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzKSlcbjUzNDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG41MzQ1Olx0XG41MzQ2Olx0XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykge1xuNTM0NzpcdFx0XHQvKiBDZXJ0YWluIG90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXG41MzQ4Olx0XHRcdFZNX1dBUk5fT05fT05DRShnZnAgXHUwMDI2IH4oX19HRlBfQUNDT1VOVCB8IGdmcF9ub2xvY2spKTtcbjUzNDk6XHRcdFx0aWYgKCFhbGxvY19ub2xvY2tfYWxsb3dlZCgpKVxuNTM1MDpcdFx0XHRcdHJldHVybiBOVUxMO1xuNTM1MTpcdFx0XHRnZnAgfD0gZ2ZwX25vbG9jaztcbjUzNTI6XHRcdFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gQUxMT0NfV01BUktfTUlOO1xuNTM1MzpcdFx0fSBlbHNlIHtcbjUzNTQ6XHRcdFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gQUxMT0NfV01BUktfTE9XO1xuNTM1NTpcdFx0fVxuNTM1NjpcdFxuNTM1NzpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjUzNTg6XHRcdC8qXG41MzU5Olx0XHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcbjUzNjA6XHRcdCAqIHJlc3AuIEdGUF9OT0lPIHdoaWNoIGhhcyB0byBiZSBpbmhlcml0ZWQgZm9yIGFsbCBhbGxvY2F0aW9uIHJlcXVlc3RzXG41MzYxOlx0XHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxuNTM2MjpcdFx0ICogbWVtYWxsb2Nfbm97ZnMsaW99X3tzYXZlLHJlc3RvcmV9LiBBbmQgUEZfTUVNQUxMT0NfUElOIHdoaWNoIGVuc3VyZXNcbjUzNjM6XHRcdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxuNTM2NDpcdFx0ICovXG41MzY1Olx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG41MzY2Olx0XHRhbGxvY19nZnAgPSBnZnA7XG41MzY3Olx0XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLFxuNTM2ODpcdFx0XHRcdFx1MDAyNmFsbG9jX2dmcCwgXHUwMDI2ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBrZXkgYXNwZWN0cyBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgSSBwcmVzdW1lLCBpbiBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFnZXMuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBzZXR1cCBzdGFnZSBiZWZvcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBhbGxvY2F0aW9uIG9jY3Vycywgb3IgcGVyaGFwcyBzb21lIHByZS12YWxpZGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcmVwYXJpbmcgdG8gZG8sIGFuZCB3aGF0IGl0cyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLiBJcyBpdCB0YWtpbmcgYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXI/IEEgcmVxdWVzdCBzaXplPyBGbGFncyBpbmRpY2F0aW5nIGFsbG9jYXRpb24gYmVoYXZpb3I/IExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIHNlY3Rpb25zIG9yIGxvY2tpbmcgdGhhdCBhcmUgaGFwcGVuaW5nIGhlcmU/IFRoYXQmIzM5O3MgYWx3YXlzIGEgcG9pbnQgb2YgY29uY2Vybi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2FsbG9jX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz00NzMwPV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTAzNi1cbm1tL3BhZ2VfYWxsb2MuYzo1MDM3OnN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTAzOC1cdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTA2PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTE1NS1cdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG5tbS9wYWdlX2FsbG9jLmM6NTE1NjpcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG5tbS9wYWdlX2FsbG9jLmMtNTE1Ny1cdFx0Z290byBvdXQ7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzMjk9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM2Ni1cdGFsbG9jX2dmcCA9IGdmcDtcbm1tL3BhZ2VfYWxsb2MuYzo1MzY3Olx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYyxcbm1tL3BhZ2VfYWxsb2MuYy01MzY4LVx0XHRcdFx1MDAyNmFsbG9jX2dmcCwgXHUwMDI2ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhpcyBuYW1lOyBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHV6emxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGtleSByZXNwb25zaWJpbGl0aWVzIGhlcmU/IElzIGl0IGFib3V0IHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB2YWxpZGF0aW5nIHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgcHJlLXplcm9pbmcgcGFnZXMgb3IgaGFuZGxpbmcgY2FjaGUgY29uc2lkZXJhdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgYWxsb2NhdGlvbj8gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHNhbml0eSBjaGVja3Mgb24gdGhlIHJlcXVlc3RlZCBzaXplIGFuZCB0aGUgbWVtb3J5IHpvbmUsIG1heWJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBwYWdlIGZsYWdzLCBhbmQgcG90ZW50aWFsbHksIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTlVNQSBzeXN0ZW1zLCBzb21lIG5vZGUgc2VsZWN0aW9uIGxvZ2ljLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdCB3aGF0IHByZXBhcmF0b3J5IHdvcmsgaXMgcGVyZm9ybWVkIGJlZm9yZSBoYW5kaW5nIG9mZiB0aGUgcmVxdWVzdCB0byB0aGUgbW9yZSBzdWJzdGFudGlhbCBhbGxvY2F0aW9uIHJvdXRpbmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHJlcXVlc3RzLCBzbywgaGVyZSBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTAzNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41MDM4Olx0XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcbjUwMzk6XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBnZnBfdCAqYWxsb2NfZ2ZwLFxuNTA0MDpcdFx0XHR1bnNpZ25lZCBpbnQgKmFsbG9jX2ZsYWdzKVxuNTA0MTpcdHtcbjUwNDI6XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTtcbjUwNDM6XHRcdGFjLVx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XG41MDQ0Olx0XHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuNTA0NTpcdFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xuNTA0NjpcdFxuNTA0NzpcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpKSB7XG41MDQ4Olx0XHRcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XG41MDQ5Olx0XHRcdC8qXG41MDUwOlx0XHRcdCAqIFdoZW4gd2UgYXJlIGluIHRoZSBpbnRlcnJ1cHQgY29udGV4dCwgaXQgaXMgaXJyZWxldmFudFxuNTA1MTpcdFx0XHQgKiB0byB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuIEl0IG1lYW5zIHRoYXQgYW55IG5vZGUgb2suXG41MDUyOlx0XHRcdCAqL1xuNTA1MzpcdFx0XHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiAhYWMtXHUwMDNlbm9kZW1hc2spXG41MDU0Olx0XHRcdFx0YWMtXHUwMDNlbm9kZW1hc2sgPSBcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG41MDU1Olx0XHRcdGVsc2VcbjUwNTY6XHRcdFx0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfQ1BVU0VUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgTlVNQSBzeXN0ZW1zOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbm9kZV96b25lbGlzdGAgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBub2RlX3pvbmVsaXN0KHByZWZlcnJlZF9uaWQsIGdmcF9tYXNrKWAgaXMgYmVpbmcgaW52b2tlZC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgZmlndXJpbmcgb3V0IHdoZXJlIHRvIGFsbG9jYXRlIG1lbW9yeSwgYW5kIHRoZSBgZ2ZwX21hc2tgIGlzIGNyaXRpY2FsIGZvciBkZWZpbmluZyB0aGUgYWxsb2NhdGlvbiB0eXBlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyB3aGVuIGBwcmVmZXJyZWRfbmlkYCBpcyBgTlVNQV9OT19OT0RFYCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBzaWduYWwgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBhIHByZWZlcnJlZCBOVU1BIG5vZGUuIEl0JiMzOTtzIG9mdGVuIHNldCB0byAtMS4gRG9lcyB0aGUgZnVuY3Rpb24ganVzdCBkZWZhdWx0IHRvIHNvbWUgcHJlLWNvbmZpZ3VyZWQgbm9kZT8gRG9lcyBpdCBmYWxsIGJhY2sgdG8gdGhlIGxvY2FsIG5vZGU/IE9yIGRvZXMgaXQgZW1wbG95IHNvbWUgZ2xvYmFsIHBvbGljeSwgcGVyaGFwcyBiYXNlZCBvbiBsb2FkIGJhbGFuY2luZyBvciBhdmFpbGFiaWxpdHkgYWNyb3NzIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBpbiB0aGlzIHNjZW5hcmlvIGJlY2F1c2UgaXQgZGljdGF0ZXMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgd2hlbiBOVU1BIGFmZmluaXR5IGlzbiYjMzk7dCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgd2hpY2ggaXMgYSB2ZXJ5IGNvbW1vbiBjYXNlLiBVbmRlcnN0YW5kaW5nIHRoZSBmYWxsYmFjayBiZWhhdmlvciBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYG5vZGVfem9uZWxpc3RgIGRvZXMgd2hlbiB0aGVyZSBpcyBubyBzcGVjaWZpZWQgbm9kZS4gSSBuZWVkIHRvIHJldmlldyBpdHMgYmVoYXZpb3IgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGZhbGxiYWNrIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfem9uZWxpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTIxMD1HZW5lcmFsXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxNC0gIFRoZSB6b25lcyBmb3IgdGhpcyBub2RlLiAgTm90IGFsbCBvZiB0aGUgem9uZXMgbWF5IGJlIHBvcHVsYXRlZCwgYnV0IGl0IGlzXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjE1OiAgdGhlIGZ1bGwgbGlzdC4gSXQgaXMgcmVmZXJlbmNlZCBieSB0aGlzIG5vZGUmIzM5O3Mgbm9kZV96b25lbGlzdHMgYXMgd2VsbCBhc1xuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIxNjogIG90aGVyIG5vZGUmIzM5O3Mgbm9kZV96b25lbGlzdHMuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE3LVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIxODpgYG5vZGVfem9uZWxpc3RzYGBcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMTktICBUaGUgbGlzdCBvZiBhbGwgem9uZXMgaW4gYWxsIG5vZGVzLiBUaGlzIGxpc3QgZGVmaW5lcyB0aGUgb3JkZXIgb2Ygem9uZXNcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMjA6ICB0aGF0IGFsbG9jYXRpb25zIGFyZSBwcmVmZXJyZWQgZnJvbS4gVGhlIGBgbm9kZV96b25lbGlzdHNgYCBpcyBzZXQgdXAgYnlcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjEtICBgYGJ1aWxkX3pvbmVsaXN0cygpYGAgaW4gYGBtbS9wYWdlX2FsbG9jLmNgYCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD05NT1SQU3lubPlnYfliIbphY3lnKjkuKTkuKroioLngrnkuIrnmoRhcm02NOacuuWZqOS4iu+8jOS9v+eUqCBgYG1vdmFibGVjb3JlPTgwJWBgIOWPguaVsFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjAzLeihqOekuuivpeiKgueCueeahOWMuuWfn+WIl+ihqOOAguW5tumdnuaJgOacieWMuuWfn+mDveWPr+iDveiiq+Whq+WFhe+8jOS9hui/meaYr1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMDQ65a6M5pW055qE5YiX6KGo44CC5a6D6KKr6K+l6IqC54K555qEbm9kZV96b25lbGlzdHPku6Xlj4rlhbblroPoioLngrnnmoRcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA1Om5vZGVfem9uZWxpc3Rz5byV55So44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIwNi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA3OmBgbm9kZV96b25lbGlzdHNgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMDgt6KGo56S65omA5pyJ6IqC54K55Lit5omA5pyJ5Yy65Z+f55qE5YiX6KGo44CC5q2k5YiX6KGo5a6a5LmJ5LqG5YiG6YWN5YaF5a2Y5pe26aaW6YCJ55qE5Yy65Z+fXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIwOTrpobrluo/jgIJgYG5vZGVfem9uZWxpc3RzYGAg5Zyo5qC45b+D5YaF5a2Y566h55CG57uT5p6E5Yid5aeL5YyW5pyf6Ze077yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxMC3nlLEgYGBtbS9wYWdlX2FsbG9jLmNgYCDkuK3nmoQgYGBidWlsZF96b25lbGlzdHMoKWBgXG4tLVxuZHJpdmVycy90dHkvc3lzcnEuYz0zODU9c3RhdGljIHZvaWQgbW9vbV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpXG4tLVxuZHJpdmVycy90dHkvc3lzcnEuYy0zODgtXHRzdHJ1Y3Qgb29tX2NvbnRyb2wgb2MgPSB7XG5kcml2ZXJzL3R0eS9zeXNycS5jOjM4OTpcdFx0LnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChmaXJzdF9tZW1vcnlfbm9kZSwgZ2ZwX21hc2spLFxuZHJpdmVycy90dHkvc3lzcnEuYy0zOTAtXHRcdC5ub2RlbWFzayA9IE5VTEwsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD0xNzk9c3RhdGljIGlubGluZSBnZnBfdCBnZnBfbmVzdGVkX21hc2soZ2ZwX3QgZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0xOTMtICovXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjE5NDpzdGF0aWMgaW5saW5lIHN0cnVjdCB6b25lbGlzdCAqbm9kZV96b25lbGlzdChpbnQgbmlkLCBnZnBfdCBmbGFncylcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMTk1LXtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MTk2Olx0cmV0dXJuIE5PREVfREFUQShuaWQpLVx1MDAzZW5vZGVfem9uZWxpc3RzICYjNDM7IGdmcF96b25lbGlzdChmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTE5Ny19XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDY3PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzAtXHQgKiB6b25lcyBtYXkgYmUgcG9wdWxhdGVkLCBidXQgaXQgaXMgdGhlIGZ1bGwgbGlzdC4gSXQgaXMgcmVmZXJlbmNlZCBieVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDcxOlx0ICogdGhpcyBub2RlJiMzOTtzIG5vZGVfem9uZWxpc3RzIGFzIHdlbGwgYXMgb3RoZXIgbm9kZSYjMzk7cyBub2RlX3pvbmVsaXN0cy5cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ3Mi1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ3NS1cdC8qXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0NzY6XHQgKiBub2RlX3pvbmVsaXN0cyBjb250YWlucyByZWZlcmVuY2VzIHRvIGFsbCB6b25lcyBpbiBhbGwgbm9kZXMuXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzctXHQgKiBHZW5lcmFsbHkgdGhlIGZpcnN0IHpvbmVzIHdpbGwgYmUgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUmIzM5O3Ncbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzktXHQgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTQ4MDpcdHN0cnVjdCB6b25lbGlzdCBub2RlX3pvbmVsaXN0c1tNQVhfWk9ORUxJU1RTXTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ4MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE5MDg9c3RhdGljIGlubGluZSBib29sIG1vdmFibGVfb25seV9ub2Rlcyhub2RlbWFza190ICpub2Rlcylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE5MjItXHRuaWQgPSBmaXJzdF9ub2RlKCpub2Rlcyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE5MjM6XHR6b25lbGlzdCA9IFx1MDAyNk5PREVfREFUQShuaWQpLVx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTkyNC1cdHogPSBmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgWk9ORV9OT1JNQUwsXHRub2Rlcyk7XG4tLVxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjg3LVxubW0vaHVnZXRsYi5jOjEyODg6XHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobmlkLCBnZnBfbWFzayk7XG5tbS9odWdldGxiLmMtMTI4OS1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTM4PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMjE3MC1cdFx0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoR0ZQX0tFUk5FTCk7XG5tbS9tZW1wb2xpY3kuYzoyMTcxOlx0XHR6b25lbGlzdCA9IFx1MDAyNk5PREVfREFUQShub2RlKS1cdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS107XG5tbS9tZW1wb2xpY3kuYy0yMTcyLVx0XHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hlc3Rfem9uZWlkeCxcbi0tXG5tbS9tZW1wb2xpY3kuYz0yOTgxPWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDUwLVx0XHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoXG5tbS9tZW1wb2xpY3kuYzozMDUxOlx0XHRcdFx0bm9kZV96b25lbGlzdCh0aGlzbmlkLCBHRlBfSElHSFVTRVIpLFxubW0vbWVtcG9saWN5LmMtMzA1Mi1cdFx0XHRcdGdmcF96b25lKEdGUF9ISUdIVVNFUiksXG4tLVxubW0vbW1faW5pdC5jPTc1PXZvaWQgX19pbml0IG1taW5pdF92ZXJpZnlfem9uZWxpc3Qodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtOTMtXHRcdFx0bGlzdGlkID0gaSAvIE1BWF9OUl9aT05FUztcbm1tL21tX2luaXQuYzo5NDpcdFx0XHR6b25lbGlzdCA9IFx1MDAyNnBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW2xpc3RpZF07XG5tbS9tbV9pbml0LmMtOTUtXHRcdFx0em9uZSA9IFx1MDAyNnBnZGF0LVx1MDAzZW5vZGVfem9uZXNbem9uZWlkXTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTAzNz1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MDQyLVx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jOjUwNDM6XHRhYy1cdTAwM2V6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QocHJlZmVycmVkX25pZCwgZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTUwNDQtXHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01NjYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2ZyZWVfem9uZV9wYWdlcyhpbnQgb2Zmc2V0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NjY4LVxubW0vcGFnZV9hbGxvYy5jOjU2Njk6XHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTCk7XG5tbS9wYWdlX2FsbG9jLmMtNTY3MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTgyNT1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU4MzAtXG5tbS9wYWdlX2FsbG9jLmM6NTgzMTpcdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcbm1tL3BhZ2VfYWxsb2MuYy01ODMyLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01ODQ3LSAqL1xubW0vcGFnZV9hbGxvYy5jOjU4NDg6c3RhdGljIHZvaWQgYnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG5tbS9wYWdlX2FsbG9jLmMtNTg0OS17XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU4NTItXG5tbS9wYWdlX2FsbG9jLmM6NTg1MzpcdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfTk9GQUxMQkFDS10uX3pvbmVyZWZzO1xubW0vcGFnZV9hbGxvYy5jLTU4NTQtXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUocGdkYXQsIHpvbmVyZWZzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTg2MD1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTg4Ni1cdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7XG5tbS9wYWdlX2FsbG9jLmM6NTg4NzpcdGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ2RhdCk7XG5tbS9wYWdlX2FsbG9jLmMtNTg4OC1cdHByX2luZm8oXCYjMzQ7RmFsbGJhY2sgb3JkZXIgZm9yIE5vZGUgJWQ6IFwmIzM0OywgbG9jYWxfbm9kZSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU5MDE9aW50IGxvY2FsX21lbW9yeV9ub2RlKGludCBub2RlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01OTA0LVxubW0vcGFnZV9hbGxvYy5jOjU5MDU6XHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qobm9kZV96b25lbGlzdChub2RlLCBHRlBfS0VSTkVMKSxcbm1tL3BhZ2VfYWxsb2MuYy01OTA2LVx0XHRcdFx0ICAgZ2ZwX3pvbmUoR0ZQX0tFUk5FTCksXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU5MTY9c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU5MjAtXG5tbS9wYWdlX2FsbG9jLmM6NTkyMTpcdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcbm1tL3BhZ2VfYWxsb2MuYy01OTIyLVx0bnJfem9uZXMgPSBidWlsZF96b25lcmVmc19ub2RlKHBnZGF0LCB6b25lcmVmcyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTc0ODU9c3RydWN0IHBhZ2UgKmFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc0OTUtcmV0cnk6XG5tbS9wYWdlX2FsbG9jLmM6NzQ5NjpcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChuaWQsIGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy03NDk3LVx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCxcbi0tXG5tbS9zbHViLmM9Mzg5Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9zbHViLmMtMzkzNS1cbm1tL3NsdWIuYzozOTM2Olx0XHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnBfZmxhZ3MpO1xubW0vc2x1Yi5jLTM5MzctXHRcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Qoem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hlc3Rfem9uZWlkeCkge1xuLS1cbm1tL3NsdWIuYz03MjU0PV9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy03MjcwLVx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jOjcyNzE6XHRcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcCk7XG5tbS9zbHViLmMtNzI3Mi1cdFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdCh6b25lLCB6LCB6b25lbGlzdCwgaGlnaGVzdF96b25laWR4KSB7XG4tLVxubW0vdm1zY2FuLmM9Njc1MD11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NzUtXHQgKi9cbm1tL3Ztc2Nhbi5jOjY3NzY6XHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgc2MuZ2ZwX21hc2spO1xubW0vdm1zY2FuLmMtNjc3Ny1cbi0tXG5tbS92bXNjYW4uYz03NTQ4PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTktXHR9O1xubW0vdm1zY2FuLmM6NzU2MDpcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7XG5tbS92bXNjYW4uYy03NTYxLVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzkwCgkJCQkJCQlvdXRwdXQ6IDEyOQoJCQkJCQkJdGhvdWdodHM6IDEwNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3aGVuIGxvb2tpbmcgYXQgdGhpcyBgbm9kZV96b25lbGlzdGAgZnVuY3Rpb24gaXMsICYjMzQ7QWhhLCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgYG5pZGAgaXMgYC0xYCAoTlVNQV9OT19OT0RFKSEmIzM0OyBUaGF0IGBOT0RFX0RBVEEoLTEpYCB3b3VsZCBkZWZpbml0ZWx5IGNhdXNlIHByb2JsZW1zLiBCdXQsIHdhaXQsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIHRoZSAqcG90ZW50aWFsKiBmb3IgdGhpcyBpc3N1ZTsgaXQmIzM5O3MgcmV2ZWFsaW5nIGFuICpleGlzdGluZyogb25lLiBUaGUgY29kZSB3YXMgYWxyZWFkeSB2dWxuZXJhYmxlISBJdCBzZWVtcyB0aGF0IGJlZm9yZSB0aGlzIHBhdGNoLCBjYWxsaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2ZvbGlvX2FsbG9jYCB3aXRoIGBOVU1BX05PX05PREVgIHdvdWxkIHVsdGltYXRlbHkgbGVhZCB0byB0aGlzIHByb2JsZW1hdGljIGFjY2Vzcy4KClRoZW4gSSByZWFsaXplZCB0aGF0IGBhbGxvY19wYWdlc19ub2RlYCwgd2hpY2ggaXMgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiwgY29ycmVjdGx5IGhhbmRsZWQgdGhlIGBOVU1BX05PX05PREVgIGNhc2UuIEl0IHdvdWxkIGNhbGwgYG51bWFfbWVtX2lkKClgIHdoZW4gYG5pZGAgd2FzIGBOVU1BX05PX05PREVgLiBIb3dldmVyLCAgYF9fZm9saW9fYWxsb2Nfbm9kZWAgYW5kIGl0cyB2YXJpYW50cywgY3J1Y2lhbGx5LCAqZGlkbiYjMzk7dCogaGF2ZSB0aGlzIGNoZWNrLiAgU28sIGFueSBjb2RlIHVzaW5nIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggYE5VTUFfTk9fTk9ERWAgd2FzIGFscmVhZHkgZXhwb3NlZCB0byB0aGlzIHBvdGVudGlhbCBjcmFzaC4gSSBjYW4gc2VlIHRoaXMgYnkgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCwgd2hpY2ggY29udGFpbnMgdGhpcyBleHBsaWNpdCBoYW5kbGluZywgaXQgY2FsbHMgYG51bWFfbWVtX2lkKClgIQoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGp1c3QgYSBjbGVhbnVwLiBJdCYjMzk7cyBtYWtpbmcgYGZvbGlvX2FsbG9jX25vZGVgIGJlaGF2ZSAqY29uc2lzdGVudGx5KiB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCBieSBpbmNvcnBvcmF0aW5nIHRoZSBgTlVNQV9OT19OT0RFYCBoYW5kbGluZyBkaXJlY3RseS4gSXQgYWxzbyByZW1vdmVzIHRoZSB3b3JrYXJvdW5kIGluIGBkcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNgIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGlzOiBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55ICpuZXcqIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiBJdCYjMzk7cyBzaW1wbHkgbW92aW5nIHRoZSBjaGVjayBpbnRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2U6CgpgYGBjCnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLAoJCW5vZGVtYXNrX3QgKm5vZGVtYXNrKQp7CglzdHJ1Y3QgcGFnZSAqcGFnZTsKCglpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpCgkJcHJlZmVycmVkX25pZCA9IG51bWFfbWVtX2lkKCk7CgoJd2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTsKCglwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCgkJCQkgICAgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpOwoJcmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpOwp9CmBgYAoKVGhpcyBpcywgZnJhbmtseSwgZXh0cmVtZWx5IHNpbXBsZS4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcuIE5vIG5ldyBjb21wbGV4IGxvZ2ljLCBubyBuZXcgZmVhdHVyZXMsIG5vIG5ldyBkcml2ZXJzLCBubyBuZXcgc3lzdGVtIGNhbGxzLiBKdXN0IGEgbWlub3IgQVBJIGNsZWFudXAgdGhhdCBjZW50cmFsaXplcyB0aGUgaGFuZGxpbmcgb2YgYE5VTUFfTk9fTk9ERWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBvdGhlciBmaWxlcyB0b3VjaGVkLiBUaGUgYG1tL21lbXBvbGljeS5oYCBjaGFuZ2UgaXMganVzdCBtb3ZpbmcgZGVjbGFyYXRpb25zLCB3aGljaCBpc24mIzM5O3QgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBvdGhlciBmaWxlcyDigJMgYG1tL2ZpbGVtYXAuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbmV0L3N1bnJwYy9zdmMuY2AsIGBkcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jYCDigJMgYXJlIHNpbXBseSByZW5hbWluZyBvciBpbmNsdWRpbmcgdGhlIGhlYWRlci4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyBzcGVjaWZpY2FsbHkuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29kZSBwYXRocyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gZXhlcmNpc2VkIGFscmVhZHksIGFuZCB0aGUgY29yZSBjaGFuZ2VzIGFyZSB2ZXJ5IG1pbmltYWwgYW5kIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIGZvbGlvIGFsbG9jYXRpb24gQVBJLiBJdCByZW5hbWVzIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHRvIGBmb2xpb19hbGxvY19ub2RlYCwgbW92ZXMgdGhlIGBOVU1BX05PX05PREVgIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCAobWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWApLCBhbmQgbW92ZXMgc29tZSBtZW1wb2xpY3kgZGVjbGFyYXRpb25zIHRvIGFuIGludGVybmFsIGhlYWRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgZmVhdHVyZXMsIG9yIGNvbXBsZXggY29kZSBwYXRocyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgZm9saW8gYWxsb2NhdGlvbiBBUEkuIEl0IHJlbmFtZXMgYF9fZm9saW9fYWxsb2Nfbm9kZWAgdG8gYGZvbGlvX2FsbG9jX25vZGVgLCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgIChtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCksIGFuZCBtb3ZlcyBzb21lIG1lbXBvbGljeSBkZWNsYXJhdGlvbnMgdG8gYW4gaW50ZXJuYWwgaGVhZGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCBmZWF0dXJlcywgb3IgY29tcGxleCBjb2RlIHBhdGhzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjM0LjgxNDUxNTUyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjIwOTM5NjcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBhbGxvY2F0aW9uIEFQSS4gSXQgcmVuYW1lcyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAsIG1vdmVzIHRoZSBgTlVNQV9OT19OT0RFYCBjaGVjayBpbnRvIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgKG1ha2luZyBpdCBjb25zaXN0ZW50IHdpdGggYGFsbG9jX3BhZ2VzX25vZGVgKSwgYW5kIG1vdmVzIHNvbWUgbWVtcG9saWN5IGRlY2xhcmF0aW9ucyB0byBhbiBpbnRlcm5hbCBoZWFkZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMsIGZlYXR1cmVzLCBvciBjb21wbGV4IGNvZGUgcGF0aHMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyNzozNC44MTQ1MjEyMDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDE2NTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjMjA0MTJiZjViNzMyMjk5NjNkOTIyZWE4ZmYyYjBjZWJkMWQ0OTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTk6Mjc6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDg4MTNkNWQ3ZWIwYzFmLi45Y2RlOTljMjU5NjM5NyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE3MDY4LDYgKzE3MDY4LDcgQEAgRjpcXHRpbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbiBGOlxcdGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG4gRjpcXHRtbS9tZW1wb2xpY3kuY1xcbitGOlxcdG1tL21lbXBvbGljeS5oXFxuIEY6XFx0bW0vbWlncmF0ZS5jXFxuIEY6XFx0bW0vbWlncmF0ZV9kZXZpY2UuY1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jIGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jXFxuaW5kZXggM2JhYjE3NWQ4NTU3MWEuLjQ3ZTA3NTlmMGUwYWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xcbkBAIC01NiwxNCArNTYsNyBAQCB2b2lkICppb21tdV9hbGxvY19wYWdlc19ub2RlX3N6KGludCBuaWQsIGdmcF90IGdmcCwgc2l6ZV90IHNpemUpXFxuIFxcdCAqL1xcbiBcXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIF9fZm9saW9fYWxsb2Nfbm9kZSgpIGRvZXMgbm90IGhhbmRsZSBOVU1BX05PX05PREUgbGlrZVxcbi1cXHQgKiBhbGxvY19wYWdlc19ub2RlKCkgZGlkLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXFxuLVxcdFxcdG5pZCA9IG51bWFfbWVtX2lkKCk7XFxuLVxcbi1cXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShnZnAgfCBfX0dGUF9aRVJPLCBvcmRlciwgbmlkKTtcXG4rXFx0Zm9saW8gPSBmb2xpb19hbGxvY19ub2RlKGdmcCB8IF9fR0ZQX1pFUk8sIG9yZGVyLCBuaWQpO1xcbiBcXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY1xcbmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nYXJjaC1pci5jXFxuKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY1xcbkBAIC0zODQsNyArMzg0LDcgQEAgc3RhdGljIGludCByZWRpcmVjdF90YWJsZV9pbml0KHN0cnVjdCByZWRpcmVjdF9kZXNjICppcmRlKVxcbiBcXHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcbi1cXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElSRF9UQUJMRV9QQUdFX09SREVSLCBpcmRlLVxcdTAwM2Vub2RlKTtcXG4gXFx0aWYgKCFmb2xpbykge1xcbiBcXHRcXHRwcl9lcnIoXFxcIk5vZGUgWyVkXSByZWRpcmVjdCB0YWJsZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxcXG5cXFwiLCBpcmRlLVxcdTAwM2Vub2RlKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW50IHJlZGlyZWN0X3F1ZXVlX2luaXQoc3RydWN0IHJlZGlyZWN0X2Rlc2MgKmlyZGUpXFxuIFxcdHN0cnVjdCByZWRpcmVjdF9xdWV1ZSAqaW52X3F1ZXVlID0gXFx1MDAyNmlyZGUtXFx1MDAzZWludl9xdWV1ZTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFxuLVxcdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJTlZfUVVFVUVfUEFHRV9PUkRFUiwgaXJkZS1cXHUwMDNlbm9kZSk7XFxuK1xcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtXFx1MDAzZW5vZGUpO1xcbiBcXHRpZiAoIWZvbGlvKSB7XFxuIFxcdFxcdHByX2VycihcXFwiTm9kZSBbJWRdIGludmFsaWQgcXVldWUgYWxsb2MgcGFnZXMgZmFpbGVkIVxcXFxuXFxcIiwgaXJkZS1cXHUwMDNlbm9kZSk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxcbmluZGV4IDg3MmJjNTNmMzJlYzg3Li4xN2MxNGI4Y2EwMDdkYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaFxcbkBAIC0xMSw3ICsxMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHZtX2FyZWFfc3RydWN0O1xcbi1zdHJ1Y3QgbWVtcG9saWN5O1xcbiBcXG4gLyogSGVscGVyIG1hY3JvIHRvIGF2b2lkIGdmcCBmbGFncyBpZiB0aGV5IGFyZSB0aGUgZGVmYXVsdCBvbmUgKi9cXG4gI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGJcXG5AQCAtMjA0LDEwICsyMDMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XFxuICNlbmRpZlxcbiBcXG4tc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxuLVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tI2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuLVxcbiB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuQEAgLTI1MiwxNSArMjQ3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHdhcm5faWZfbm9kZV9vZmZsaW5lKGludCB0aGlzX25vZGUsIGdmcF90IGdmcF9tYXNrKVxcbiBcXHRkdW1wX3N0YWNrKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKVxcbi17XFxuLVxcdHdhcm5faWZfbm9kZV9vZmZsaW5lKG5pZCwgZ2ZwKTtcXG4tXFxuLVxcdHJldHVybiBfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIE5VTEwpO1xcbi19XFxuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpO1xcbiBcXG4tI2RlZmluZSAgX19mb2xpb19hbGxvY19ub2RlKC4uLilcXHRcXHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rI2RlZmluZSAgZm9saW9fYWxsb2Nfbm9kZSguLi4pXFx0XFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4gLypcXG4gICogQWxsb2NhdGUgcGFnZXMsIHByZWZlcnJpbmcgdGhlIG5vZGUgZ2l2ZW4gYXMgbmlkLiBXaGVuIG5pZCA9PSBOVU1BX05PX05PREUsXFxuQEAgLTI3NCw4ICsyNjMsNiBAQCBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlclxcbiAjaWZkZWYgQ09ORklHX05VTUFcXG4gc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4tc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpO1xcbiBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIpO1xcbiAjZWxzZVxcbkBAIC0yODUsMTIgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyXFxuIH1cXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSk7XFxuLX1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZClcXG4te1xcbi1cXHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIpO1xcbitcXHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xcbiB9XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgaW50IG9yZGVyLFxcbiBcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbkBAIC0zMDEsNyArMjgzLDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXFxuIFxcbiAjZGVmaW5lIGFsbG9jX3BhZ2VzKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxcbiAjZGVmaW5lIGZvbGlvX2FsbG9jKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxcbi0jZGVmaW5lIGZvbGlvX2FsbG9jX21wb2woLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4gI2RlZmluZSB2bWFfYWxsb2NfZm9saW8oLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKHZtYV9hbGxvY19mb2xpb19ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4gI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMClcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggMWRiYjRjNmY4MjRlOWEuLjFjZjkxOTcwYTY4NTAxIDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC01Miw2ICs1Miw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWVtcG9saWN5LmhcXFwiXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbWFwLmhcXHUwMDNlXFxuQEAgLTYzLDYgKzY0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbW1hbi5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcIm1lbXBvbGljeS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiBcXG4gLypcXG5AQCAtMTAwNSw3ICsxMDA3LDcgQEAgc3RydWN0IGZvbGlvICpmaWxlbWFwX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0ZG8ge1xcbiBcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbiBcXHRcXHRcXHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xcbi1cXHRcXHRcXHRmb2xpbyA9IF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7XFxuK1xcdFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7XFxuIFxcdFxcdH0gd2hpbGUgKCFmb2xpbyBcXHUwMDI2XFx1MDAyNiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG4gXFxuIFxcdFxcdHJldHVybiBmb2xpbztcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDU3MjBmN2Y1NGQ5NDJmLi4zMWM0ZTlmNDliNWU5ZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTExOSw2ICsxMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm1lbXBvbGljeS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiBcXG4gLyogSW50ZXJuYWwgZmxhZ3MgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQ4MGZlNGM1NTk3ODZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL21lbXBvbGljeS5oXFxuQEAgLTAsMCArMSwzMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBtbS1pbnRlcm5hbCBBUEkgZm9yIG1lbXBvbGljeS5jLiBQdWJsaWMgQVBJIGxpdmVzIGluXFxuKyAqIGluY2x1ZGUvbGludXgvbWVtcG9saWN5LmguXFxuKyAqL1xcbisjaWZuZGVmIF9fTU1fTUVNUE9MSUNZX0hcXG4rI2RlZmluZSBfX01NX01FTVBPTElDWV9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4rXFxuKyNpZmRlZiBDT05GSUdfTlVNQVxcbitzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbitcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwgaW50IG5pZCk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNkZWZpbmUgZm9saW9fYWxsb2NfbXBvbCguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoX19WQV9BUkdTX18pKVxcbitcXG4rdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbisjZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbitcXG4rI2VuZGlmIC8qIF9fTU1fTUVNUE9MSUNZX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggMjIyYzhjMTVmNzgyZjcuLmI3ODM2YjAyZjMyZGJlIDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0yNjgyLDcgKzI2ODIsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taXNwbGFjZWRfZHN0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxcbiBcXHRcXHRcXHRfX0dGUF9OT1dBUk47XFxuIFxcdFxcdGdmcCBcXHUwMDI2PSB+X19HRlBfUkVDTEFJTTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub2RlKGdmcCwgb3JkZXIsIG5pZCk7XFxuK1xcdHJldHVybiBmb2xpb19hbGxvY19ub2RlKGdmcCwgb3JkZXIsIG5pZCk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDM3YTNjMWMwMGUxNjk2Li5mZjg1MTVlMTczZTFlZiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtNTQzNSwxMSArNTQzNSwyMyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcXG4gc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbiB7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcbitcXHRpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpXFxuK1xcdFxcdHByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpO1xcbitcXG4rXFx0d2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTtcXG4rXFxuK1xcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0ICAgIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0cmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0woX19mb2xpb19hbGxvY19ub3Byb2YpO1xcbitcXG4rc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcXG4re1xcbitcXHRyZXR1cm4gX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKTtcXG4gXFxuIC8qXFxuICAqIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zLiBOZXZlciB1c2Ugd2l0aCBfX0dGUF9ISUdITUVNIGJlY2F1c2UgdGhlIHJldHVybmVkXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuaCBiL21tL3BhZ2VfYWxsb2MuaFxcbmluZGV4IGI5MjU5ZGVkZGI1OWQ3Li40MDliZTMxODk4YWU3NyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmhcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmhcXG5AQCAtMjU4LDYgKzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfblxcbiBcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4gI2RlZmluZSBfX2FsbG9jX3BhZ2VzKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuIFxcbitzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4rXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbisjZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rXFxuIGV4dGVybiB2b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKTtcXG4gZXh0ZXJuIHZvaWQgem9uZV9wY3BfZGlzYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuIGV4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjY5ZjU2MTMzMmJiOTM0IDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTQxLDYgKzQxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBmaWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pdmVyc2lvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5pY29kZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwibWVtcG9saWN5LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuIFxcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggNWJlODI1OTExZTY0NWUuLjhjY2QwM2MzOWE0MDcxIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWVtcG9saWN5LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuY1xcbmluZGV4IGFlOWVjNGJmMzRmNzI5Li43NDM1MGEyZTA3MDM2ZSAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXFxuKysrIGIvbmV0L3N1bnJwYy9zdmMuY1xcbkBAIC03MTEsNyArNzExLDcgQEAgc3ZjX3ByZXBhcmVfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y19wb29sICpwb29sLCBpbnQgbm9kZSlcXG4gXFx0cnFzdHAtXFx1MDAzZXJxX3NlcnZlciA9IHNlcnY7XFxuIFxcdHJxc3RwLVxcdTAwM2VycV9wb29sID0gcG9vbDtcXG4gXFxuLVxcdHJxc3RwLVxcdTAwM2VycV9zY3JhdGNoX2ZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xcbitcXHRycXN0cC1cXHUwMDNlcnFfc2NyYXRjaF9mb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCwgMCwgbm9kZSk7XFxuIFxcdGlmICghcnFzdHAtXFx1MDAzZXJxX3NjcmF0Y2hfZm9saW8pXFxuIFxcdFxcdGdvdG8gb3V0X2Vub21lbTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjM1LjcwOTQyODEzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MzE0NDc4Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIGZvbGlvIGFsbG9jYXRpb24gQVBJLiBJdCByZW5hbWVzIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHRvIGBmb2xpb19hbGxvY19ub2RlYCwgbW92ZXMgdGhlIGBOVU1BX05PX05PREVgIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCAobWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWApLCBhbmQgbW92ZXMgc29tZSBtZW1wb2xpY3kgZGVjbGFyYXRpb25zIHRvIGFuIGludGVybmFsIGhlYWRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgZmVhdHVyZXMsIG9yIGNvbXBsZXggY29kZSBwYXRocyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGMyMDQxMmJmNWI3MzIyOTk2M2Q5MjJlYThmZjJiMGNlYmQxZDQ5MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE5OjI3OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggODgxM2Q1ZDdlYjBjMWYuLjljZGU5OWMyNTk2Mzk3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcwNjgsNiArMTcwNjgsNyBAQCBGOlx0aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4gRjpcdGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbiBGOlx0bW0vbWVtcG9saWN5LmNcbitGOlx0bW0vbWVtcG9saWN5LmhcbiBGOlx0bW0vbWlncmF0ZS5jXG4gRjpcdG1tL21pZ3JhdGVfZGV2aWNlLmNcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNcbmluZGV4IDNiYWIxNzVkODU1NzFhLi40N2UwNzU5ZjBlMGFlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuY1xuKysrIGIvZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jXG5AQCAtNTYsMTQgKzU2LDcgQEAgdm9pZCAqaW9tbXVfYWxsb2NfcGFnZXNfbm9kZV9zeihpbnQgbmlkLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxuIFx0ICovXG4gXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbiBcbi1cdC8qXG4tXHQgKiBfX2ZvbGlvX2FsbG9jX25vZGUoKSBkb2VzIG5vdCBoYW5kbGUgTlVNQV9OT19OT0RFIGxpa2Vcbi1cdCAqIGFsbG9jX3BhZ2VzX25vZGUoKSBkaWQuXG4tXHQgKi9cbi1cdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxuLVx0XHRuaWQgPSBudW1hX21lbV9pZCgpO1xuLVxuLVx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7XG4rXHRmb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoZ2ZwIHwgX19HRlBfWkVSTywgb3JkZXIsIG5pZCk7XG4gXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbmluZGV4IDIxYzY0OWE4OWE3MDYzLi40MjdmN2ZkM2NhZDQyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNcbkBAIC0zODQsNyArMzg0LDcgQEAgc3RhdGljIGludCByZWRpcmVjdF90YWJsZV9pbml0KHN0cnVjdCByZWRpcmVjdF9kZXNjICppcmRlKVxuIFx0dW5zaWduZWQgbG9uZyAqYml0bWFwO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbi1cdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJUkRfVEFCTEVfUEFHRV9PUkRFUiwgaXJkZS1cdTAwM2Vub2RlKTtcbitcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSVJEX1RBQkxFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHByX2VycihcIk5vZGUgWyVkXSByZWRpcmVjdCB0YWJsZSBhbGxvYyBwYWdlcyBmYWlsZWQhXFxuXCIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW50IHJlZGlyZWN0X3F1ZXVlX2luaXQoc3RydWN0IHJlZGlyZWN0X2Rlc2MgKmlyZGUpXG4gXHRzdHJ1Y3QgcmVkaXJlY3RfcXVldWUgKmludl9xdWV1ZSA9IFx1MDAyNmlyZGUtXHUwMDNlaW52X3F1ZXVlO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbi1cdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBJTlZfUVVFVUVfUEFHRV9PUkRFUiwgaXJkZS1cdTAwM2Vub2RlKTtcbitcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5WX1FVRVVFX1BBR0VfT1JERVIsIGlyZGUtXHUwMDNlbm9kZSk7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHByX2VycihcIk5vZGUgWyVkXSBpbnZhbGlkIHF1ZXVlIGFsbG9jIHBhZ2VzIGZhaWxlZCFcXG5cIiwgaXJkZS1cdTAwM2Vub2RlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IDg3MmJjNTNmMzJlYzg3Li4xN2MxNGI4Y2EwMDdkYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbkBAIC0xMSw3ICsxMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuIFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcbi1zdHJ1Y3QgbWVtcG9saWN5O1xuIFxuIC8qIEhlbHBlciBtYWNybyB0byBhdm9pZCBnZnAgZmxhZ3MgaWYgdGhleSBhcmUgdGhlIGRlZmF1bHQgb25lICovXG4gI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGJcbkBAIC0yMDQsMTAgKzIwMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpIHsgfVxuICNlbmRpZlxuIFxuLXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLVx0XHRub2RlbWFza190ICpub2RlbWFzayk7XG4tI2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcdFx0XHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tXG4gdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbiBcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5AQCAtMjUyLDE1ICsyNDcsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2Fybl9pZl9ub2RlX29mZmxpbmUoaW50IHRoaXNfbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRkdW1wX3N0YWNrKCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmVcbi1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXG4te1xuLVx0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnApO1xuLVxuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4tfVxuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpO1xuIFxuLSNkZWZpbmUgIF9fZm9saW9fYWxsb2Nfbm9kZSguLi4pXHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuKyNkZWZpbmUgIGZvbGlvX2FsbG9jX25vZGUoLi4uKVx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gLypcbiAgKiBBbGxvY2F0ZSBwYWdlcywgcHJlZmVycmluZyB0aGUgbm9kZSBnaXZlbiBhcyBuaWQuIFdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcbkBAIC0yNzQsOCArMjYzLDYgQEAgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXJcbiAjaWZkZWYgQ09ORklHX05VTUFcbiBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi1cdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpO1xuIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcik7XG4gI2Vsc2VcbkBAIC0yODUsMTIgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyXG4gfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xuLX1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKVxuLXtcbi1cdHJldHVybiBmb2xpb19hbGxvY19ub3Byb2YoZ2ZwLCBvcmRlcik7XG4rXHRyZXR1cm4gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCkpO1xuIH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2ZvbGlvX25vcHJvZihnZnBfdCBnZnAsIGludCBvcmRlcixcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbkBAIC0zMDEsNyArMjgzLDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXG4gXG4gI2RlZmluZSBhbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiAjZGVmaW5lIGZvbGlvX2FsbG9jKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuLSNkZWZpbmUgZm9saW9fYWxsb2NfbXBvbCguLi4pXHRcdFx0YWxsb2NfaG9va3MoZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoX19WQV9BUkdTX18pKVxuICNkZWZpbmUgdm1hX2FsbG9jX2ZvbGlvKC4uLilcdFx0XHRhbGxvY19ob29rcyh2bWFfYWxsb2NfZm9saW9fbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbiAjZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21hc2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKVxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggMWRiYjRjNmY4MjRlOWEuLjFjZjkxOTcwYTY4NTAxIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC01Miw2ICs1Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwibWVtcG9saWN5LmhcIlxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbWFwLmhcdTAwM2VcbkBAIC02Myw2ICs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21tYW4uaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwibWVtcG9saWN5LmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbiBcbiAvKlxuQEAgLTEwMDUsNyArMTAwNyw3IEBAIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGRvIHtcbiBcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuIFx0XHRcdG4gPSBjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKCk7XG4tXHRcdFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xuK1x0XHRcdGZvbGlvID0gZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwLCBvcmRlciwgbik7XG4gXHRcdH0gd2hpbGUgKCFmb2xpbyBcdTAwMjZcdTAwMjYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG4gXG4gXHRcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCA1NzIwZjdmNTRkOTQyZi4uMzFjNGU5ZjQ5YjVlOWUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0xMTksNiArMTE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJtZW1wb2xpY3kuaFwiXG4gI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuIFxuIC8qIEludGVybmFsIGZsYWdzICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmggYi9tbS9tZW1wb2xpY3kuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kODBmZTRjNTU5Nzg2ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbW0vbWVtcG9saWN5LmhcbkBAIC0wLDAgKzEsMzEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogbW0taW50ZXJuYWwgQVBJIGZvciBtZW1wb2xpY3kuYy4gUHVibGljIEFQSSBsaXZlcyBpblxuKyAqIGluY2x1ZGUvbGludXgvbWVtcG9saWN5LmguXG4rICovXG4rI2lmbmRlZiBfX01NX01FTVBPTElDWV9IXG4rI2RlZmluZSBfX01NX01FTVBPTElDWV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuK1xuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfbXBvbF9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LCBpbnQgbmlkKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19tcG9sX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsIGludCBuaWQpXG4re1xuK1x0cmV0dXJuIGZvbGlvX2FsbG9jX25vcHJvZihnZnAsIG9yZGVyKTtcbit9XG4rI2VuZGlmXG4rXG4rI2RlZmluZSBmb2xpb19hbGxvY19tcG9sKC4uLilcdFx0XHRhbGxvY19ob29rcyhmb2xpb19hbGxvY19tcG9sX25vcHJvZihfX1ZBX0FSR1NfXykpXG4rXG4rdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbitcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG4rI2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbitcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG4rXG4rI2VuZGlmIC8qIF9fTU1fTUVNUE9MSUNZX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDIyMmM4YzE1Zjc4MmY3Li5iNzgzNmIwMmYzMmRiZSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtMjY4Miw3ICsyNjgyLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlzcGxhY2VkX2RzdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0XHRfX0dGUF9OT1dBUk47XG4gXHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9SRUNMQUlNO1xuIFx0fVxuLVx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9kZShnZnAsIG9yZGVyLCBuaWQpO1xuK1x0cmV0dXJuIGZvbGlvX2FsbG9jX25vZGUoZ2ZwLCBvcmRlciwgbmlkKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDM3YTNjMWMwMGUxNjk2Li5mZjg1MTVlMTczZTFlZiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTQzNSwxMSArNTQzNSwyMyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXG4ge1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcbi1cdFx0XHRcdFx0cHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpXG4rXHRcdHByZWZlcnJlZF9uaWQgPSBudW1hX21lbV9pZCgpO1xuK1xuK1x0d2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTtcbitcbitcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcbitcdFx0XHRcdCAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4gXHRyZXR1cm4gcGFnZV9ybWFwcGFibGVfZm9saW8ocGFnZSk7XG4gfVxuLUVYUE9SVF9TWU1CT0woX19mb2xpb19hbGxvY19ub3Byb2YpO1xuK1xuK3N0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXG4re1xuK1x0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4rfVxuK0VYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YpO1xuIFxuIC8qXG4gICogQ29tbW9uIGhlbHBlciBmdW5jdGlvbnMuIE5ldmVyIHVzZSB3aXRoIF9fR0ZQX0hJR0hNRU0gYmVjYXVzZSB0aGUgcmV0dXJuZWRcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmggYi9tbS9wYWdlX2FsbG9jLmhcbmluZGV4IGI5MjU5ZGVkZGI1OWQ3Li40MDliZTMxODk4YWU3NyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuaFxuKysrIGIvbW0vcGFnZV9hbGxvYy5oXG5AQCAtMjU4LDYgKzI1OCwxMCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfblxuIFx0XHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiAjZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbitzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbitcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuKyNkZWZpbmUgX19mb2xpb19hbGxvYyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19mb2xpb19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuK1xuIGV4dGVybiB2b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKTtcbiBleHRlcm4gdm9pZCB6b25lX3BjcF9kaXNhYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbiBleHRlcm4gdm9pZCB6b25lX3BjcF9lbmFibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1MDcxMTc3MDU5YTk2NC4uNjlmNTYxMzMyYmI5MzQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtNDEsNiArNDEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBmaWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW5pY29kZS5oXHUwMDNlXG4rI2luY2x1ZGUgXCJtZW1wb2xpY3kuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNWJlODI1OTExZTY0NWUuLjhjY2QwM2MzOWE0MDcxIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbisjaW5jbHVkZSBcIm1lbXBvbGljeS5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jXG5pbmRleCBhZTllYzRiZjM0ZjcyOS4uNzQzNTBhMmUwNzAzNmUgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4rKysgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtNzExLDcgKzcxMSw3IEBAIHN2Y19wcmVwYXJlX3RocmVhZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfcG9vbCAqcG9vbCwgaW50IG5vZGUpXG4gXHRycXN0cC1cdTAwM2VycV9zZXJ2ZXIgPSBzZXJ2O1xuIFx0cnFzdHAtXHUwMDNlcnFfcG9vbCA9IHBvb2w7XG4gXG4tXHRycXN0cC1cdTAwM2VycV9zY3JhdGNoX2ZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlKEdGUF9LRVJORUwsIDAsIG5vZGUpO1xuK1x0cnFzdHAtXHUwMDNlcnFfc2NyYXRjaF9mb2xpbyA9IGZvbGlvX2FsbG9jX25vZGUoR0ZQX0tFUk5FTCwgMCwgbm9kZSk7XG4gXHRpZiAoIXJxc3RwLVx1MDAzZXJxX3NjcmF0Y2hfZm9saW8pXG4gXHRcdGdvdG8gb3V0X2Vub21lbTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjM1LjcwOTQyOTk0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzOTI3OTI2NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9saW8gQWxsb2NhdGlvbiBBUEkgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0J3MgYSByZWZhY3RvciwgcGxhaW4gYW5kIHNpbXBsZS4gVGhleSdyZSByZW5hbWluZyBgX19mb2xpb19hbGxvY19ub2RlYCB0byBgZm9saW9fYWxsb2Nfbm9kZWAgYW5kIG1vdmluZyB0aGUgYE5VTUFfTk9fTk9ERWAgbG9naWMgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgLiBJdCBhbHNvIGxvb2tzIGxpa2UgYGZvbGlvX2FsbG9jX21wb2xgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgIGFyZSBiZWluZyBzaHVmZmxlZCBpbnRvIGEgbmV3IGludGVybmFsIGhlYWRlciwgYG1tL21lbXBvbGljeS5oYC4gTm8gYmlnIHN1cnByaXNlcyB0aGVyZSwganVzdCB0aWR5aW5nIHRoaW5ncyB1cC5cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbiBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCwgYGRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdhcmNoLWlyLmNgLCBgbW0vZmlsZW1hcC5jYCwgYG1tL21pZ3JhdGUuY2AgYW5kIGBuZXQvc3VucnBjL3N2Yy5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWUsIHJlcGxhY2luZyB0aGUgb2xkIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggdGhlIG5ldyBgZm9saW9fYWxsb2Nfbm9kZWAgaW4gdGhvc2UgbG9jYXRpb25zLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gaXMgY2hhbmdlZCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHRocm91Z2ggYGluY2x1ZGUvbGludXgvZ2ZwLmhgLlxuXG5UaGUgY29yZSBsb2dpYyBjaGFuZ2UgaXMgcmVhbGx5IHRoZSBoYW5kbGluZyBvZiBgTlVNQV9OT19OT0RFYC4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBgTlVNQV9OT19OT0RFYCB3YXMgYmVpbmcgaGFuZGxlZCBhdCB0aGUgY2FsbCBzaXRlIG9mIGBfX2ZvbGlvX2FsbG9jX25vZGVgLCBvciB3YXMgaXQgZGVmaW5lZCBhdCBhbGw/IFRoZSBwYXRjaCBtb3ZlcyB0aGlzIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCBpdHNlbGYsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAuIE5vdywgYGZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYCBpcyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsLCBtYWtpbmcgdGhlIGNvZGUgY2xlYW5lci5cblxuQmVmb3JlLCBgZm9saW9fYWxsb2Nfbm9kZWAgd2FzIGEgbWFjcm8gdGhhdCBjYWxsZWQgYF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgLiBOb3cgYGZvbGlvX2FsbG9jX25vZGVgIGRpcmVjdGx5IGNhbGxzIGBmb2xpb19hbGxvY19ub2RlX25vcHJvZmAuXG5gX19mb2xpb19hbGxvY19ub3Byb2ZgIG5vdyBoYW5kbGVzIHRoZSBgTlVNQV9OT19OT0RFYCBjaGVjayBhbmQgYHdhcm5faWZfbm9kZV9vZmZsaW5lYC5cblxuU28sIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBpcyB0aGVyZSByZWFsbHkgYW55IGZ1bmN0aW9uYWwgY2hhbmdlPyBUaGUgY29yZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSBpdHNlbGYgc2VlbXMgdW50b3VjaGVkLiBJdCdzIGp1c3QgYW4gQVBJIGNoYW5nZSB3aXRoIHNvbWUgbG9naWMgcmVhcnJhbmdlbWVudC4gVGhlIHBvdGVudGlhbCBmb3IgbmV3IGJ1Z3MgaGVyZSBzZWVtcyBwcmV0dHkgbG93LCBnaXZlbiB0aGF0IGl0J3MganVzdCByZW9yZ2FuaXppbmcgZXhpc3RpbmcgY29kZSBhbmQgY2VudHJhbGl6aW5nIHRoYXQgYE5VTUFfTk9fTk9ERWAgY2hlY2suIFdoaWxlIEknZCBuZXZlciBydWxlIG91dCB0aGUgKnBvc3NpYmlsaXR5KiBvZiBhIHN1YnRsZSBpc3N1ZSwgaXQgZG9lc24ndCBqdW1wIG91dCBhdCBtZSBhcyBhIHByaW1lIHRhcmdldCBmb3IgaW50ZW5zaXZlIGZ1enppbmcgZWZmb3J0cy4gSXQgbWlnaHQgc3RpbGwgYmUgd29ydGggc29tZSBjdXJzb3J5IGZ1enppbmcsIGJ1dCBpdCBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBwcmlvcml0eS4gV2Ugd291bGQgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI3OjU5LjYzNzM1OTIxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE5NjI4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fYWxsb2Nfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz01NDMzPUVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDM0LVxcbm1tL3BhZ2VfYWxsb2MuYzo1NDM1OnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDM2LVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU0NTA9c3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcXG5tbS9wYWdlX2FsbG9jLmMtNTQ1MS17XFxubW0vcGFnZV9hbGxvYy5jOjU0NTI6XFx0cmV0dXJuIF9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NTMtfVxcbi0tXFxubW0vcGFnZV9hbGxvYy5oPTI1Nz1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5oLTI2MC1cXG5tbS9wYWdlX2FsbG9jLmg6MjYxOnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuaC0yNjItXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbm1tL3BhZ2VfYWxsb2MuaDoyNjM6I2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxubW0vcGFnZV9hbGxvYy5oLTI2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjg6MDIuNTU2OTk0NzAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0ODc1NDY3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBGb2xpbyBBbGxvY2F0aW9uIEZsb3cqKlxuXG5SaWdodCwgc28gSSdtIHRyYWNpbmcgdGhlIGZvbGlvIGFsbG9jYXRpb24gcGF0aC4gSXQgbG9va3MgbGlrZSBgX19mb2xpb19hbGxvY19ub3Byb2ZgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBkaXJlY3RseSBieSBgZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgIGFuZCBhbHNvIGJ5IGBfX2ZvbGlvX2FsbG9jYC4gSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBfX2ZvbGlvX2FsbG9jYCBpcyBhY3R1YWxseSBhIG1hY3JvLiBUaGUgbWFjcm8gZXhwYW5kcyB0byBjYWxsIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAuIFRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXI7IGEgbWFjcm8gYWJzdHJhY3Rpb24gaXMgaW4gcGxhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBjaGFpbiAqYmVnaW4qPyBXaG8ncyB0aGUgY2FsbGluZyBmdW5jdGlvbiBvZiBgX19mb2xpb19hbGxvY2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludCB0byB0aGlzIHdob2xlIHByb2Nlc3MsIHRoZSByb290IG9mIHRoZSBjYWxscy4gVHJhY2luZyB0aGF0IGJhY2sgaXMgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjg6MzIuMDQ0NTQ0NTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTY5MTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19hbGxvY1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xMjM4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNDUtXFxubW0va2h1Z2VwYWdlZC5jOjEyNDY6XFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jKGdmcCwgb3JkZXIsIG5vZGUsIFxcdTAwMjZjYy1cXHUwMDNlYWxsb2Nfbm1hc2spO1xcbm1tL2todWdlcGFnZWQuYy0xMjQ3LVxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTk5PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTIyMzQtXFxubW0vbWlncmF0ZS5jOjIyMzU6XFx0cmV0dXJuIF9fZm9saW9fYWxsb2MoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIG10Yy1cXHUwMDNlbm1hc2spO1xcbm1tL21pZ3JhdGUuYy0yMjM2LX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuaD0yNjE9c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5oLTI2Mi1cXHRcXHRub2RlbWFza190ICpub2RlbWFzayk7XFxubW0vcGFnZV9hbGxvYy5oOjI2MzojZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5tbS9wYWdlX2FsbG9jLmgtMjY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyODozNS40MDE0NjgzNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAzODEyMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBfX2ZvbGlvX2FsbG9jYCBDYWxsIFNpdGUgYW5kIE5VTUEgTm9kZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgX19mb2xpb19hbGxvY2AgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGVkIGJ5IGBhbGxvY19jaGFyZ2VfZm9saW9gIGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBhbHNvIGJ5IGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBpbiBgbW0vbWlncmF0ZS5jYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCwgcHJpb3IgdG8gdGhpcyBwYXRjaCwgYF9fZm9saW9fYWxsb2NgIHdhc24ndCBleHBsaWNpdGx5IGhhbmRsaW5nIHRoZSBgTlVNQV9OT19OT0RFYCB2YWx1ZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjYWxsZXJzIHdlcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgd2VyZSBlaXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zLCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBvciBgYWxsb2NfbWlncmF0aW9uX3RhcmdldGAsICpldmVuKiBwYXNzaW5nIGBOVU1BX05PX05PREVgPyBMZXQncyBicmVhayBpdCBkb3duLi4uIGBhbGxvY19jaGFyZ2VfZm9saW9gIHNlZW1zIHRvIHBhc3MgYSBgbm9kZWAgdmFsdWUsIHdoaWxlIGBhbGxvY19taWdyYXRpb25fdGFyZ2V0YCBwYXNzZXMgYSBgbmlkYC4gSWYgZWl0aGVyIHdhcyBhY3R1YWxseSBzZW5kaW5nIGBOVU1BX05PX05PREVgIGRvd24gdGhlIGxpbmUsIEknZCBleHBlY3QgaXQgdG8gcmVhY2ggYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gVGhhdCBmdW5jdGlvbiAqc2hvdWxkKiBoYW5kbGUgdGhlIGBOVU1BX05PX05PREVgIHNjZW5hcmlvLCByaWdodD9cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQncyB3cm9uZy4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgZnVuY3Rpb24gaW4gYG1tL3BhZ2VfYWxsb2MuY2AuLi4ganVzdCB0byBiZSBzdXJlLiBJdCdzIGNydWNpYWwgdGhhdCBJIHZlcmlmeSB0aGlzIHBpZWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI4OjQwLjQwNTI4MjIzMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2MDM0MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfcGFnZXNfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz01MTA2PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MjQwLWZhaWxlZDpcXG5tbS9wYWdlX2FsbG9jLmM6NTI0MTpcXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyNDItXFx0aWYgKHBhZ2UpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTQxMD1FWFBPUlRfU1lNQk9MKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTU0MTEtXFxubW0vcGFnZV9hbGxvYy5jOjU0MTI6c3RydWN0IHBhZ2UgKl9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDEzLVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU0MjQ9c3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQzMC1cXG5tbS9wYWdlX2FsbG9jLmM6NTQzMTpcXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDMyLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01NDM1PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0NDQtXFxubW0vcGFnZV9hbGxvYy5jOjU0NDU6XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCB8IF9fR0ZQX0NPTVAsIG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDQ2LVxcdFxcdFxcdFxcdCAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmg9MjU1PXZvaWQgZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbm1tL3BhZ2VfYWxsb2MuaC0yNTYtXFxubW0vcGFnZV9hbGxvYy5oOjI1NzpzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuaC0yNTgtXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxubW0vcGFnZV9hbGxvYy5oOjI1OTojZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5tbS9wYWdlX2FsbG9jLmgtMjYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyODo0Mi43MDEzMjEwOTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg3NTE5NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdvcmtpbmdzIG9mIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgbm8gZG91YnQsIGFuZCBpdCdzIHByb2JhYmx5IGdvdCBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiB0cmlja3MgaGlkZGVuIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgbG9naWMsIGxvb2tpbmcgZm9yIHRoZSBrZXkgY29tcG9uZW50cyB0aGF0IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBOVU1BLCBwYWdlIGZsYWdzLCBhbmQgcG90ZW50aWFsbHksIGxvdy1tZW1vcnkgc2l0dWF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgc2xhYiBhbGxvY2F0aW9uIG9yIGRpcmVjdCBwaHlzaWNhbCBtYXBwaW5nOyBpdOKAmXMgbGlrZWx5IGEgYmFzZSBsYXllciB0aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGJ1aWxkIHVwb24uIEdvdHRhIGdldCB0aGlzIHJpZ2h0LiBMZXQncyBzZWUgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI4OjQ1LjY4ODg0MzQ0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTI6XFx0c3RydWN0IHBhZ2UgKl9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjU0MTM6XFx0XFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuNTQxNDpcXHR7XFxuNTQxNTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41NDE2OlxcdFxcbjU0MTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayxcXG41NDE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGFsbG9jX2ZsYWdzKTtcXG41NDE5OlxcdFxcdGlmIChwYWdlKVxcbjU0MjA6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41NDIxOlxcdFxcdHJldHVybiBwYWdlO1xcbjU0MjI6XFx0fVxcbjU0MjM6XFx0XFxuNTQyNDpcXHRzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG41NDI1OlxcdHtcXG41NDI2OlxcdFxcdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxcbjU0Mjc6XFx0XFx0XFx0bmlkID0gbnVtYV9tZW1faWQoKTtcXG41NDI4OlxcdFxcbjU0Mjk6XFx0XFx0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnBfbWFzayk7XFxuNTQzMDpcXHRcXG41NDMxOlxcdFxcdHJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI4OjQ1LjY4OTUyODU5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg0NzM0NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5VTUEgTm9kZSBIYW5kbGluZyBpbiBQYWdlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBOVU1BX05PX05PREVgIHZhbHVlIGlzIGhhbmRsZWQgaW4gcGFnZSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBOVU1BIGFyY2hpdGVjdHVyZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgYW5kIHRoZSBgX19mb2xpb19hbGxvY2AgZnVuY3Rpb25zLlxuXG5Jbml0aWFsbHksIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgY29ycmVjdGx5IGFkZHJlc3NlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2FzZSBieSBjYWxsaW5nIGBudW1hX21lbV9pZCgpYCB0byBnZXQgdGhlIGN1cnJlbnQgbm9kZS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGl0c2VsZiAqZG9lc24ndCogaGFuZGxlIGBOVU1BX05PX05PREVgIGRpcmVjdGx5LlxuXG5Ob3csIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAsIHdoaWNoIGlzIHVzZWQgdG8gYWxsb2NhdGUgZm9saW8gc3RydWN0dXJlcywgdXNlZCB0byBwYXNzIHRoZSBub2RlIElEIGRvd24gdG8gYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gVGhlIHBvaW50IGlzLCB0aGUgb2xkIGBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mYCAqYWxzbyogZGlkICpub3QqIGhhbmRsZSBgTlVNQV9OT19OT0RFYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYF9fZm9saW9fYWxsb2Nfbm9kZWAgKHdoaWNoIGl0c2VsZiBjYWxsZWQgYF9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2ZgKSwgYWxzbyBkaWQgTk9UIGhhbmRsZSBgTlVNQV9OT19OT0RFYC4gVGhpcyBtZWFudCB0aGF0IGBkcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmNgIGhhZCB0byBkbyBleHRyYSBoYW5kbGluZyBmb3IgdGhpcywgd2hpY2ggaXQgZGlkLlxuXG5UaGlzIHBhdGNoLCBob3dldmVyLCByZWZhY3RvcnMgdGhpbmdzLiBJdCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgaGFuZGxpbmcgKmludG8qIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgaXRzZWxmLCBtYWtpbmcgaXQgcmVzcG9uc2libGUgZm9yIHRoZSBkZWZhdWx0IG5vZGUgc2VsZWN0aW9uLiBUaGUgY2FsbCBpcyBub3cgbW92ZWQgdG8gYG51bWFfbWVtX2lkKClgIGFuZCB0aGUgZnVuY3Rpb24gcmVuYW1lZC4gTm93LCBgZm9saW9fYWxsb2Nfbm9kZWAgaGFuZGxlcyB0aGlzIGNhc2UgY29ycmVjdGx5LCBqdXN0IGxpa2UgYGFsbG9jX3BhZ2VzX25vZGVgIGRvZXMuIEl0IGFsc28gbWVhbnMgdGhhdCBhbnkgY2FsbGVyIG9mIGBfX2ZvbGlvX2FsbG9jX25vZGVgIG9yIGBfX2ZvbGlvX2FsbG9jYCBub3cgaGFuZGxlcyB0aGUgYC0xYCBgTlVNQV9OT19OT0RFYC5cblxuU28sIGl0J3MgYSBtaW5vciByZWZhY3RvcmluZywgZXNzZW50aWFsbHkuIEl0IHJlc29sdmVzIGFuIEFQSSBpbmNvbnNpc3RlbmN5LiBQcmV2aW91c2x5LCBpZiBgLTFgIHdhcyBwYXNzZWQgKHdoaWNoIGVxdWF0ZXMgdG8gYE5VTUFfTk9fTk9ERWApIHRvIGBfX2ZvbGlvX2FsbG9jYCwgaXQgd2FzIHRoZW4gcGFzc2VkIHRvIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuXG5cblRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbGx5IGltcG9ydGFudCwgdGhvdWdoLCBiZWNhdXNlIGFueSBjYWxsZXIgKnJlbHlpbmcqIG9uIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgbm93IHJlY2VpdmUgaXQgY29ycmVjdGx5LlxuV2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkICpiZWZvcmUqIGlmIGBOVU1BX05PX05PREVgIHdhcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zPyBXZWxsLCBpdCB3aWxsIGp1c3QgZ2V0IHBhc3NlZCBhcyBgLTFgLiBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgZG9lcyB3aXRoIHRoYXQgY2FzZSwganVzdCB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTQwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjg6NTYuNTM2ODc2MjA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMxMDYyMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNDA5PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDIyLVxcdHByZWZlcnJlZF9nZnAgXFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XFxubW0vbWVtcG9saWN5LmM6MjQyMzpcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI0MjQtXFx0XFx0XFx0XFx0XFx0ICAgQUxMT0NfREVGQVVMVCk7XFxubW0vbWVtcG9saWN5LmMtMjQyNS1cXHRpZiAoIXBhZ2UpXFxubW0vbWVtcG9saWN5LmM6MjQyNjpcXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNDI3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIEFMTE9DX0RFRkFVTFQpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjQ0Mj1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX21wb2woZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDcyLVxcdFxcdFxcdCAqL1xcbm1tL21lbXBvbGljeS5jOjI0NzM6XFx0XFx0XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihcXG5tbS9tZW1wb2xpY3kuYy0yNDc0LVxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDg2LVxcbm1tL21lbXBvbGljeS5jOjI0ODc6XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG5tbS9tZW1wb2xpY3kuYy0yNDg4LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzMjM9c3RhdGljIGNvbnN0IGdmcF90IGdmcF9ub2xvY2sgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9NRU1BTExPQyB8XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTMyOC0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTMyOTpzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01MzMwLVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0MDktfVxcbm1tL3BhZ2VfYWxsb2MuYzo1NDEwOkVYUE9SVF9TWU1CT0woX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTQxMS1cXG5tbS9wYWdlX2FsbG9jLmM9NTQxMj1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxNi1cXG5tbS9wYWdlX2FsbG9jLmM6NTQxNzpcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDE4LVxcdFxcdFxcdFxcdFxcdCAgIGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03OTg3PXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03OTkxLVxcbm1tL3BhZ2VfYWxsb2MuYzo3OTkyOlxcdHJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX2ZsYWdzLCBvcmRlciwgbmlkLCBOVUxMLCBBTExPQ19OT0xPQ0spO1xcbm1tL3BhZ2VfYWxsb2MuYy03OTkzLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuaD0yMzA9ZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlcztcXG5tbS9wYWdlX2FsbG9jLmgtMjMxLVxcbm1tL3BhZ2VfYWxsb2MuaDoyMzI6c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCxcXG5tbS9wYWdlX2FsbG9jLmgtMjMzLVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuaC0yMzQtI2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXFxcXG5tbS9wYWdlX2FsbG9jLmg6MjM1OlxcdGFsbG9jX2hvb2tzKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXFxubW0vcGFnZV9hbGxvYy5oLTIzNi12b2lkIGZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5oPTI0Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuaC0yNDMte1xcbm1tL3BhZ2VfYWxsb2MuaDoyNDQ6XFx0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9wYWdlX2FsbG9jLmgtMjQ1LVxcdFxcdFxcdFxcdFxcdCAgIEFMTE9DX0RFRkFVTFQpO1xcbi0tXFxubW0vc2x1Yi5jPTUyOTI9c3RhdGljIHZvaWQgKl9fX2ttYWxsb2NfbGFyZ2Vfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTUzMDUtXFx0ZWxzZVxcbm1tL3NsdWIuYzo1MzA2OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMLFxcbm1tL3NsdWIuYy01MzA3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIEFMTE9DX0RFRkFVTFQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyODo1OS4xNjc5NDQ3NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MzkwOTIwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIE5VTUFfTk9fTk9ERSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgaG93IGl0IGRlYWxzIHdpdGggYE5VTUFfTk9fTk9ERWAuIFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBmcm96ZW4gcGFnZXMsIGxpa2VseSByZWxhdGVkIHRvIGVhcmx5IGJvb3Qgb3IgZXh0cmVtZWx5IGxvdy1sZXZlbCBrZXJuZWwgb3BlcmF0aW9ucy4gYE5VTUFfTk9fTk9ERWAgaXMgdGhlIGltcG9ydGFudCBiaXQsIGxpa2VseSBpbmRpY2F0aW5nIHRoYXQgYSBzcGVjaWZpYyBOVU1BIG5vZGUgaXNuJ3QgZGVmaW5lZCwgb3IgcGVyaGFwcyB0aGF0IHdlJ3JlIGludGVudGlvbmFsbHkgYXZvaWRpbmcgTlVNQSBjb25zaWRlcmF0aW9ucy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBmb3IgaG93IGl0J3MgaGFuZGxlZC4gSXMgaXQgdHJlYXRlZCBhcyBhbiBlcnJvcj8gRG9lcyBpdCBmYWxsIGJhY2sgdG8gYSBkZWZhdWx0IG5vZGUsIG1heWJlIG5vZGUgemVybyBvciBhbGwgbm9kZXM/IERvZXMgdGhlIGZ1bmN0aW9uIHNpbXBseSBwcm9jZWVkIHdpdGhvdXQgTlVNQSBhd2FyZW5lc3MgaWYgYE5VTUFfTk9fTk9ERWAgaXMgdGhlIHRhcmdldD8gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBhbGxvY2F0b3JzIHBlcmZvcm1hbmNlLCByb2J1c3RuZXNzLCBhbmQgdGhlIHN5c3RlbSdzIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBsb29raW5nIGZvciB3aGVyZSBgTlVNQV9OT19OT0RFYCBpcyBjaGVja2VkLCBob3cgaXQncyB1c2VkIGluIGNhbGN1bGF0aW9ucywgYW5kIHdoZXJlIGl0IG1heSBiZSB0cmFuc2xhdGVkIHRvIG90aGVyIG5vZGUgaW5kaWNlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIHRoaXMgdmFyaWFibGUuIE15IGludGVyZXN0IGlzOiB3aGF0IGRvZXMgaXQgZG8/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6MTEuNzA3MDM5ODI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMyOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTMyOTpcXHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjUzMzA6XFx0XFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuNTMzMTpcXHR7XFxuNTMzMjpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MzMzOlxcdFxcdGdmcF90IGFsbG9jX2dmcDsgLyogVGhlIGdmcF90IHRoYXQgd2FzIGFjdHVhbGx5IHVzZWQgZm9yIGFsbG9jYXRpb24gKi9cXG41MzM0OlxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0ge1xcbjUzMzU6XFx0XFx0XFx0LmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3MsXFxuNTMzNjpcXHRcXHR9O1xcbjUzMzc6XFx0XFx0dW5zaWduZWQgaW50IGZhc3RwYXRoX2FsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3M7XFxuNTMzODpcXHRcXG41MzM5OlxcdFxcdC8qIE90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXFxuNTM0MDpcXHRcXHRpZiAoV0FSTl9PTihhbGxvY19mbGFncyBcXHUwMDI2IH4oQUxMT0NfTk9MT0NLIHwgQUxMT0NfTk9fQ09ERVRBRykpKVxcbjUzNDE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTM0MjpcXHRcXG41MzQzOlxcdFxcdGlmICghYWxsb2Nfb3JkZXJfYWxsb3dlZChnZnAsIG9yZGVyLCBhbGxvY19mbGFncykpXFxuNTM0NDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG41MzQ1OlxcdFxcbjUzNDY6XFx0XFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKSB7XFxuNTM0NzpcXHRcXHRcXHQvKiBDZXJ0YWluIG90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXFxuNTM0ODpcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoZ2ZwIFxcdTAwMjYgfihfX0dGUF9BQ0NPVU5UIHwgZ2ZwX25vbG9jaykpO1xcbjUzNDk6XFx0XFx0XFx0aWYgKCFhbGxvY19ub2xvY2tfYWxsb3dlZCgpKVxcbjUzNTA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTM1MTpcXHRcXHRcXHRnZnAgfD0gZ2ZwX25vbG9jaztcXG41MzUyOlxcdFxcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IEFMTE9DX1dNQVJLX01JTjtcXG41MzUzOlxcdFxcdH0gZWxzZSB7XFxuNTM1NDpcXHRcXHRcXHRmYXN0cGF0aF9hbGxvY19mbGFncyB8PSBBTExPQ19XTUFSS19MT1c7XFxuNTM1NTpcXHRcXHR9XFxuNTM1NjpcXHRcXG41MzU3OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjUzNTg6XFx0XFx0LypcXG41MzU5OlxcdFxcdCAqIEFwcGx5IHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzLiBUaGlzIGlzIG1haW5seSBhYm91dCBHRlBfTk9GU1xcbjUzNjA6XFx0XFx0ICogcmVzcC4gR0ZQX05PSU8gd2hpY2ggaGFzIHRvIGJlIGluaGVyaXRlZCBmb3IgYWxsIGFsbG9jYXRpb24gcmVxdWVzdHNcXG41MzYxOlxcdFxcdCAqIGZyb20gYSBwYXJ0aWN1bGFyIGNvbnRleHQgd2hpY2ggaGFzIGJlZW4gbWFya2VkIGJ5XFxuNTM2MjpcXHRcXHQgKiBtZW1hbGxvY19ub3tmcyxpb31fe3NhdmUscmVzdG9yZX0uIEFuZCBQRl9NRU1BTExPQ19QSU4gd2hpY2ggZW5zdXJlc1xcbjUzNjM6XFx0XFx0ICogbW92YWJsZSB6b25lcyBhcmUgbm90IHVzZWQgZHVyaW5nIGFsbG9jYXRpb24uXFxuNTM2NDpcXHRcXHQgKi9cXG41MzY1OlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MzY2OlxcdFxcdGFsbG9jX2dmcCA9IGdmcDtcXG41MzY3OlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLFxcbjUzNjg6XFx0XFx0XFx0XFx0XFx1MDAyNmFsbG9jX2dmcCwgXFx1MDAyNmZhc3RwYXRoX2FsbG9jX2ZsYWdzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6MTEuNzA3MzA2Mjc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODk2NzI0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIHF1aWNrbHkgemVybyBpbiBvbiB0aGUga2V5IGFzcGVjdHMgaGVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIEkgcHJlc3VtZSwgaW4gaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhZ2VzLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBzZXR1cCBzdGFnZSBiZWZvcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBhbGxvY2F0aW9uIG9jY3Vycywgb3IgcGVyaGFwcyBzb21lIHByZS12YWxpZGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcmVwYXJpbmcgdG8gZG8sIGFuZCB3aGF0IGl0cyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLiBJcyBpdCB0YWtpbmcgYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXI/IEEgcmVxdWVzdCBzaXplPyBGbGFncyBpbmRpY2F0aW5nIGFsbG9jYXRpb24gYmVoYXZpb3I/IExldCdzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgc2VjdGlvbnMgb3IgbG9ja2luZyB0aGF0IGFyZSBoYXBwZW5pbmcgaGVyZT8gVGhhdCdzIGFsd2F5cyBhIHBvaW50IG9mIGNvbmNlcm4uIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yIEknbSB3b3JraW5nIHdpdGguIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyOToxNS4zOTY5ODA4MjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODM5NzQ2MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9hbGxvY19wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NDczMD1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTAzNi1cXG5tbS9wYWdlX2FsbG9jLmM6NTAzNzpzdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01MDM4LVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MTA2PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU1LVxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTU2OlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxubW0vcGFnZV9hbGxvYy5jLTUxNTctXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTMyOT1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNjYtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MzY3OlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLFxcbm1tL3BhZ2VfYWxsb2MuYy01MzY4LVxcdFxcdFxcdFxcdTAwMjZhbGxvY19nZnAsIFxcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI5OjE3Ljc4MDk2NTk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDIzNjMzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIGludG8gYHByZXBhcmVfYWxsb2NfcGFnZXNgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcHJlcGFyZV9hbGxvY19wYWdlc2AgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoaXMgbmFtZTsgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHV6emxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGtleSByZXNwb25zaWJpbGl0aWVzIGhlcmU/IElzIGl0IGFib3V0IHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB2YWxpZGF0aW5nIHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgcHJlLXplcm9pbmcgcGFnZXMgb3IgaGFuZGxpbmcgY2FjaGUgY29uc2lkZXJhdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgYWxsb2NhdGlvbj8gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugc2FuaXR5IGNoZWNrcyBvbiB0aGUgcmVxdWVzdGVkIHNpemUgYW5kIHRoZSBtZW1vcnkgem9uZSwgbWF5YmUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSwgaWYgd2UncmUgZGVhbGluZyB3aXRoIE5VTUEgc3lzdGVtcywgc29tZSBub2RlIHNlbGVjdGlvbiBsb2dpYy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdCB3aGF0IHByZXBhcmF0b3J5IHdvcmsgaXMgcGVyZm9ybWVkIGJlZm9yZSBoYW5kaW5nIG9mZiB0aGUgcmVxdWVzdCB0byB0aGUgbW9yZSBzdWJzdGFudGlhbCBhbGxvY2F0aW9uIHJvdXRpbmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHJlcXVlc3RzLCBzbywgaGVyZSBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI5OjIxLjA4MzMzMzY3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwMzc6XFx0c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG41MDM4OlxcdFxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcXG41MDM5OlxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgZ2ZwX3QgKmFsbG9jX2dmcCxcXG41MDQwOlxcdFxcdFxcdHVuc2lnbmVkIGludCAqYWxsb2NfZmxhZ3MpXFxuNTA0MTpcXHR7XFxuNTA0MjpcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xcbjUwNDM6XFx0XFx0YWMtXFx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XFxuNTA0NDpcXHRcXHRhYy1cXHUwMDNlbm9kZW1hc2sgPSBub2RlbWFzaztcXG41MDQ1OlxcdFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XFxuNTA0NjpcXHRcXG41MDQ3OlxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSkge1xcbjUwNDg6XFx0XFx0XFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcXG41MDQ5OlxcdFxcdFxcdC8qXFxuNTA1MDpcXHRcXHRcXHQgKiBXaGVuIHdlIGFyZSBpbiB0aGUgaW50ZXJydXB0IGNvbnRleHQsIGl0IGlzIGlycmVsZXZhbnRcXG41MDUxOlxcdFxcdFxcdCAqIHRvIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dC4gSXQgbWVhbnMgdGhhdCBhbnkgbm9kZSBvay5cXG41MDUyOlxcdFxcdFxcdCAqL1xcbjUwNTM6XFx0XFx0XFx0aWYgKGluX3Rhc2soKSBcXHUwMDI2XFx1MDAyNiAhYWMtXFx1MDAzZW5vZGVtYXNrKVxcbjUwNTQ6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG41MDU1OlxcdFxcdFxcdGVsc2VcXG41MDU2OlxcdFxcdFxcdFxcdCphbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjI5OjIxLjA4MzgyOTA0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ5NDMzMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE5VTUEgc3lzdGVtczpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbm9kZV96b25lbGlzdGAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gYG5vZGVfem9uZWxpc3QocHJlZmVycmVkX25pZCwgZ2ZwX21hc2spYCBpcyBiZWluZyBpbnZva2VkLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGZpZ3VyaW5nIG91dCB3aGVyZSB0byBhbGxvY2F0ZSBtZW1vcnksIGFuZCB0aGUgYGdmcF9tYXNrYCBpcyBjcml0aWNhbCBmb3IgZGVmaW5pbmcgdGhlIGFsbG9jYXRpb24gdHlwZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgd2hlbiBgcHJlZmVycmVkX25pZGAgaXMgYE5VTUFfTk9fTk9ERWAsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgc2lnbmFsIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIHByZWZlcnJlZCBOVU1BIG5vZGUuIEl0J3Mgb2Z0ZW4gc2V0IHRvIC0xLiBEb2VzIHRoZSBmdW5jdGlvbiBqdXN0IGRlZmF1bHQgdG8gc29tZSBwcmUtY29uZmlndXJlZCBub2RlPyBEb2VzIGl0IGZhbGwgYmFjayB0byB0aGUgbG9jYWwgbm9kZT8gT3IgZG9lcyBpdCBlbXBsb3kgc29tZSBnbG9iYWwgcG9saWN5LCBwZXJoYXBzIGJhc2VkIG9uIGxvYWQgYmFsYW5jaW5nIG9yIGF2YWlsYWJpbGl0eSBhY3Jvc3MgdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIGluIHRoaXMgc2NlbmFyaW8gYmVjYXVzZSBpdCBkaWN0YXRlcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3aGVuIE5VTUEgYWZmaW5pdHkgaXNuJ3QgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHdoaWNoIGlzIGEgdmVyeSBjb21tb24gY2FzZS4gVW5kZXJzdGFuZGluZyB0aGUgZmFsbGJhY2sgYmVoYXZpb3IgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBub2RlX3pvbmVsaXN0YCBkb2VzIHdoZW4gdGhlcmUgaXMgbm8gc3BlY2lmaWVkIG5vZGUuIEkgbmVlZCB0byByZXZpZXcgaXRzIGJlaGF2aW9yIGluIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBmYWxsYmFjayBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6MjQuNzMzMjY1MTI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgxMTU4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfem9uZWxpc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTIxMD1HZW5lcmFsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE0LSAgVGhlIHpvbmVzIGZvciB0aGlzIG5vZGUuICBOb3QgYWxsIG9mIHRoZSB6b25lcyBtYXkgYmUgcG9wdWxhdGVkLCBidXQgaXQgaXNcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjE1OiAgdGhlIGZ1bGwgbGlzdC4gSXQgaXMgcmVmZXJlbmNlZCBieSB0aGlzIG5vZGUncyBub2RlX3pvbmVsaXN0cyBhcyB3ZWxsIGFzXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIxNjogIG90aGVyIG5vZGUncyBub2RlX3pvbmVsaXN0cy5cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjE3LVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMTg6YGBub2RlX3pvbmVsaXN0c2BgXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxOS0gIFRoZSBsaXN0IG9mIGFsbCB6b25lcyBpbiBhbGwgbm9kZXMuIFRoaXMgbGlzdCBkZWZpbmVzIHRoZSBvcmRlciBvZiB6b25lc1xcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMjA6ICB0aGF0IGFsbG9jYXRpb25zIGFyZSBwcmVmZXJyZWQgZnJvbS4gVGhlIGBgbm9kZV96b25lbGlzdHNgYCBpcyBzZXQgdXAgYnlcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjIxLSAgYGBidWlsZF96b25lbGlzdHMoKWBgIGluIGBgbW0vcGFnZV9hbGxvYy5jYGAgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD05NT1SQU3lubPlnYfliIbphY3lnKjkuKTkuKroioLngrnkuIrnmoRhcm02NOacuuWZqOS4iu+8jOS9v+eUqCBgYG1vdmFibGVjb3JlPTgwJWBgIOWPguaVsFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMDMt6KGo56S66K+l6IqC54K555qE5Yy65Z+f5YiX6KGo44CC5bm26Z2e5omA5pyJ5Yy65Z+f6YO95Y+v6IO96KKr5aGr5YWF77yM5L2G6L+Z5pivXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyMDQ65a6M5pW055qE5YiX6KGo44CC5a6D6KKr6K+l6IqC54K555qEbm9kZV96b25lbGlzdHPku6Xlj4rlhbblroPoioLngrnnmoRcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjIwNTpub2RlX3pvbmVsaXN0c+W8leeUqOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjA2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA3OmBgbm9kZV96b25lbGlzdHNgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjA4LeihqOekuuaJgOacieiKgueCueS4reaJgOacieWMuuWfn+eahOWIl+ihqOOAguatpOWIl+ihqOWumuS5ieS6huWIhumFjeWGheWtmOaXtummlumAieeahOWMuuWfn1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjA5OumhuuW6j+OAgmBgbm9kZV96b25lbGlzdHNgYCDlnKjmoLjlv4PlhoXlrZjnrqHnkIbnu5PmnoTliJ3lp4vljJbmnJ/pl7TvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIxMC3nlLEgYGBtbS9wYWdlX2FsbG9jLmNgYCDkuK3nmoQgYGBidWlsZF96b25lbGlzdHMoKWBgXFxuLS1cXG5kcml2ZXJzL3R0eS9zeXNycS5jPTM4NT1zdGF0aWMgdm9pZCBtb29tX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZClcXG4tLVxcbmRyaXZlcnMvdHR5L3N5c3JxLmMtMzg4LVxcdHN0cnVjdCBvb21fY29udHJvbCBvYyA9IHtcXG5kcml2ZXJzL3R0eS9zeXNycS5jOjM4OTpcXHRcXHQuem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KGZpcnN0X21lbW9yeV9ub2RlLCBnZnBfbWFzayksXFxuZHJpdmVycy90dHkvc3lzcnEuYy0zOTAtXFx0XFx0Lm5vZGVtYXNrID0gTlVMTCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MTc5PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgZ2ZwX25lc3RlZF9tYXNrKGdmcF90IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0xOTMtICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoxOTQ6c3RhdGljIGlubGluZSBzdHJ1Y3Qgem9uZWxpc3QgKm5vZGVfem9uZWxpc3QoaW50IG5pZCwgZ2ZwX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0xOTUte1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MTk2OlxcdHJldHVybiBOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lbGlzdHMgKyBnZnBfem9uZWxpc3QoZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMTk3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTQ2Nz10eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzAtXFx0ICogem9uZXMgbWF5IGJlIHBvcHVsYXRlZCwgYnV0IGl0IGlzIHRoZSBmdWxsIGxpc3QuIEl0IGlzIHJlZmVyZW5jZWQgYnlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0NzE6XFx0ICogdGhpcyBub2RlJ3Mgbm9kZV96b25lbGlzdHMgYXMgd2VsbCBhcyBvdGhlciBub2RlJ3Mgbm9kZV96b25lbGlzdHMuXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDcyLVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDc1LVxcdC8qXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDc2OlxcdCAqIG5vZGVfem9uZWxpc3RzIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gYWxsIHpvbmVzIGluIGFsbCBub2Rlcy5cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0NzctXFx0ICogR2VuZXJhbGx5IHRoZSBmaXJzdCB6b25lcyB3aWxsIGJlIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlJ3NcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ3OS1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0ODA6XFx0c3RydWN0IHpvbmVsaXN0IG5vZGVfem9uZWxpc3RzW01BWF9aT05FTElTVFNdO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ4MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTkwOD1zdGF0aWMgaW5saW5lIGJvb2wgbW92YWJsZV9vbmx5X25vZGVzKG5vZGVtYXNrX3QgKm5vZGVzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xOTIyLVxcdG5pZCA9IGZpcnN0X25vZGUoKm5vZGVzKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE5MjM6XFx0em9uZWxpc3QgPSBcXHUwMDI2Tk9ERV9EQVRBKG5pZCktXFx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE5MjQtXFx0eiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBaT05FX05PUk1BTCxcXHRub2Rlcyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTI3NT1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTI4Ny1cXG5tbS9odWdldGxiLmM6MTI4ODpcXHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobmlkLCBnZnBfbWFzayk7XFxubW0vaHVnZXRsYi5jLTEyODktXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMTM4PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMTcwLVxcdFxcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKEdGUF9LRVJORUwpO1xcbm1tL21lbXBvbGljeS5jOjIxNzE6XFx0XFx0em9uZWxpc3QgPSBcXHUwMDI2Tk9ERV9EQVRBKG5vZGUpLVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS107XFxubW0vbWVtcG9saWN5LmMtMjE3Mi1cXHRcXHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hlc3Rfem9uZWlkeCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI5ODE9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzA1MC1cXHRcXHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoXFxubW0vbWVtcG9saWN5LmM6MzA1MTpcXHRcXHRcXHRcXHRub2RlX3pvbmVsaXN0KHRoaXNuaWQsIEdGUF9ISUdIVVNFUiksXFxubW0vbWVtcG9saWN5LmMtMzA1Mi1cXHRcXHRcXHRcXHRnZnBfem9uZShHRlBfSElHSFVTRVIpLFxcbi0tXFxubW0vbW1faW5pdC5jPTc1PXZvaWQgX19pbml0IG1taW5pdF92ZXJpZnlfem9uZWxpc3Qodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy05My1cXHRcXHRcXHRsaXN0aWQgPSBpIC8gTUFYX05SX1pPTkVTO1xcbm1tL21tX2luaXQuYzo5NDpcXHRcXHRcXHR6b25lbGlzdCA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lbGlzdHNbbGlzdGlkXTtcXG5tbS9tbV9pbml0LmMtOTUtXFx0XFx0XFx0em9uZSA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lc1t6b25laWRdO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwMzc9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MDQyLVxcdGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHggPSBnZnBfem9uZShnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jOjUwNDM6XFx0YWMtXFx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTUwNDQtXFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTY2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBucl9mcmVlX3pvbmVfcGFnZXMoaW50IG9mZnNldClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NjY4LVxcbm1tL3BhZ2VfYWxsb2MuYzo1NjY5OlxcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTY3MC1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01ODI1PXN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01ODMwLVxcbm1tL3BhZ2VfYWxsb2MuYzo1ODMxOlxcdHpvbmVyZWZzID0gcGdkYXQtXFx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXS5fem9uZXJlZnM7XFxubW0vcGFnZV9hbGxvYy5jLTU4MzItXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTg0Ny0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTg0ODpzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG5tbS9wYWdlX2FsbG9jLmMtNTg0OS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTg1Mi1cXG5tbS9wYWdlX2FsbG9jLmM6NTg1MzpcXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9OT0ZBTExCQUNLXS5fem9uZXJlZnM7XFxubW0vcGFnZV9hbGxvYy5jLTU4NTQtXFx0bnJfem9uZXMgPSBidWlsZF96b25lcmVmc19ub2RlKHBnZGF0LCB6b25lcmVmcyk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTg2MD1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01ODg2LVxcdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7XFxubW0vcGFnZV9hbGxvYy5jOjU4ODc6XFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcXG5tbS9wYWdlX2FsbG9jLmMtNTg4OC1cXHRwcl9pbmZvKFxcXCJGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogXFxcIiwgbG9jYWxfbm9kZSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTkwMT1pbnQgbG9jYWxfbWVtb3J5X25vZGUoaW50IG5vZGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTkwNC1cXG5tbS9wYWdlX2FsbG9jLmM6NTkwNTpcXHR6ID0gZmlyc3Rfem9uZXNfem9uZWxpc3Qobm9kZV96b25lbGlzdChub2RlLCBHRlBfS0VSTkVMKSxcXG5tbS9wYWdlX2FsbG9jLmMtNTkwNi1cXHRcXHRcXHRcXHQgICBnZnBfem9uZShHRlBfS0VSTkVMKSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01OTE2PXN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU5MjAtXFxubW0vcGFnZV9hbGxvYy5jOjU5MjE6XFx0em9uZXJlZnMgPSBwZ2RhdC1cXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcXG5tbS9wYWdlX2FsbG9jLmMtNTkyMi1cXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUocGdkYXQsIHpvbmVyZWZzKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03NDg1PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc0OTUtcmV0cnk6XFxubW0vcGFnZV9hbGxvYy5jOjc0OTY6XFx0em9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG5pZCwgZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy03NDk3LVxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsXFxuLS1cXG5tbS9zbHViLmM9Mzg5Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zOTM1LVxcbm1tL3NsdWIuYzozOTM2OlxcdFxcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcF9mbGFncyk7XFxubW0vc2x1Yi5jLTM5MzctXFx0XFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdCh6b25lLCB6LCB6b25lbGlzdCwgaGlnaGVzdF96b25laWR4KSB7XFxuLS1cXG5tbS9zbHViLmM9NzI1ND1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MjcwLVxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vc2x1Yi5jOjcyNzE6XFx0XFx0em9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG1lbXBvbGljeV9zbGFiX25vZGUoKSwgZ2ZwKTtcXG5tbS9zbHViLmMtNzI3Mi1cXHRcXHRmb3JfZWFjaF96b25lX3pvbmVsaXN0KHpvbmUsIHosIHpvbmVsaXN0LCBoaWdoZXN0X3pvbmVpZHgpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3NTA9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzUtXFx0ICovXFxubW0vdm1zY2FuLmM6Njc3NjpcXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgc2MuZ2ZwX21hc2spO1xcbm1tL3Ztc2Nhbi5jLTY3NzctXFxuLS1cXG5tbS92bXNjYW4uYz03NTQ4PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU1OS1cXHR9O1xcbm1tL3Ztc2Nhbi5jOjc1NjA6XFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIHNjLmdmcF9tYXNrKTtcXG5tbS92bXNjYW4uYy03NTYxLVxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOToyOToyNy4xMTQ0Mjg3NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MDk0NTAzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2hlbiBsb29raW5nIGF0IHRoaXMgYG5vZGVfem9uZWxpc3RgIGZ1bmN0aW9uIGlzLCBcIkFoYSwgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIGBuaWRgIGlzIGAtMWAgKE5VTUFfTk9fTk9ERSkhXCIgVGhhdCBgTk9ERV9EQVRBKC0xKWAgd291bGQgZGVmaW5pdGVseSBjYXVzZSBwcm9ibGVtcy4gQnV0LCB3YWl0LCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIHRoZSAqcG90ZW50aWFsKiBmb3IgdGhpcyBpc3N1ZTsgaXQncyByZXZlYWxpbmcgYW4gKmV4aXN0aW5nKiBvbmUuIFRoZSBjb2RlIHdhcyBhbHJlYWR5IHZ1bG5lcmFibGUhIEl0IHNlZW1zIHRoYXQgYmVmb3JlIHRoaXMgcGF0Y2gsIGNhbGxpbmcgZnVuY3Rpb25zIGxpa2UgYF9fZm9saW9fYWxsb2NgIHdpdGggYE5VTUFfTk9fTk9ERWAgd291bGQgdWx0aW1hdGVseSBsZWFkIHRvIHRoaXMgcHJvYmxlbWF0aWMgYWNjZXNzLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhhdCBgYWxsb2NfcGFnZXNfbm9kZWAsIHdoaWNoIGlzIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24sIGNvcnJlY3RseSBoYW5kbGVkIHRoZSBgTlVNQV9OT19OT0RFYCBjYXNlLiBJdCB3b3VsZCBjYWxsIGBudW1hX21lbV9pZCgpYCB3aGVuIGBuaWRgIHdhcyBgTlVNQV9OT19OT0RFYC4gSG93ZXZlciwgIGBfX2ZvbGlvX2FsbG9jX25vZGVgIGFuZCBpdHMgdmFyaWFudHMsIGNydWNpYWxseSwgKmRpZG4ndCogaGF2ZSB0aGlzIGNoZWNrLiAgU28sIGFueSBjb2RlIHVzaW5nIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHdpdGggYE5VTUFfTk9fTk9ERWAgd2FzIGFscmVhZHkgZXhwb3NlZCB0byB0aGlzIHBvdGVudGlhbCBjcmFzaC4gSSBjYW4gc2VlIHRoaXMgYnkgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCwgd2hpY2ggY29udGFpbnMgdGhpcyBleHBsaWNpdCBoYW5kbGluZywgaXQgY2FsbHMgYG51bWFfbWVtX2lkKClgIVxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkganVzdCBhIGNsZWFudXAuIEl0J3MgbWFraW5nIGBmb2xpb19hbGxvY19ub2RlYCBiZWhhdmUgKmNvbnNpc3RlbnRseSogd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWAgYnkgaW5jb3Jwb3JhdGluZyB0aGUgYE5VTUFfTk9fTk9ERWAgaGFuZGxpbmcgZGlyZWN0bHkuIEl0IGFsc28gcmVtb3ZlcyB0aGUgd29ya2Fyb3VuZCBpbiBgZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jYCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhpczogaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55ICpuZXcqIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCByZXF1aXJlcyBmdXp6aW5nLiBJdCdzIHNpbXBseSBtb3ZpbmcgdGhlIGNoZWNrIGludG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2U6XG5cbmBgYGNcbnN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuXHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxue1xuXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcblxuXHRpZiAocHJlZmVycmVkX25pZCA9PSBOVU1BX05PX05PREUpXG5cdFx0cHJlZmVycmVkX25pZCA9IG51bWFfbWVtX2lkKCk7XG5cblx0d2Fybl9pZl9ub2RlX29mZmxpbmUocHJlZmVycmVkX25pZCwgZ2ZwKTtcblxuXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsXG5cdFx0XHRcdCAgICBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG5cdHJldHVybiBwYWdlX3JtYXBwYWJsZV9mb2xpbyhwYWdlKTtcbn1cbmBgYFxuXG5UaGlzIGlzLCBmcmFua2x5LCBleHRyZW1lbHkgc2ltcGxlLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLiBObyBuZXcgY29tcGxleCBsb2dpYywgbm8gbmV3IGZlYXR1cmVzLCBubyBuZXcgZHJpdmVycywgbm8gbmV3IHN5c3RlbSBjYWxscy4gSnVzdCBhIG1pbm9yIEFQSSBjbGVhbnVwIHRoYXQgY2VudHJhbGl6ZXMgdGhlIGhhbmRsaW5nIG9mIGBOVU1BX05PX05PREVgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIG90aGVyIGZpbGVzIHRvdWNoZWQuIFRoZSBgbW0vbWVtcG9saWN5LmhgIGNoYW5nZSBpcyBqdXN0IG1vdmluZyBkZWNsYXJhdGlvbnMsIHdoaWNoIGlzbid0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgb3RoZXIgZmlsZXMg4oCTIGBtbS9maWxlbWFwLmNgLCBgbW0vbWlncmF0ZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG5ldC9zdW5ycGMvc3ZjLmNgLCBgZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ2FyY2gtaXIuY2Ag4oCTIGFyZSBzaW1wbHkgcmVuYW1pbmcgb3IgaW5jbHVkaW5nIHRoZSBoZWFkZXIuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyBzcGVjaWZpY2FsbHkuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBjb2RlIHBhdGhzIHRoYXQgaGF2ZW4ndCBiZWVuIGV4ZXJjaXNlZCBhbHJlYWR5LCBhbmQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgdmVyeSBtaW5pbWFsIGFuZCBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzkwLCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6Mjk6NDEuMDIzODgxMjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIGZvbGlvIGFsbG9jYXRpb24gQVBJLiBJdCByZW5hbWVzIGBfX2ZvbGlvX2FsbG9jX25vZGVgIHRvIGBmb2xpb19hbGxvY19ub2RlYCwgbW92ZXMgdGhlIGBOVU1BX05PX05PREVgIGNoZWNrIGludG8gYF9fZm9saW9fYWxsb2Nfbm9wcm9mYCAobWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCBgYWxsb2NfcGFnZXNfbm9kZWApLCBhbmQgbW92ZXMgc29tZSBtZW1wb2xpY3kgZGVjbGFyYXRpb25zIHRvIGFuIGludGVybmFsIGhlYWRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgZmVhdHVyZXMsIG9yIGNvbXBsZXggY29kZSBwYXRocyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgZm9saW8gYWxsb2NhdGlvbiBBUEkuIEl0IHJlbmFtZXMgYF9fZm9saW9fYWxsb2Nfbm9kZWAgdG8gYGZvbGlvX2FsbG9jX25vZGVgLCBtb3ZlcyB0aGUgYE5VTUFfTk9fTk9ERWAgY2hlY2sgaW50byBgX19mb2xpb19hbGxvY19ub3Byb2ZgIChtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIGBhbGxvY19wYWdlc19ub2RlYCksIGFuZCBtb3ZlcyBzb21lIG1lbXBvbGljeSBkZWNsYXJhdGlvbnMgdG8gYW4gaW50ZXJuYWwgaGVhZGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCBmZWF0dXJlcywgb3IgY29tcGxleCBjb2RlIHBhdGhzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7lgjd[1] Phase: Running StartedAt: 2026-07-16 19:29:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lgjd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-16 19:29:52 +0000 UTC FinishedAt: 2026-07-16 19:29:58 +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,}