Name: series-workflow9nqzl Phase: Failed StartedAt: 2026-09-15 11:02:51 +0000 UTC FinishedAt: 2026-09-15 11:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nqzl[0] Phase: Succeeded StartedAt: 2026-09-15 11:02:51 +0000 UTC FinishedAt: 2026-09-15 11:08:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nqzl[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 11:02:51 +0000 UTC FinishedAt: 2026-09-15 11:08:16 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgYW5kIHVwZGF0ZXMgdGhlIFREWCBndWVzdCBkcml2ZXIgKGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYykgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGUgcXVvdGUgYnVmZmVyIGJhc2VkIG9uIFREWCBtZXRhZGF0YS4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBhcyBhbiBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgbGFjayB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFREWC4gRHVyaW5nIGJvb3QsIHRkeF9lYXJseV9pbml0KCkgdmVyaWZpZXMgQ1BVSUQgbGVhZiAweDIxIGZvciB0aGUgVERYIHNpZ25hdHVyZSwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzbyBYODZfRkVBVFVSRV9URFhfR1VFU1QgaXMgbmV2ZXIgc2V0LiBDb25zZXF1ZW50bHksIHRkeF9ndWVzdF9pbml0KCkgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aCAtRU5PREVWIGFuZCB0aGUgZHJpdmVyIG5ldmVyIHJlZ2lzdGVycyBvciBleGVjdXRlcy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUgYW5kIGNhbm5vdCBydW4gaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWExMmM2NDE2ZjRiOWNhZTE0ZDU0Njc5ZDNhMzE5MzcwZGNkZGJjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IGY5MDRhNjM2ZDQ0OWIuLmI5ODA1OGQ3ZDI0NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbkBAIC0xOTgsNiAmIzQzOzE5OCwzMCBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgLSBHZXQgdGhlIG1heGltdW0gVEQgUXVvdGUgc2l6ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBURCBRdW90ZSBmcm9tIGEgNC1ieXRlIFREIG1ldGFkYXRhIGZpZWxkLiBUaGUgVERYXG4mIzQzOyAqIGd1ZXN0IGRyaXZlciB1c2VzIGl0IHRvIHNpemUgdGhlIGJ1ZmZlciBmb3IgUXVvdGVzLiBPbGRlciBURFggbW9kdWxlcyBkbyBub3RcbiYjNDM7ICogc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXBvcnRlZCBzaXplIGNvdmVycyBldmVyeSBRdW90ZSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sXG4mIzQzOyAqIGluY2x1ZGluZyBTR1gtYmFzZWQgUXVvdGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBBIHJ1bnRpbWUgVERYIG1vZHVsZSB1cGRhdGUgZG9lcyBub3QgY2hhbmdlIHRoZSByZXBvcnRlZCBzaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE1heGltdW0gUXVvdGUgc2l6ZSBpbiBieXRlcyBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHZhbCwgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXHUwMDI2dmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA/IDAgOiAodTMyKXZhbDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0ZHhfZ2V0X21heF9xdW90ZV9zaXplKTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjZmMTA2ZDRiMWE1ODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuQEAgLTUwLDYgJiM0Mzs1MCw3IEBAXG4gLyogVERYIFRELVNjb3BlIE1ldGFkYXRhLiBUbyBiZSB1c2VkIGJ5IFRERy5WTS5XUiBhbmQgVERHLlZNLlJEICovXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1x0XHQweDExMTAwMDAzMDAwMDAwMTZcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1x0XHRcdDB4MTExMDAwMDMwMDAwMDAxN1xuJiM0MzsjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkVcdFx0MHg5MDEwMDAwMjAwMDAwMDA3XG4gI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTXHRcdDB4OTEwMDAwMDAwMDAwMDAxMFxuICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRURcdDB4OTEwMDAwMDAwMDAwMDAxOVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODkuLmE3NWRiYmUwMDRiZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbkBAIC04Myw2ICYjNDM7ODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XG4gXG4gdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpO1xuIFxuJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcbiYjNDM7XG4gdm9pZCBfX2luaXQgdGR4X2R1bXBfYXR0cmlidXRlcyh1NjQgdGRfYXR0cik7XG4gdm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXG5pbmRleCBkMDMwM2UzMWU4MTYxLi43MjI0YTY2YjY1ZDE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuICAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXNcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxuICAqL1xuLSNkZWZpbmUgR0VUX1FVT1RFX0JVRl9TSVpFXHRcdFNaXzEyOEtcbiYjNDM7I2RlZmluZSBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRVx0U1pfMTI4S1xuIFxuICNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVJcdFx0MVxuIFxuQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgdGR4X21yX2RlaW5pdChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptcl9ncnApXG4gI2RlZmluZSBHRVRfUVVPVEVfU1VDQ0VTU1x0XHQwXG4gI2RlZmluZSBHRVRfUVVPVEVfSU5fRkxJR0hUXHRcdDB4ZmZmZmZmZmZmZmZmZmZmZlxuIFxuLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU5cdFx0KEdFVF9RVU9URV9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgdGR4X3F1b3RlX2J1ZikpXG4mIzQzOyNkZWZpbmUgVERYX1FVT1RFX0JVRl9MRU4obilcdFx0c3RydWN0X3NpemVfdChzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiwgZGF0YSwgbilcbiBcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxuICAqIEB2ZXJzaW9uOiBRdW90ZSBmb3JtYXQgdmVyc2lvbiwgZmlsbGVkIGJ5IFRELlxuQEAgLTE5MSw4ICYjNDM7MTkxLDkgQEAgc3RydWN0IHRkeF9xdW90ZV9idWYge1xuIFx0dTggZGF0YVtdO1xuIH07XG4gXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cbiYjNDM7LyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqL1xuIHN0YXRpYyB2b2lkICpxdW90ZV9kYXRhO1xuJiM0MztzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuO1xuIFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7XG5AQCAtMjA5LDkgJiM0MzsyMTAsOCBAQCBzdGF0aWMgbG9uZyB0ZHhfZ2V0X3JlcG9ydDAoc3RydWN0IHRkeF9yZXBvcnRfcmVxIF9fdXNlciAqcmVxKVxuIFx0XHRcdCAgICAgVVNFUl9TT0NLUFRSKHJlcS1cdTAwM2V0ZHJlcG9ydCkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4tXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xuIFx0dW5zaWduZWQgaW50IGNvdW50ID0gbGVuIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQpKSB7XG5AQCAtMjIyLDEyICYjNDM7MjIyLDM0IEBAIHN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbiBcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCBmb3IgYSBRdW90ZS4gVGhpcyBjb3ZlcnMgYWxsIFF1b3RlXG4mIzQzOyAqIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKHF1b3RlX3NpemUpXG4mIzQzO1x0XHQvKiBUaGUgcmVwb3J0ZWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBidWZmZXIgaGVhZGVyICovXG4mIzQzO1x0XHRsZW4gPSBURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHQvKiBPbGRlciBURFggbW9kdWxlcyBkb24mIzM5O3QgcmVwb3J0IHRoZSBzaXplLCB1c2UgdGhlIGRlZmF1bHQgKi9cbiYjNDM7XHRcdGxlbiA9IEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGZhaWxzIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBleGNlZWRzIHRoZSBidWRkeSBhbGxvY2F0b3ImIzM5O3NcbiYjNDM7XHQgKiBtYXhpbXVtIG9yZGVyIChvcmRlci0xMCwgNE1CKS5cbiYjNDM7XHQgKi9cbiBcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdChsZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiBcdGlmICghYWRkcilcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMjg1LDcgJiM0MzszMDcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIHF1b3RlX2RhdGFfbGVuKTtcbiBcbiBcdC8qIFVwZGF0ZSBRdW90ZSBidWZmZXIgaGVhZGVyICovXG4gXHRxdW90ZV9idWYtXHUwMDNldmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSO1xuQEAgLTI5Niw3ICYjNDM7MzE4LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRlcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcJiMzNDtHZXRRdW90ZSBoeXBlcmNhbGwgZmFpbGVkLCBzdGF0dXM6JWxseFxcblwmIzM0OywgZXJyKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5AQCAtMzE1LDcgJiM0MzszMzcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4mIzQzO1x0aWYgKFREWF9RVU9URV9CVUZfTEVOKG91dF9sZW4pIFx1MDAzZSBxdW90ZV9kYXRhX2xlbilcbiBcdFx0cmV0dXJuIC1FRkJJRztcbiBcbiBcdGJ1ZiA9IGt2bWVtZHVwKHF1b3RlX2J1Zi1cdTAwM2VkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTtcbkBAIC00MTcsNyAmIzQzOzQzOSwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWluaXRfbXI7XG4gXG4tXHRxdW90ZV9kYXRhID0gYWxsb2NfcXVvdGVfYnVmKCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgYnVmZmVyIHNpemUgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlIFRELFxuJiM0MztcdCAqIGV2ZW4gYWZ0ZXIgYSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHF1b3RlX2RhdGFfbGVuID0gUEFHRV9BTElHTihnZXRfcXVvdGVfYnVmX3NpemUoKSk7XG4mIzQzO1x0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoIXF1b3RlX2RhdGEpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTQzMSw3ICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbiBcdHJldHVybiAwO1xuIFxuIGZyZWVfcXVvdGU6XG4tXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcbiYjNDM7XHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gZnJlZV9taXNjOlxuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gZGVpbml0X21yOlxuQEAgLTQ0NCw3ICYjNDM7NDcxLDcgQEAgbW9kdWxlX2luaXQodGR4X2d1ZXN0X2luaXQpO1xuIHN0YXRpYyB2b2lkIF9fZXhpdCB0ZHhfZ3Vlc3RfZXhpdCh2b2lkKVxuIHtcbiBcdHRzbV9yZXBvcnRfdW5yZWdpc3RlcihcdTAwMjZ0ZHhfdHNtX29wcyk7XG4tXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcbiYjNDM7XHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiBcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgYW5kIHVwZGF0ZXMgdGhlIFREWCBndWVzdCBkcml2ZXIgKGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYykgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGUgcXVvdGUgYnVmZmVyIGJhc2VkIG9uIFREWCBtZXRhZGF0YS4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBhcyBhbiBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgbGFjayB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFREWC4gRHVyaW5nIGJvb3QsIHRkeF9lYXJseV9pbml0KCkgdmVyaWZpZXMgQ1BVSUQgbGVhZiAweDIxIGZvciB0aGUgVERYIHNpZ25hdHVyZSwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzbyBYODZfRkVBVFVSRV9URFhfR1VFU1QgaXMgbmV2ZXIgc2V0LiBDb25zZXF1ZW50bHksIHRkeF9ndWVzdF9pbml0KCkgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aCAtRU5PREVWIGFuZCB0aGUgZHJpdmVyIG5ldmVyIHJlZ2lzdGVycyBvciBleGVjdXRlcy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUgYW5kIGNhbm5vdCBydW4gaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWExMmM2NDE2ZjRiOWNhZTE0ZDU0Njc5ZDNhMzE5MzcwZGNkZGJjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwppbmRleCBmOTA0YTYzNmQ0NDliLi5iOTgwNThkN2QyNDRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwpAQCAtMTk4LDYgJiM0MzsxOTgsMzAgQEAgdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0ZHhfaGNhbGxfZ2V0X3F1b3RlKTsKIAomIzQzOy8qKgomIzQzOyAqIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSAtIEdldCB0aGUgbWF4aW11bSBURCBRdW90ZSBzaXplCiYjNDM7ICoKJiM0MzsgKiBSZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBURCBRdW90ZSBmcm9tIGEgNC1ieXRlIFREIG1ldGFkYXRhIGZpZWxkLiBUaGUgVERYCiYjNDM7ICogZ3Vlc3QgZHJpdmVyIHVzZXMgaXQgdG8gc2l6ZSB0aGUgYnVmZmVyIGZvciBRdW90ZXMuIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdAomIzQzOyAqIHN1cHBvcnQgdGhpcyBmaWVsZCBhbmQgcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqCiYjNDM7ICogVGhlIHJlcG9ydGVkIHNpemUgY292ZXJzIGV2ZXJ5IFF1b3RlIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSwKJiM0MzsgKiBpbmNsdWRpbmcgU0dYLWJhc2VkIFF1b3Rlcy4KJiM0MzsgKgomIzQzOyAqIEEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIHJlcG9ydGVkIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE1heGltdW0gUXVvdGUgc2l6ZSBpbiBieXRlcyBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCB2YWwsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdGRnX3ZtX3JkKFREQ1NfUVVPVEVfTUFYX1NJWkUsICZhbXA7dmFsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCA/IDAgOiAodTMyKXZhbDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodGR4X2dldF9tYXhfcXVvdGVfc2l6ZSk7CiYjNDM7CiBzdGF0aWMgdm9pZCBfX25vcmV0dXJuIHRkeF9wYW5pYyhjb25zdCBjaGFyICptc2cpCiB7CiAJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oCmluZGV4IGYyMGU5MWQ3YWMzNWIuLjZmMTA2ZDRiMWE1ODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmgKQEAgLTUwLDYgJiM0Mzs1MCw3IEBACiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi8KICNkZWZpbmUgVERDU19DT05GSUdfRkxBR1MJCTB4MTExMDAwMDMwMDAwMDAxNgogI2RlZmluZSBURENTX1REX0NUTFMJCQkweDExMTAwMDAzMDAwMDAwMTcKJiM0MzsjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkUJCTB4OTAxMDAwMDIwMDAwMDAwNwogI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTCQkweDkxMDAwMDAwMDAwMDAwMTAKICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRUQJMHg5MTAwMDAwMDAwMDAwMDE5CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKaW5kZXggODllOTdkNTc2MWQ4OS4uYTc1ZGJiZTAwNGJkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKQEAgLTgzLDYgJiM0Mzs4Myw4IEBAIGludCB0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIodTggaW5kZXgsIHU4ICpkYXRhKTsKIAogdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpOwogCiYjNDM7dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZCk7CiYjNDM7CiB2b2lkIF9faW5pdCB0ZHhfZHVtcF9hdHRyaWJ1dGVzKHU2NCB0ZF9hdHRyKTsKIHZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMKaW5kZXggZDAzMDNlMzFlODE2MS4uNzIyNGE2NmI2NWQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYwpAQCAtMTYyLDcgJiM0MzsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycCkKICAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXMKICAqIGxhcmdlciBRdW90ZSBzaXplICh+MTAwSykuCiAgKi8KLSNkZWZpbmUgR0VUX1FVT1RFX0JVRl9TSVpFCQlTWl8xMjhLCiYjNDM7I2RlZmluZSBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRQlTWl8xMjhLCiAKICNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVIJCTEKIApAQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycCkKICNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1MJCTAKICNkZWZpbmUgR0VUX1FVT1RFX0lOX0ZMSUdIVAkJMHhmZmZmZmZmZmZmZmZmZmZmCiAKLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU4JCShHRVRfUVVPVEVfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IHRkeF9xdW90ZV9idWYpKQomIzQzOyNkZWZpbmUgVERYX1FVT1RFX0JVRl9MRU4obikJCXN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pCiAKIC8qIHN0cnVjdCB0ZHhfcXVvdGVfYnVmOiBGb3JtYXQgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIuCiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC4KQEAgLTE5MSw4ICYjNDM7MTkxLDkgQEAgc3RydWN0IHRkeF9xdW90ZV9idWYgewogCXU4IGRhdGFbXTsKIH07CiAKLS8qIFF1b3RlIGRhdGEgYnVmZmVyICovCiYjNDM7LyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqLwogc3RhdGljIHZvaWQgKnF1b3RlX2RhdGE7CiYjNDM7c3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjsKIAogLyogTG9jayB0byBzdHJlYW1saW5lIHF1b3RlIHJlcXVlc3RzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spOwpAQCAtMjA5LDkgJiM0MzsyMTAsOCBAQCBzdGF0aWMgbG9uZyB0ZHhfZ2V0X3JlcG9ydDAoc3RydWN0IHRkeF9yZXBvcnRfcmVxIF9fdXNlciAqcmVxKQogCQkJICAgICBVU0VSX1NPQ0tQVFIocmVxLSZndDt0ZHJlcG9ydCkpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewotCXNpemVfdCBsZW4gPSBQQUdFX0FMSUdOKEdFVF9RVU9URV9CVUZfU0laRSk7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gbGVuICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAKIAlpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCkpIHsKQEAgLTIyMiwxMiAmIzQzOzIyMiwzNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpCiAJZnJlZV9wYWdlc19leGFjdChidWYsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYodm9pZCkKJiM0MzsvKgomIzQzOyAqIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCBmb3IgYSBRdW90ZS4gVGhpcyBjb3ZlcnMgYWxsIFF1b3RlCiYjNDM7ICogdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJdTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CiYjNDM7CWlmIChxdW90ZV9zaXplKQomIzQzOwkJLyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqLwomIzQzOwkJbGVuID0gVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSk7CiYjNDM7CWVsc2UKJiM0MzsJCS8qIE9sZGVyIFREWCBtb2R1bGVzIGRvbiYjMzk7dCByZXBvcnQgdGhlIHNpemUsIHVzZSB0aGUgZGVmYXVsdCAqLwomIzQzOwkJbGVuID0gR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkU7CiYjNDM7CiYjNDM7CXJldHVybiBsZW47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYoc2l6ZV90IGxlbikKIHsKLQlzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpOwogCXVuc2lnbmVkIGludCBjb3VudCA9IGxlbiAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXZvaWQgKmFkZHI7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJiMzOTtzCiYjNDM7CSAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLgomIzQzOwkgKi8KIAlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI4NSw3ICYjNDM7MzA3LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAlpZiAoZGVzYy0mZ3Q7aW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CW1lbXNldChxdW90ZV9kYXRhLCAwLCBxdW90ZV9kYXRhX2xlbik7CiAKIAkvKiBVcGRhdGUgUXVvdGUgYnVmZmVyIGhlYWRlciAqLwogCXF1b3RlX2J1Zi0mZ3Q7dmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSOwpAQCAtMjk2LDcgJiM0MzszMTgsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQllcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CWVyciA9IHRkeF9oY2FsbF9nZXRfcXVvdGUocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7R2V0UXVvdGUgaHlwZXJjYWxsIGZhaWxlZCwgc3RhdHVzOiVsbHhcbiYjMzQ7LCBlcnIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMxNSw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAogCW91dF9sZW4gPSBSRUFEX09OQ0UocXVvdGVfYnVmLSZndDtvdXRfbGVuKTsKIAotCWlmIChvdXRfbGVuICZndDsgVERYX1FVT1RFX01BWF9MRU4pCiYjNDM7CWlmIChURFhfUVVPVEVfQlVGX0xFTihvdXRfbGVuKSAmZ3Q7IHF1b3RlX2RhdGFfbGVuKQogCQlyZXR1cm4gLUVGQklHOwogCiAJYnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLSZndDtkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTQxNyw3ICYjNDM7NDM5LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpCiAJaWYgKHJldCkKIAkJZ290byBkZWluaXRfbXI7CiAKLQlxdW90ZV9kYXRhID0gYWxsb2NfcXVvdGVfYnVmKCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBidWZmZXIgc2l6ZSByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVEQsCiYjNDM7CSAqIGV2ZW4gYWZ0ZXIgYSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlLgomIzQzOwkgKi8KJiM0MzsJcXVvdGVfZGF0YV9sZW4gPSBQQUdFX0FMSUdOKGdldF9xdW90ZV9idWZfc2l6ZSgpKTsKJiM0MzsJcXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7CiAJaWYgKCFxdW90ZV9kYXRhKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcbiYjMzQ7KTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQzMSw3ICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZCkKIAlyZXR1cm4gMDsKIAogZnJlZV9xdW90ZToKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogZnJlZV9taXNjOgogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiBkZWluaXRfbXI6CkBAIC00NDQsNyAmIzQzOzQ3MSw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTsKIHN0YXRpYyB2b2lkIF9fZXhpdCB0ZHhfZ3Vlc3RfZXhpdCh2b2lkKQogewogCXRzbV9yZXBvcnRfdW5yZWdpc3RlcigmYW1wO3RkeF90c21fb3BzKTsKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiAJdGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcXVvdGUgc2l6ZS4gSSBzZWUgY2hhbmdlcyBpbiBgdGR4LmNgLCBhZGRpbmcgYSBmdW5jdGlvbiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCB0aGF0IGNhbGxzIGB0ZGdfdm1fcmQoKWAgd2l0aCBhIG5ldyBjb25zdGFudCBgVERDU19RVU9URV9NQVhfU0laRWAuIFRoZXJlIGFyZSBhbHNvIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgdXBkYXRlcyBkZWZpbmluZyB0aGUgY29uc3RhbnQgYW5kIGRlY2xhcmluZyB0aGUgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCB0aGUgYHRkeC1ndWVzdC5jYCBkcml2ZXIgaXMgdXNpbmcgdGhpcyBuZXcgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgc2l6ZSBhIHF1b3RlIGJ1ZmZlciBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIGNvbnRhaW5zIHNvbWUgc2l6ZSBjaGVja3MgdGhhdCB1c2UgdGhpcyBpbmZvcm1hdGlvbi4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgKmFjdHVhbGx5KiBydW4gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBJIGhhdmUgdG8gYmUgdmVyeSBjYXJlZnVsIGhlcmUuIE15IHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUsIGl0JiMzOTtzIGEgbm8tZ28sIGV2ZW4gaWYgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgpMZXQgbWUgdGhpbmvigKYgV2hhdCBleGFjdGx5IGlzIEludGVsIFREWD8gSSByZWNhbGwgaXQmIzM5O3MgcmVsYXRlZCB0byBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgd2hpY2ggaXMgYSBjb25maWRlbnRpYWwgY29tcHV0aW5nIHRlY2hub2xvZ3kuIE9rYXksIGJ1dCBjYW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZXZlbiAqcnVuKiBURFggZ3Vlc3RzPyBJcyB0aGlzIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBwYXRoLCBgdGR4X2d1ZXN0X2luaXRgLCBldmVyIGFjdHVhbGx5IGhpdCBpbiB0aG9zZSBlbnZpcm9ubWVudHM/IE9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyB0aGUgaW1wb3J0YW5jZSBvZiBvbmx5IGZ1enppbmcgY29kZSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGNvdWxkIGJlIGEgZGVhbGJyZWFrZXIuCgpJIG5lZWQgdG8gYmUgdmVyeSBwcmVjaXNlIGhlcmUuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG9ubHkgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgY2hhbmdlcyBmYWxsIGludG8gY2VydGFpbiBjYXRlZ29yaWVzLiBUaGUga2V5IG9uZSBoZXJlIGlzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsg4oCTIERvZXMgVERYIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5PyBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHRkeC1ndWVzdGAgZHJpdmVyIGluaXRpYWxpemVzIHByb3Blcmx5IGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gaG93IGB0ZHhfZ3Vlc3RfaW5pdGAgYWN0dWFsbHkgd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZHJpdmVyIHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGFuZCB3aGVuIHRoYXQgY29kZSBpcyBhY3R1YWxseSBoaXQuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGRlY2lzaW9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5NTpcdH1cbiAzOTY6XHRcbiAzOTc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0ZHhfZ3Vlc3RfZm9wcyA9IHtcbiAzOTg6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIDM5OTpcdFx0LnVubG9ja2VkX2lvY3RsID0gdGR4X2d1ZXN0X2lvY3RsLFxuIDQwMDpcdH07XG4gNDAxOlx0XG4gNDAyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRkeF9hdHRyX2dyb3Vwc1tdID0ge1xuIDQwMzpcdFx0TlVMTCwgLyogbWVhc3VyZW1lbnRzICovXG4gNDA0Olx0XHROVUxMXG4gNDA1Olx0fTtcbiA0MDY6XHRcbiA0MDc6XHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdGR4X21pc2NfZGV2ID0ge1xuIDQwODpcdFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbiA0MDk6XHRcdC5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUixcbiA0MTA6XHRcdC5mb3BzID0gXHUwMDI2dGR4X2d1ZXN0X2ZvcHMsXG4gNDExOlx0XHQuZ3JvdXBzID0gdGR4X2F0dHJfZ3JvdXBzLFxuIDQxMjpcdH07XG4gNDEzOlx0XG4gNDE0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcbiA0MTU6XHRcdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXG4gNDE2Olx0XHR7fVxuIDQxNzpcdH07XG4gNDE4Olx0TU9EVUxFX0RFVklDRV9UQUJMRSh4ODZjcHUsIHRkeF9ndWVzdF9pZHMpO1xuIDQxOTpcdFxuIDQyMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHNtX3JlcG9ydF9vcHMgdGR4X3RzbV9vcHMgPSB7XG4gNDIxOlx0XHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuIDQyMjpcdFx0LnJlcG9ydF9uZXcgPSB0ZHhfcmVwb3J0X25ldyxcbiA0MjM6XHRcdC5yZXBvcnRfYXR0cl92aXNpYmxlID0gdGR4X3JlcG9ydF9hdHRyX3Zpc2libGUsXG4gNDI0Olx0XHQucmVwb3J0X2Jpbl9hdHRyX3Zpc2libGUgPSB0ZHhfcmVwb3J0X2Jpbl9hdHRyX3Zpc2libGUsXG4gNDI1Olx0fTtcbiA0MjY6XHRcbiA0Mjc6XHRzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxuIDQyODpcdHtcbiA0Mjk6XHRcdGludCByZXQ7XG4gNDMwOlx0XG4gNDMxOlx0XHRpZiAoIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcykpXG4gNDMyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQzMzpcdFxuIDQzNDpcdFx0dGR4X2F0dHJfZ3JvdXBzWzBdID0gdGR4X21yX2luaXQoKTtcbiA0MzU6XHRcdGlmIChJU19FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKSlcbiA0MzY6XHRcdFx0cmV0dXJuIFBUUl9FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKTtcbiA0Mzc6XHRcbiA0Mzg6XHRcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiA0Mzk6XHRcdGlmIChyZXQpXG4gNDQwOlx0XHRcdGdvdG8gZGVpbml0X21yO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0LypcbiA0NDM6XHRcdCAqIFRoZSBidWZmZXIgc2l6ZSByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVEQsXG4gNDQ0Olx0XHQgKiBldmVuIGFmdGVyIGEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIHByZXNlbnRlZCBhcyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgVERYIEd1ZXN0IEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdGR4X2d1ZXN0X2luaXQoKWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBjaGVjazogYGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSkgcmV0dXJuIC1FTk9ERVY7YC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyB2ZXJpZnlpbmcgc29tZXRoaW5nIGFib3V0IHRoZSBDUFUgYmVmb3JlIHByb2NlZWRpbmcuIEl0JiMzOTtzIHVzaW5nIGB4ODZfbWF0Y2hfY3B1KClgIHdpdGggYHRkeF9ndWVzdF9pZHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGB0ZHhfZ3Vlc3RfaWRzYCBhcmUsIHNwZWNpZmljYWxseSBob3cgdGhleSBhcmUgYmVpbmcgdXNlZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQgaXMgcmV0dXJuaW5nIGEgZGV2aWNlIG5vdCBmb3VuZCBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBndWVzdCBoYXMgbm90IHJlcG9ydGVkIGl0c2VsZiBhcyBjYXBhYmxlLgoKSXQgbG9va3MgbGlrZSB0aGUgYHg4Nl9tYXRjaF9jcHUoKWAgZnVuY3Rpb24gaXMgY2FsbGluZyBgWDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKWAuICBBaCwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGNoZWNrIGZvciB0aGUgVERYIGd1ZXN0IGZlYXR1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXM6IHdoZXJlIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGFjdHVhbGx5ICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBmZWF0dXJlIGZsYWcgaXMgc2V0LiBJdCB3aWxsIGxpa2VseSBiZSBpbiBzb21lIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXIgZmlsZSBvciBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZ28gaHVudCB0aGF0IGRvd24gdG8gdW5kZXJzdGFuZCB3aGF0IGNyaXRlcmlhIG11c3QgYmUgbWV0IGZvciB0aGlzIGluaXRpYWxpemF0aW9uIHRvIHN1Y2NlZWQgYW5kIHdoeSB0aGlzIC1FTk9ERVYgZXJyb3IgbWlnaHQgYmUgaGFwcGVuaW5nLiBJcyB0aGlzIGEgQ1BVSUQgYml0PyBBbiBNU1IgdmFsdWU/IEdvdHRhIGZpbmQgdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfRkVBVFVSRV9URFhfR1VFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEzNj12b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDUtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTQ2Olx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfR1VFU1QpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE0Ny1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzOS0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXHRcdCggOCozMiYjNDM7MjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjI0MDojZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFx0XHQoIDgqMzImIzQzOzIyKSAvKiBcJiMzNDt0ZHhfZ3Vlc3RcJiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjQxLVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9MzQ9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwwKHVuc2lnbmVkIGludCBucilcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDozODpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM5LVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIDAsIDAsIDAsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9NDg9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwxKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUxLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo1MjpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUzLVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCAwLCAwLCAwKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTYyPXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMih1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02Ni1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6Njc6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02OC1cdFx0cmV0dXJuIHRkeF9rdm1faHlwZXJjYWxsKG5yLCBwMSwgcDIsIDAsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9Nzc9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwzKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgxLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo4MjpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgzLVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9OTI9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGw0KHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo5ODpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk5LVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIHA0KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oPTg9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfYWNjZXB0X21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5LmgtMTAtXHQvKiBQbGF0Zm9ybS1zcGVjaWZpYyBtZW1vcnktYWNjZXB0YW5jZSBjYWxsIGdvZXMgaGVyZSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaDoxMTpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpIHtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5LmgtMTItXHRcdGlmICghdGR4X2FjY2VwdF9tZW1vcnkoc3RhcnQsIGVuZCkpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9OTk9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTAyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTAzOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEwNC1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTEyMz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwzKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMjctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMjg6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTI5LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTQ4PXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDQodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE1Mi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjE1MzpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNTQtXHRcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNzM9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTc4LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTc5Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE4MC1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIwMT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw2KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMDYtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMDc6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjA4LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgMCwgMCxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0yMjg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNyh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjM0LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MjM1Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIzNi1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9NDQwPXZvaWQgZ3Vlc3RfZm9yY2VfbXRycl9zdGF0ZShzdHJ1Y3QgbXRycl92YXJfcmFuZ2UgKnZhciwgdW5zaWduZWQgaW50IG51bV92YXIsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy00NjItXHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWEVOUFYpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYzo0NjM6XHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtNDY0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYz05Mzg9dm9pZCBfX2luaXQgc2VsZWN0X2lkbGVfcm91dGluZSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMtOTUyLVx0XHRzdGF0aWNfY2FsbF91cGRhdGUoeDg2X2lkbGUsIG13YWl0X2lkbGUpO1xuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYzo5NTM6XHR9IGVsc2UgaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkge1xuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTQtXHRcdHByX2luZm8oXCYjMzQ7dXNpbmcgVERYIGF3YXJlIGlkbGUgcm91dGluZVxcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TPTEyOT1TWU1fQ09ERV9TVEFSVF9MT0NBTF9OT0FMSUdOKGlkZW50aXR5X21hcHBlZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMtMjA0LVx0YW5kbFx0JChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfTEE1NyksICVyMTNkXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlM6MjA1Olx0QUxURVJOQVRJVkUgXCYjMzQ7XCYjMzQ7LCBfX3N0cmluZ2lmeShvcmwgJFg4Nl9DUjRfTUNFLCAlcjEzZCksIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TLTIwNi1cdG1vdnFcdCVyMTMsICVjcjRcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB0ZHhfZ3Vlc3RfaWRzW10gPSB7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDE1Olx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTYtXHR7fVxuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMiYjNDM7MjIpIC8qIFwmIzM0O3RkeF9ndWVzdFwmIzM0OyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBURFggRWFybHkgSW5pdGlhbGl6YXRpb24gYW5kIEd1ZXN0IERldGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IG9mIGB0ZHhfZWFybHlfaW5pdGAgYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIFREWCBndWVzdCBlbnZpcm9ubWVudCBpcyBpbml0aWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9tZW50IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBpdCYjMzk7cyBvcGVyYXRpbmcgd2l0aGluIGEgVERYIGNvbnRleHQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIFREWCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgZWFybHktc3RhZ2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8ga25vdyAqcHJlY2lzZWx5KiB3aGF0IHRoZSBkZXRlY3Rpb24gbWVjaGFuaXNtcyBhcmUsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3N1bXB0aW9ucyB0aGV5IG1ha2UgYWJvdXQgdGhlIGhhcmR3YXJlIG9yIGZpcm13YXJlIGVudmlyb25tZW50LiBBcmUgd2UgcmVseWluZyBzb2xlbHkgb24gQ1BVSUQgZmVhdHVyZXMsIG1lbW9yeSBtYXAgaW5zcGVjdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZD8gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbG93LWxldmVsIGRldGFpbHMuIFRoaXMgYW5hbHlzaXMgd2lsbCBndWlkZSBteSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIFREWCBndWVzdCBicmluZy11cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZWFybHlfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDAyPXN0YXRpYyBpbnQgdGR4X2VuY19zdGF0dXNfY2hhbmdlX3ByZXBhcmUodW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMDYtXHQgKiBPbmx5IGhhbmRsZSBzaGFyZWQtXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uIGhlcmUuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDA3Olx0ICogU2VlIHRoZSBjb21tZW50IGluIHRkeF9lYXJseV9pbml0KCkuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDA4LVx0ICovXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTAxNT1zdGF0aWMgaW50IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMTktXHQgKiBPbmx5IGhhbmRsZSBwcml2YXRlLVx1MDAzZXNoYXJlZCBjb252ZXJzaW9uIGhlcmUuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDIwOlx0ICogU2VlIHRoZSBjb21tZW50IGluIHRkeF9lYXJseV9pbml0KCkuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDIxLVx0ICovXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEyMj1zdGF0aWMgX19pbml0IHZvaWQgdGR4X2Fubm91bmNlKHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTEzNS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExMzY6dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzcte1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTU3PXN0cnVjdCB2ZV9pbmZvIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC02OS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjcwOnZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNzEtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9ODk9dm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtOTItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Vhcmx5X2luaXQodm9pZCkgeyB9O1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtOTQtc3RhdGljIGlubGluZSB2b2lkIHRkeF9oYWx0KHZvaWQpIHsgfTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmM9MjIyPWFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgX19pbml0IF9fbm9yZXR1cm4geDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcmVhbF9tb2RlX2RhdGEpXG4tLVxuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jLTI3OC1cdC8qIE5lZWRlZCBiZWZvcmUgY2NfcGxhdGZvcm1faGFzKCkgY2FuIGJlIHVzZWQgZm9yIFREWCAqL1xuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jOjI3OTpcdHRkeF9lYXJseV9pbml0KCk7XG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMtMjgwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFREWCBFYXJseSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYHRkeF9lYXJseV9pbml0YCBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSB3b3JrcyBvbiB4ODYsIGVzcGVjaWFsbHkgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIGFuZCBib290LWxldmVsIHBlcnNwZWN0aXZlLiBTbywgSSBrbm93IHRoaXMgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBURFggZW52aXJvbm1lbnQuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG93LWxldmVsIHN0dWZmIOKAkyB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3IgVERYIGNhcGFiaWxpdGllcywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgYW5kIHBlcmhhcHMgZXZlbiBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgVERYIG1vZHVsZSBpdHNlbGYuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2lsaWNvbiwgdGhlIGJvb3Rsb2FkZXIsIGFuZCBvdGhlciBlYXJseS1zdGFnZSBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0uIEkgYW50aWNpcGF0ZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSYjMzk7cyBURFgtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGFuZCByZWdpc3RlcnMuIEl0JiMzOTtzIGdvaW5nIHRvIGJlIGtleSB0byB2ZXJpZnkgaG93IHRoZXNlIGVhcmx5IGludGVyYWN0aW9ucyBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGV4cGVjdGF0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBhbmQgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW1wbGVtZW50YXRpb24gYWxpZ25zIHdpdGggY3VycmVudCBzZWN1cml0eSBiZXN0IHByYWN0aWNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZ1bmN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTMwOlx0XHR0ZHhfZHVtcF9hdHRyaWJ1dGVzKGFyZ3MucmR4KTtcbjExMzE6XHRcbjExMzI6XHRcdHRkZ192bV9yZChURENTX1REX0NUTFMsIFx1MDAyNmNvbnRyb2xzKTtcbjExMzM6XHRcdHRkeF9kdW1wX3RkX2N0bHMoY29udHJvbHMpO1xuMTEzNDpcdH1cbjExMzU6XHRcbjExMzY6XHR2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuMTEzNzpcdHtcbjExMzg6XHRcdHU2NCBjY19tYXNrO1xuMTEzOTpcdFx0dTMyIGVheCwgc2lnWzNdO1xuMTE0MDpcdFxuMTE0MTpcdFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFx1MDAyNmVheCwgXHUwMDI2c2lnWzBdLCBcdTAwMjZzaWdbMl0sICBcdTAwMjZzaWdbMV0pO1xuMTE0MjpcdFxuMTE0MzpcdFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxuMTE0NDpcdFx0XHRyZXR1cm47XG4xMTQ1Olx0XG4xMTQ2Olx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHQvKiBUU0MgaXMgdGhlIG9ubHkgcmVsaWFibGUgY2xvY2sgaW4gVERYIGd1ZXN0ICovXG4xMTQ5Olx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfSU5URUw7XG4xMTUyOlx0XG4xMTUzOlx0XHQvKiBDb25maWd1cmUgdGhlIFREICovXG4xMTU0Olx0XHR0ZHhfc2V0dXAoXHUwMDI2Y2NfbWFzayk7XG4xMTU1Olx0XG4xMTU2Olx0XHRjY19zZXRfbWFzayhjY19tYXNrKTtcbjExNTc6XHRcbjExNTg6XHRcdC8qXG4xMTU5Olx0XHQgKiBBbGwgYml0cyBhYm92ZSBHUEEgd2lkdGggYXJlIHJlc2VydmVkIGFuZCBrZXJuZWwgdHJlYXRzIHNoYXJlZCBiaXRcbjExNjA6XHRcdCAqIGFzIGZsYWcsIG5vdCBhcyBwYXJ0IG9mIHBoeXNpY2FsIGFkZHJlc3MuXG4xMTYxOlx0XHQgKlxuMTE2MjpcdFx0ICogQWRqdXN0IHBoeXNpY2FsIG1hc2sgdG8gb25seSBjb3ZlciB2YWxpZCBHUEEgYml0cy5cbjExNjM6XHRcdCAqL1xuMTE2NDpcdFx0cGh5c2ljYWxfbWFzayBcdTAwMjY9IGNjX21hc2sgLSAxO1xuMTE2NTpcdFxuMTE2NjpcdFx0LypcbjExNjc6XHRcdCAqIFRoZSBrZXJuZWwgbWFwcGluZyBzaG91bGQgbWF0Y2ggdGhlIFREWCBtZXRhZGF0YSBmb3IgdGhlIHBhZ2UuXG4xMTY4Olx0XHQgKiBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKCkgY2FuIHRvdWNoIG1lbW9yeSAqYWRqYWNlbnQqIHRvIHRoYXQgd2hpY2ggaXNcbjExNjk6XHRcdCAqIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGNhbiBjYXRjaCBldmVuIF9tb21lbnRhcnlfIG1pc21hdGNoZXMuICBCYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFREWCBHdWVzdCBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIExldCBtZSBkaWcgaW50byB0aGlzIGB0ZHhfZWFybHlfaW5pdGAgY29kZSBzbmlwcGV0LiBJIHNlZSBhIGBjcHVpZF9jb3VudGAgY2FsbCB3aXRoIGBURFhfQ1BVSURfTEVBRl9JRGAgYW5kIGEgY29tcGFyaXNvbiBhZ2FpbnN0IGBURFhfSURFTlRgLiBSaWdodCwgdGhhdCYjMzk7cyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgaGFyZHdhcmUgY29uZmlkZW50aWFsIGNvbXB1dGluZy4gQnV0LCBjYW4gUUVNVSBldmVuIGVtdWxhdGUgVERYPyBBbmQgbW9yZSBzcGVjaWZpY2FsbHksIGRvZXMgc3RhbmRhcmQgUUVNVSBvciBzb21ldGhpbmcgbGlrZSBhIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpbnN0YW5jZSAqcnVuKiBhIFREWCBndWVzdD8KCldhaXQsIFREWCBkZW1hbmRzIFREWCBoYXJkd2FyZSDigJMgU2FwcGhpcmUgUmFwaWRzIG9yIGxhdGVyIFhlb24sIHJpZ2h0PyBQbHVzIGhvc3Qgc3VwcG9ydCBsaWtlIE1DSEVDSywgU0VBTSwgYSBURFggbW9kdWxlIGluIFNFQU0gZmlybXdhcmUsIGFuZCBLVk0gVERYIHBhdGNoZXMuIFNvLCBpcyBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUgcmVhbGx5IGNvbXBhdGlibGUgd2l0aCBydW5uaW5nIFREWD8KCkFoLCBva2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBwcm9qZWN0JiMzOTtzIGluc3RydWN0aW9ucy4gU2VjdGlvbnMgMSBhbmQgMiBhcmUga2V5LiAmIzM0O1JlYWNoYWJsZSBjb2RlJiMzNDsgaXMgdGhlIGdhdGUuIEZ1enppbmcgaXMgKm9ubHkqIHVzZWZ1bCBmb3IgY29kZSB0aGF0ICpleGVjdXRlcyogaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0Ugd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzLiBBbmQgdGhlbiBzZWN0aW9uIDIgdGFsa3MgYWJvdXQgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyDigJMgdGhpbmdzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIGEgVERYIGd1ZXN0IGVmZmVjdGl2ZWx5ICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgaW4gdGhpcyBjb250ZXh0PyBEb2VzIGl0IGZhbGwgdW5kZXIgdGhhdCBjYXRlZ29yeSwgZ2l2ZW4gdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cz8KCkkgbmVlZCB0byBmaWd1cmUgdGhpcyBvdXQgYmVmb3JlIEkgcHJvY2VlZC4gTGV0JiMzOTtzIHNlZSBob3cgc3l6a2FsbGVyIGhhbmRsZXMgY29uZmlkZW50aWFsIGNvbXB1dGluZyBlbnZpcm9ubWVudHMgZ2VuZXJhbGx5LCBhbmQgaWYgaXQgKmFjdHVhbGx5KiBmdXp6ZXMgVERYLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBzeXprYWxsZXIgZXZlbiBjb25zaWRlcnMgVERYLiBMZXQgbWUgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgdHJlZSwgR2l0IGhpc3RvcnksIG9yIGFueSBkb2N1bWVudGF0aW9uIG9uIHRoZSBgdGR4LWd1ZXN0YCBjb25jZXB0LiBQZXJoYXBzIEkgY2FuIHNlYXJjaCB0aGUgc3l6a2FsbGVyIGNvZGViYXNlIGl0c2VsZiBmb3IgbWVudGlvbnMgb2YgJiMzNDtzeXprYWxsZXImIzM0OyBvciAmIzM0O3ZpcnQvY29jbyYjMzQ7IChjb25maWRlbnRpYWwgY29tcHV0aW5nKS4KCkkmIzM5O2xsIHRyeSBhIGZldyBzZWFyY2ggdGVybXMgYW5kIGxvb2sgYXQgb3RoZXIgY29uZmlkZW50aWFsIGNvbXB1dGluZyBkcml2ZXJzLCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYFREWF9HVUVTVGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBMaW51eCBrZXJuZWwgaGFuZGxlcyBpdCBhbmQgd2hlcmUgaXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTg5Mj1jb25maWcgQkhZVkVfR1VFU1Rcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTkwMC1cbmFyY2gveDg2L0tjb25maWc6OTAxOmNvbmZpZyBJTlRFTF9URFhfR1VFU1RcbmFyY2gveDg2L0tjb25maWctOTAyLVx0Ym9vbCBcJiMzNDtJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSAtIEd1ZXN0IFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gQ29uZmxpY3RzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IG9yIGEgcG90ZW50aWFsIGNvbmZsaWN0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGFyY2gveDg2L0tjb25maWdgIGFyb3VuZCBsaW5lIDkwMS4gSSBrbm93IHRoYXQgYXJlYSBkZWFscyB3aXRoIGEgY29yZSB4ODYgYXJjaGl0ZWN0dXJlIGZlYXR1cmVzLCBzbyB0aGF0JiMzOTtzIGEgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlIGFuZCBpZiBhbnl0aGluZyByZWxldmFudCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gZnVuY3Rpb25hbGl0eS4KClRoZW4sIEkmIzM5O2xsIHBpdm90IGFuZCBjaGVjayBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBUaGlzIGFyZWEgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFREWCBndWVzdCBkcml2ZXIuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGJldHRpbmcgdGhlcmUgY291bGQgYmUgc29tZSBpbnRlcmFjdGlvbiBvciBwb3RlbnRpYWwgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBhcmNoaXRlY3R1cmUtbGV2ZWwgY29uZmlndXJhdGlvbnMgYW5kIHRoZSB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLiBIb3BlZnVsbHksIHRoaXMgY3Jvc3MtcmVmZXJlbmNlIHdpbGwgcHJvdmlkZSBzb21lIGNsYXJpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3bywgZm9jdXNpbmcgb24gYW55IHN5bWJvbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgYXQgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdFxuIDkwMTpcdGNvbmZpZyBJTlRFTF9URFhfR1VFU1RcbiA5MDI6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgLSBHdWVzdCBTdXBwb3J0XCYjMzQ7XG4gOTAzOlx0XHRkZXBlbmRzIG9uIFg4Nl82NCBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9JTlRFTFxuIDkwNDpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4gOTA1Olx0XHRkZXBlbmRzIG9uIEVGSV9TVFVCXG4gOTA2Olx0XHRkZXBlbmRzIG9uIFBBUkFWSVJUXG4gOTA3Olx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiA5MDg6XHRcdHNlbGVjdCBYODZfTUVNX0VOQ1JZUFRcbiA5MDk6XHRcdHNlbGVjdCBYODZfTUNFXG4gOTEwOlx0XHRzZWxlY3QgVU5BQ0NFUFRFRF9NRU1PUllcbiA5MTE6XHRcdGhlbHBcbiA5MTI6XHRcdCAgU3VwcG9ydCBydW5uaW5nIGFzIGEgZ3Vlc3QgdW5kZXIgSW50ZWwgVERYLiAgV2l0aG91dCB0aGlzIHN1cHBvcnQsXG4gOTEzOlx0XHQgIHRoZSBndWVzdCBrZXJuZWwgY2FuIG5vdCBib290IG9yIHJ1biB1bmRlciBURFguXG4gOTE0Olx0XHQgIFREWCBpbmNsdWRlcyBtZW1vcnkgZW5jcnlwdGlvbiBhbmQgaW50ZWdyaXR5IGNhcGFiaWxpdGllc1xuIDkxNTpcdFx0ICB3aGljaCBwcm90ZWN0IHRoZSBjb25maWRlbnRpYWxpdHkgYW5kIGludGVncml0eSBvZiBndWVzdFxuIDkxNjpcdFx0ICBtZW1vcnkgY29udGVudHMgYW5kIENQVSBzdGF0ZS4gVERYIGd1ZXN0cyBhcmUgcHJvdGVjdGVkIGZyb21cbiA5MTc6XHRcdCAgc29tZSBhdHRhY2tzIGZyb20gdGhlIFZNTS5cbiA5MTg6XHRcbiA5MTk6XHRlbmRpZiAjIEhZUEVSVklTT1JfR1VFU1RcbiA5MjA6XHRcbiA5MjE6XHRzb3VyY2UgXCYjMzQ7YXJjaC94ODYvS2NvbmZpZy5jcHVcJiMzNDtcbiA5MjI6XHRcbiA5MjM6XHRjb25maWcgSFBFVF9USU1FUlxuIDkyNDpcdFx0ZGVmX2Jvb2wgWDg2XzY0XG4gOTI1Olx0XHRwcm9tcHQgXCYjMzQ7SFBFVCBUaW1lciBTdXBwb3J0XCYjMzQ7IGlmIFg4Nl8zMlxuIDkyNjpcdFx0aGVscFxuIDkyNzpcdFx0ICBVc2UgdGhlIElBLVBDIEhQRVQgKEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyKSB0byBtYW5hZ2VcbiA5Mjg6XHRcdCAgdGltZSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBQSVQgYW5kIFJUQywgaWYgYSBIUEVUIGlzXG4gOTI5Olx0XHQgIHByZXNlbnQuXG4gOTMwOlx0XHQgIEhQRVQgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiB0aW1lciByZXBsYWNpbmcgbGVnYWN5IDgyNTRzLlxuIDkzMTpcdFx0ICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QXG4gOTMyOlx0XHQgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLFxuIDkzMzpcdFx0ICBhcyBpdCBpcyBvZmYtY2hpcC4gIFRoZSBpbnRlcmZhY2UgdXNlZCBpcyBkb2N1bWVudGVkXG4gOTM0Olx0XHQgIGluIHRoZSBIUEVUIHNwZWMsIHJldmlzaW9uIDEuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzg0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZToKCioqQ2hlY2tpbmcgdGhlIFREWCBHdWVzdCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBJbnRlbCYjMzk7cyBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBndWVzdCBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGtlcm5lbCB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzdHJ1Y3R1cmUsIGxpa2VseSB3aXRoIGEgbWFpbiBgQ09ORklHX1REWF9HVUVTVGAgb3B0aW9uIGFzIHRoZSB0b3AtbGV2ZWwgY29udHJvbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW50IG9wdGlvbnMsIHRvbyDigJMgbWF5YmUgdGhpbmdzIHRoYXQgZW5hYmxlIHNwZWNpZmljIGZlYXR1cmVzIGxpa2UgbWVtb3J5IGVuY3J5cHRpb24sIGF0dGVzdGF0aW9uIHN1cHBvcnQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgdmlydHVhbGl6YXRpb24gZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyBsaWtlIEtWTS4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBvcHRpb25zIGZvciBkZWJ1ZyBvciBsb2dnaW5nLCBhbmQgd2hhdCBsZXZlbCBvZiBncmFudWxhcml0eSB0aGV5IG9mZmVyLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgaGVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gY29uZmlndXJlIGEgVERYIGd1ZXN0IHByb3Blcmx5IGFuZCB3aGF0IGxldmVycyBJIGNhbiBwdWxsIHRvIG9wdGltaXplIGl0cyBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBwb3N0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtURFhfR1VFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfU0VWX0dVRVNUKVx0XHQmIzQzOz0gc2V2LWd1ZXN0L1xuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfSU5URUxfVERYX0dVRVNUKVx0JiM0Mzs9IHRkeC1ndWVzdC9cbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVx0JiM0Mzs9IHRkeC1ob3N0L1xuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnOjE6Y29uZmlnIFREWF9HVUVTVF9EUklWRVJcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtURFggR3Vlc3QgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZzozOlx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfR1VFU1RcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTQtXHRzZWxlY3QgVFNNX1JFUE9SVFNcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfVERYX0dVRVNUX0RSSVZFUikgJiM0Mzs9IHRkeC1ndWVzdC5vXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpcdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE2LVx0e31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIFREWCBHdWVzdCBEcml2ZXIgS2NvbmZpZyBFbnRyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgVERYIEd1ZXN0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgYFREWF9HVUVTVF9EUklWRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZS4gSXQmIzM5O3MgYSB0cmlzdGF0ZSwgc28gaXQgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBidWlsdC1pbiwgb3IgZGlzYWJsZWQuIFRoZSBkZXBlbmRlbmN5IG9uIGBJTlRFTF9URFhfR1VFU1RgIGlzIGV4cGVjdGVkLCBvZiBjb3Vyc2UuIFdlIG9ubHkgd2FudCB0aGlzIGRyaXZlciBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEludGVsIFREWCBndWVzdCBlbnZpcm9ubWVudC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSBpcyB0aGUgYHNlbGVjdCBUU01fUkVQT1JUU2AuIFRoYXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gd2hhdCB0aGF0IGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHB1bGxlZCBpbi4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyByZWxhdGVkIHRvIFRydXN0ZWQgU3lzdGVtIE1lbW9yeSByZXBvcnRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciBpdC4gU28gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBhdCBgZHJpdmVycy92aXJ0L2NvY28vdHNtLmNgLCBvciBtYXliZSBzb21lIHJlbGF0ZWQgZmlsZSwgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGF0IGBUU01fUkVQT1JUU2Agc3ltYm9sLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RTTV9SRVBPUlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydC9jb2NvL2FybS1jY2EtZ3Vlc3QvS2NvbmZpZz0xPWNvbmZpZyBBUk1fQ0NBX0dVRVNUXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vYXJtLWNjYS1ndWVzdC9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIEFSTTY0XG5kcml2ZXJzL3ZpcnQvY29jby9hcm0tY2NhLWd1ZXN0L0tjb25maWc6NDpcdHNlbGVjdCBUU01fUkVQT1JUU1xuZHJpdmVycy92aXJ0L2NvY28vYXJtLWNjYS1ndWVzdC9LY29uZmlnLTUtXHRoZWxwXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvS2NvbmZpZz01PWNvbmZpZyBUU01fR1VFU1Rcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnLTctXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnOjg6Y29uZmlnIFRTTV9SRVBPUlRTXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnLTktXHRzZWxlY3QgVFNNX0dVRVNUXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19UU01fUkVQT1JUUylcdCYjNDM7PSB0c21fcmVwb3J0Lm9cbmRyaXZlcnMvdmlydC9jb2NvL2d1ZXN0L01ha2VmaWxlLTMtdHNtX3JlcG9ydC15IDo9IHJlcG9ydC5vXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWc9MT1jb25maWcgU0VWX0dVRVNUXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWctNC1cdGRlcGVuZHMgb24gQU1EX01FTV9FTkNSWVBUXG5kcml2ZXJzL3ZpcnQvY29jby9zZXYtZ3Vlc3QvS2NvbmZpZzo1Olx0c2VsZWN0IFRTTV9SRVBPUlRTXG5kcml2ZXJzL3ZpcnQvY29jby9zZXYtZ3Vlc3QvS2NvbmZpZy02LVx0aGVscFxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnPTE9Y29uZmlnIFREWF9HVUVTVF9EUklWRVJcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfR1VFU1RcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnOjQ6XHRzZWxlY3QgVFNNX1JFUE9SVFNcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTUtXHRzZWxlY3QgVFNNX01FQVNVUkVNRU5UU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgdGR4LWd1ZXN0LmNgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBpbiBgdGR4LWd1ZXN0LmNgLCB0aGlzIGRyaXZlciBpcyByZWdpc3RlcmluZyBhIG1pc2MgZGV2aWNlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHVzaW5nIGB0ZHhfZ3Vlc3RfZm9wc2AgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIGEgYG1pc2NkZXZpY2VgIG5hbWVkIGBLQlVJTERfTU9ETkFNRWAgd2l0aCBkeW5hbWljIG1pbm9yIG51bWJlciDigJMgd2hpY2gsIEkgY2FuIGd1ZXNzIGlzIHByb2JhYmx5IGp1c3QgYHRkeC1ndWVzdGAsIGFuZCB0aGUgZGV2aWNlIG5vZGUgd291bGQgYmUgYC9kZXYvdGR4LWd1ZXN0YCBvciBgL2Rldi90ZHhfZ3Vlc3RgIGJhc2VkIG9uIHRoZSBuYW1lLiBJdCBhbHNvIHJlZ2lzdGVycyBpbiBzeXNmcyB1bmRlciBgL3N5cy9rZXJuZWwvY29uZmlnL3RzbS9yZXBvcnRgIGFzIGEgVFNNIHJlcG9ydHMgY29uZmlnZnMuIFRoYXQmIzM5O3MgdGhlIGRldmljZSByZWdpc3RyYXRpb24gc2lkZSBvZiB0aGluZ3MuCgpCdXQgSSYjMzk7bSB3b25kZXJpbmcsIHdoYXQgdHJpZ2dlcnMgdGhpcyBkZXZpY2UgdG8gYWN0dWFsbHkgbG9hZD8gTGV0IG1lIHNlZS4gTG9va2luZyBhdCBgdGR4X2d1ZXN0X2luaXRgLCB0aGVyZSYjMzk7cyBhIGNoZWNrOiBgIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcylgLiBJZiB0aGF0IGNoZWNrIGZhaWxzLCB3ZSBiYWlsIHdpdGggYC1FTk9ERVZgLiBSaWdodCwgc28gdGhpcyBzdWdnZXN0cyB0aGUgc3lzdGVtIG5lZWRzIHRvIG1hdGNoIGEgY2VydGFpbiBDUFUgY2FwYWJpbGl0eS4gV2hhdCBpcyBgdGR4X2d1ZXN0X2lkc2A/IE9oLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGxpbmtlZCB0byBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4KClNvLCB3aGVuIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIHNldD8gQWhhLCBpdCYjMzk7cyBpbiBgdGR4X2Vhcmx5X2luaXRgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgYGNwdWlkX2NvdW50YCBjYWxsIHdpdGggYFREWF9DUFVJRF9MRUFGX0lEYCwgYW5kIGEgc2lnbmF0dXJlIGNoZWNrIHdpdGggYFREWF9JREVOVGAuIElmIHRoZSBzaWduYXR1cmVzIG1hdGNoLCBgc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfR1VFU1QpYCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgdGhhdCB0aGUgQ1BVJiMzOTtzIGNhcGFiaWxpdGllcywgYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ1BVSUQsIGFyZSBhIGtleSBmYWN0b3IgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hhdCBgVERYX0NQVUlEX0xFQUZfSURgIGFuZCBgVERYX0lERU5UYCBhY3R1YWxseSBhcmU7IHRoZXkmIzM5O3JlIHByb2JhYmx5IHNvbWUgc3BlY2lmaWMgQ1BVSUQgbGVhZiBhbmQgc2lnbmF0dXJlIHZhbHVlcyByZWxhdGVkIHRvIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9uKSBzdXBwb3J0LiBJJiMzOTttIGd1ZXNzaW5nIHRoZXNlIGFyZSBjaGVja2VkICp2ZXJ5KiBlYXJseSB0byBlbnN1cmUgdGhlIHN5c3RlbSBoYXMgdGhlIHByb3BlciBoYXJkd2FyZSB0byBldmVuIGNvbnNpZGVyIHJ1bm5pbmcgdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1REWF9DUFVJRF9MRUFGX0lEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9tZW0uYz0xNT1zdGF0aWMgYm9vbCBlYXJseV9pc190ZHhfZ3Vlc3Qodm9pZClcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmMtMjUtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmM6MjY6XHRcdGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAwLCBcdTAwMjZlYXgsXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmMtMjctXHRcdFx0ICAgIFx1MDAyNnNpZ1swXSwgXHUwMDI2c2lnWzJdLCAgXHUwMDI2c2lnWzFdKTtcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmM9NjQ9dm9pZCBlYXJseV90ZHhfZGV0ZWN0KHZvaWQpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jLTY3LVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jOjY4Olx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFx1MDAyNmVheCwgXHUwMDI2c2lnWzBdLCBcdTAwMjZzaWdbMl0sICBcdTAwMjZzaWdbMV0pO1xuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jLTY5LVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMzY9dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQwLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTE0MTpcdGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAwLCBcdTAwMjZlYXgsIFx1MDAyNnNpZ1swXSwgXHUwMDI2c2lnWzJdLCAgXHUwMDI2c2lnWzFdKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDItXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oLTEwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oOjExOiNkZWZpbmUgVERYX0NQVUlEX0xFQUZfSURcdDB4MjFcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaC0xMi0jZGVmaW5lIFREWF9JREVOVFx0XHRcJiMzNDtJbnRlbFREWCAgICBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgSW50ZWwgVERYIERldGVjdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBDUFVJRCBsZWFmIDB4MjEgaXMgcmV0dXJuaW5nICYjMzQ7SW50ZWxURFggICAgJiMzNDsuIE9rYXksIHNvIFREWCBpcyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIExldCYjMzk7cyBkaWcgaW50byBgdGR4X3NldHVwYCwgd2hpY2ggSSBrbm93IGlzIGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIEkmIzM5O2xsIHdhbnQgdG8gcmV2aWV3IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHNldHVwIG9mIFREWCwgaW5jbHVkaW5nIGFueSBjaGVja3Mgb24gdGhlIEJJT1Mgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgdm9pZCBfX2luaXQgdGR4X3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYHRkeF9zZXR1cGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgVERYIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIHdvdWxkIHRoaXMgY3J1Y2lhbCBmdW5jdGlvbiwgYHRkeF9zZXR1cGAsIHJlc2lkZT8mIzM0OyBHaXZlbiB0aGUgY29udGV4dCDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSBhbmQgdGhlIHg4NiBhcmNoaXRlY3R1cmUg4oCTIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG9idmlvdXM6IGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoYXQgcGF0aCAqc2NyZWFtcyogcmVsZXZhbnQgY29kZS4gSXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4gdGhhdCBgdGR4X3NldHVwYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IGNhbGxlZCwgd2l0aGluIHRoYXQgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGggdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jPTM0MD1zdGF0aWMgdm9pZCByZWR1Y2VfdW5uZWNlc3NhcnlfdmUodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0zNTMtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzozNTQ6c3RhdGljIHZvaWQgdGR4X3NldHVwKHU2NCAqY2NfbWFzaylcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTM1NS17XG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEzNj12b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNTMtXHQvKiBDb25maWd1cmUgdGhlIFREICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTU0Olx0dGR4X3NldHVwKFx1MDAyNmNjX21hc2spO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFREWCBTZXR1cCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAgc2VxdWVuY2UgZm9yIFREWCB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbnRvIGB0ZHhfc2V0dXBgIHdpdGhpbiBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIFREWCBpbml0aWFsaXphdGlvbiBsb2dpYyBzaG91bGQgcmVzaWRlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgY2FsbHMgdGhhdCBlc3RhYmxpc2ggdGhlIFREWCBjb250ZXh0LCBjb25maWd1cmUgdGhlIG1lbW9yeSBtYXAgZm9yIHRoZSBndWVzdCwgYW5kIHNldCB1cCBhbnkgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIHNlY3VyZSBndWVzdCBvcGVyYXRpb25zLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIFREWCBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBoYW5kbGVzIHRoZSBURFggZ3Vlc3Qtc3BlY2lmaWMgbWVtb3J5IG1hcCBhbmQgcHJvdGVjdGlvbiBrZXlzLCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgY29yZSBrZXJuZWwgYm9vdCBwcm9jZXNzLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NDpcdHN0YXRpYyB2b2lkIHRkeF9zZXR1cCh1NjQgKmNjX21hc2spXG4gMzU1Olx0e1xuIDM1NjpcdFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XG4gMzU3Olx0XHR1bnNpZ25lZCBpbnQgZ3BhX3dpZHRoO1xuIDM1ODpcdFx0dTY0IHRkX2F0dHI7XG4gMzU5Olx0XG4gMzYwOlx0XHQvKlxuIDM2MTpcdFx0ICogVERJTkZPIFREWCBtb2R1bGUgY2FsbCBpcyB1c2VkIHRvIGdldCB0aGUgVEQgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gMzYyOlx0XHQgKiBpbmZvcm1hdGlvbiBsaWtlIEdQQSB3aWR0aCwgbnVtYmVyIG9mIGF2YWlsYWJsZSB2Y3B1cywgZGVidWcgbW9kZVxuIDM2MzpcdFx0ICogaW5mb3JtYXRpb24sIGV0Yy4gTW9yZSBkZXRhaWxzIGFib3V0IHRoZSBBQkkgY2FuIGJlIGZvdW5kIGluIFREWFxuIDM2NDpcdFx0ICogR3Vlc3QtSG9zdC1Db21tdW5pY2F0aW9uIEludGVyZmFjZSAoR0hDSSksIHNlY3Rpb24gMi40LjIgVERDQUxMXG4gMzY1Olx0XHQgKiBbVERHLlZQLklORk9dLlxuIDM2NjpcdFx0ICovXG4gMzY3Olx0XHR0ZGNhbGwoVERHX1ZQX0lORk8sIFx1MDAyNmFyZ3MpO1xuIDM2ODpcdFxuIDM2OTpcdFx0LypcbiAzNzA6XHRcdCAqIFRoZSBoaWdoZXN0IGJpdCBvZiBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgdGhlIFwmIzM0O3NoYXJpbmdcJiMzNDsgYml0LlxuIDM3MTpcdFx0ICogU2V0IGl0IGZvciBzaGFyZWQgcGFnZXMgYW5kIGNsZWFyIGl0IGZvciBwcml2YXRlIHBhZ2VzLlxuIDM3MjpcdFx0ICpcbiAzNzM6XHRcdCAqIFRoZSBHUEEgd2lkdGggdGhhdCBjb21lcyBvdXQgb2YgdGhpcyBjYWxsIGlzIGNyaXRpY2FsLiBURFggZ3Vlc3RzXG4gMzc0Olx0XHQgKiBjYW4gbm90IG1lYW5pbmdmdWxseSBydW4gd2l0aG91dCBpdC5cbiAzNzU6XHRcdCAqL1xuIDM3NjpcdFx0Z3BhX3dpZHRoID0gYXJncy5yY3ggXHUwMDI2IEdFTk1BU0soNSwgMCk7XG4gMzc3Olx0XHQqY2NfbWFzayA9IEJJVF9VTEwoZ3BhX3dpZHRoIC0gMSk7XG4gMzc4Olx0XG4gMzc5Olx0XHR0ZF9hdHRyID0gYXJncy5yZHg7XG4gMzgwOlx0XG4gMzgxOlx0XHQvKiBLZXJuZWwgZG9lcyBub3QgdXNlIE5PVElGWV9FTkFCTEVTIGFuZCBkb2VzIG5vdCBuZWVkIHJhbmRvbSAjVkVzICovXG4gMzgyOlx0XHR0ZGdfdm1fd3IoVERDU19OT1RJRllfRU5BQkxFUywgMCwgLTFVTEwpO1xuIDM4MzpcdFxuIDM4NDpcdFx0ZGlzYWJsZV9zZXB0X3ZlKHRkX2F0dHIpO1xuIDM4NTpcdFxuIDM4NjpcdFx0cmVkdWNlX3VubmVjZXNzYXJ5X3ZlKCk7XG4gMzg3Olx0fVxuIDM4ODpcdFxuIDM4OTpcdC8qXG4gMzkwOlx0ICogVGhlIFREWCBtb2R1bGUgc3BlYyBzdGF0ZXMgdGhhdCAjVkUgbWF5IGJlIGluamVjdGVkIGZvciBhIGxpbWl0ZWQgc2V0IG9mXG4gMzkxOlx0ICogcmVhc29uczpcbiAzOTI6XHQgKlxuIDM5MzpcdCAqICAtIEVtdWxhdGlvbiBvZiB0aGUgYXJjaGl0ZWN0dXJhbCAjVkUgaW5qZWN0aW9uIG9uIEVQVCB2aW9sYXRpb247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVERYIFJlYWNoYWJpbGl0eSBpbiBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHRkY2FsbChUREdfVlBfSU5GTywgJmFtcDthcmdzKTtgIGNhbGwgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQmIzM5O3MgZXhlY3V0aW5nIHRoZSBgdGRjYWxsYCBpbnN0cnVjdGlvbiDigJMgdGhlIG9uZSB0aGF0JiMzOTtzIHR5cGljYWxseSBgMHgwZiAweDAxIDB4Y2NgIG9yIHNpbWlsYXIuICBPbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNLCB3aXRob3V0IEludGVsIFREWCBoYXJkd2FyZSwgdGhpcyB3aWxsIGxpa2VseSBjYXVzZSBhICNVRCBvciAjVkUsIGJhc2ljYWxseSBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBkb2VzIGEgc3RhbmRhcmQgUUVNVSAvIEdDRSBldmVuICpydW4qIEludGVsIFREWD8gIEFic29sdXRlbHkgbm90ISBURFggbmVlZHMgc3BlY2lmaWMgSW50ZWwgNHRoIEdlbiBvciBuZXdlciBYZW9uIHNlcnZlciBDUFVzIHdpdGggaGFyZHdhcmUgVERYIGVuYWJsZWQgaW4gdGhlIEJJT1MsIGFuZCBURFggaG9zdCBzdXBwb3J0LCByaWdodD8gU3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zIGFyZSAqbm90KiBydW5uaW5nIGFzIFREWCBndWVzdHMuCgpTbywgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgc3l6a2FsbGVyIGV2ZW4gY29uc2lkZXIgVERYIGd1ZXN0cyBpbiBpdHMgcmVhY2hhYmlsaXR5IGFuYWx5c2lzPyAgTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgc3l6a2FsbGVyIGRlY2lkZXMgd2hhdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNyaXRlcmlhIGluIGRldGFpbCBhbmQgcmV2aWV3IHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LgoKVGhlIGdvYWwgaXMgdG8gZmluZCBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBidWdzLCBhbmQgbmV3IGFzc2VydGlvbnMgY2F1c2VkIGJ5IHRoZSBwYXRjaC4KCiogICAqKlJlYWNoYWJpbGl0eSBpcyBrZXk6KiogU3l6a2FsbGVyIGNhbiBvbmx5IGZpbmQgYnVncyBpbiBjb2RlIHRoYXQgYWN0dWFsbHkgcnVucyBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGl0IHVzZXMgKEdDRSBvciBRRU1VLCBsZXZlcmFnaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4gSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgc3RydWN0dXJhbGx5LCB3ZSBkb24mIzM5O3QgZnV6eiBpdC4KCiogICAqKk5lZ2F0aXZlIGNyaXRlcmlhOioqIFdlIHNheSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIHRoZSBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgY2F0ZWdvcmllczoKICAgICogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzIChkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZXRjLikuCiAgICAqICAgVXNlci1zcGFjZSB0aGluZ3MgdGhhdCBkb24mIzM5O3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuCiAgICAqICAgUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4KICAgICogICBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIHRoZSBjb2RlLgogICAgKiAgICoqU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOioqIFNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIHJlYWwgaGFyZHdhcmUuCgpIb2xkIG9uLCB0aGF0IGxhc3Qgb25lIGlzIHRoZSBjcnVjaWFsIGJpdC4gVGhlICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY2F0ZWdvcnkgaGFzIG1lIHRoaW5raW5nLiBJcyBhIFREWCBndWVzdCAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSYjMzQ7PyBPciwgaXMgaXQgcmVhY2hhYmxlIG9yIHVucmVhY2hhYmxlPyBXaGF0JiMzOTtzIHRoZSB3b3JkaW5nPyBUaGUgZXhhbXBsZSBpcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgc3VjaCB0aGF0IGRlbWFuZCBwaHlzaWNhbCBjYXJkcy4gIERvZXMgdGhpcyBleHRlbmQgdG8gY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLCBURFgpPyBHQ0UgaGFzIEMzIG1hY2hpbmVzIChJbnRlbCA0dGggR2VuIFhlb24pIHRoYXQgcHJvdmlkZSBDb25maWRlbnRpYWwgVk1zIHVzaW5nIEludGVsIFREWCwgc28gdGhleSBjbGVhcmx5IHN1cHBvcnQgVERYLiBCdXQsIGlzIHRoYXQgYSAmIzM0O3N0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50JiMzNDs/ICBJIG1lYW4sIHRoZSBkZWZpbml0aW9uIHN0YXRlcyAmIzM0O3N0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkmIzM0Oy4gRG9lcyBzeXprYWxsZXIgd29yayB3aXRoIHRoaXMgc3RhbmRhcmQgZW52aXJvbm1lbnQ/CgpTeXprYWxsZXIgcnVucyBzdGFuZGFyZCBRRU1VIChsaWtlIGBxZW11LXN5c3RlbS14ODZfNjQgLWVuYWJsZS1rdm0gLi4uYCkgb3Igc3RhbmRhcmQgR0NFIGluc3RhbmNlcyAoYGUyLXN0YW5kYXJkLTRgLCBldGMuKS4gU28sIHRoZSBjb3JlIHF1ZXN0aW9uIGJlY29tZXM6IGRvZXMgdGhlIGd1ZXN0ICpoYXZlKiBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBpbiB0aGVzZSBzZXR1cHM/IE5PLCBhYnNvbHV0ZWx5IG5vdCEgV2hlbiBib290aW5nIGEgKnN0YW5kYXJkKiBRRU1VIG9yIEdDRSBWTSwgYGNwdWlkX2NvdW50KDB4MjEsIDApYCAqZG9lc24mIzM5O3QqIHJldHVybiAmIzM0O0ludGVsVERYICYjMzQ7LgoKVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGB0ZHgtZ3Vlc3RgIGlzIG5ldmVyIGluaXRpYWxpemVkISBgL2Rldi90ZHgtZ3Vlc3RgIGlzIG5ldmVyIGNyZWF0ZWQuICBgdGR4X3RzbV9vcHNgIGlzIG5ldmVyIHJlZ2lzdGVyZWQuICBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyAqbmV2ZXIqIGNhbGxlZC4KCldhaXQgYSBzZWNvbmQuIExldCYjMzk7cyByZWFsbHkgc29saWRpZnkgdGhpcy4gQ2FuIFFFTVUgZW11bGF0ZSBURFg/IE5vLCB0aGF0JiMzOTtzIGltcG9zc2libGUuIFREWCByZXF1aXJlcyBJbnRlbCBoYXJkd2FyZSB3aXRoIE1DSEVDSy9TRUFNIGZpcm13YXJlLiAgV2hhdCBhYm91dCBUU00gcmVwb3J0cz8gTmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9yZXBvcnQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvcmVwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qIENvcHlyaWdodChjKSAyMDIzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuICAgMzpcdFxuICAgNDpcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHNtLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J3c2VtLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29uZmlnZnMuaFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdHN0YXRpYyBzdHJ1Y3QgdHNtX3Byb3ZpZGVyIHtcbiAgMTY6XHRcdGNvbnN0IHN0cnVjdCB0c21fcmVwb3J0X29wcyAqb3BzO1xuICAxNzpcdFx0dm9pZCAqZGF0YTtcbiAgMTg6XHRcdGF0b21pY190IGNvdW50O1xuICAxOTpcdH0gcHJvdmlkZXI7XG4gIDIwOlx0c3RhdGljIERFQ0xBUkVfUldTRU0odHNtX3J3c2VtKTtcbiAgMjE6XHRcbiAgMjI6XHQvKipcbiAgMjM6XHQgKiBET0M6IFRydXN0ZWQgU2VjdXJpdHkgTW9kdWxlIChUU00pIEF0dGVzdGF0aW9uIFJlcG9ydCBJbnRlcmZhY2VcbiAgMjQ6XHQgKlxuICAyNTpcdCAqIFRoZSBUU00gcmVwb3J0IGludGVyZmFjZSBpcyBhIGNvbW1vbiBwcm92aWRlciBvZiBibG9icyB0aGF0IGZhY2lsaXRhdGVcbiAgMjY6XHQgKiBhdHRlc3RhdGlvbiBvZiBhIFRWTSAoY29uZmlkZW50aWFsIGNvbXB1dGluZyBndWVzdCkgYnkgYW4gYXR0ZXN0YXRpb25cbiAgMjc6XHQgKiBzZXJ2aWNlLiBBIFRTTSByZXBvcnQgY29tYmluZXMgYSB1c2VyLWRlZmluZWQgYmxvYiAobGlrZWx5IGEgcHVibGljLWtleSB3aXRoXG4gIDI4Olx0ICogYSBub25jZSBmb3IgYSBrZXktZXhjaGFuZ2UgcHJvdG9jb2wpIHdpdGggYSBzaWduZWQgYXR0ZXN0YXRpb24gcmVwb3J0LiBUaGF0XG4gIDI5Olx0ICogY29tYmluZWQgYmxvYiBpcyB0aGVuIHVzZWQgdG8gb2J0YWluIHNlY3JldHMgcHJvdmlkZWQgYnkgYW4gYWdlbnQgdGhhdCBjYW5cbiAgMzA6XHQgKiB2YWxpZGF0ZSB0aGUgYXR0ZXN0YXRpb24gcmVwb3J0LiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGludGVyZmFjZSBpc1xuICAzMTpcdCAqIGludm9rZWQgaW5mcmVxdWVudGx5LCBob3dldmVyIGNvbmZpZ2ZzIGFsbG93cyBmb3IgbXVsdGlwbGUgYWdlbnRzIHRvXG4gIDMyOlx0ICogb3duIHRoZWlyIG93biByZXBvcnQgZ2VuZXJhdGlvbiBpbnN0YW5jZXMgdG8gZ2VuZXJhdGUgcmVwb3J0cyBhc1xuICAzMzpcdCAqIG9mdGVuIGFzIG5lZWRlZC5cbiAgMzQ6XHQgKlxuICAzNTpcdCAqIFRoZSBhdHRlc3RhdGlvbiByZXBvcnQgZm9ybWF0IGlzIFRTTSBwcm92aWRlciBzcGVjaWZpYywgd2hlbiAvIGlmIGEgc3RhbmRhcmRcbiAgMzY6XHQgKiBtYXRlcmlhbGl6ZXMgdGhhdCBjYW4gYmUgcHVibGlzaGVkIGluc3RlYWQgb2YgdGhlIHZlbmRvciBsYXlvdXQuIFVudGlsIHRoZW5cbiAgMzc6XHQgKiB0aGUgJiMzOTtwcm92aWRlciYjMzk7IGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCBvZiAmIzM5O291dGJsb2ImIzM5OywgYW5kIG9wdGlvbmFsbHlcbiAgMzg6XHQgKiAmIzM5O2F1eGJsb2ImIzM5OyBhbmQgJiMzOTttYW5pZmVzdGJsb2ImIzM5Oy5cbiAgMzk6XHQgKi9cbiAgNDA6XHRcbiAgNDE6XHRzdHJ1Y3QgdHNtX3JlcG9ydF9zdGF0ZSB7XG4gIDQyOlx0XHRzdHJ1Y3QgdHNtX3JlcG9ydCByZXBvcnQ7XG4gIDQzOlx0XHR1bnNpZ25lZCBsb25nIHdyaXRlX2dlbmVyYXRpb247XG4gIDQ0Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRfZ2VuZXJhdGlvbjtcbiAgNDU6XHRcdHN0cnVjdCBjb25maWdfaXRlbSBjZmc7XG4gIDQ2Olx0fTtcbiAgNDc6XHRcbiAgNDg6XHRlbnVtIHRzbV9kYXRhX3NlbGVjdCB7XG4gIDQ5Olx0XHRUU01fUkVQT1JULFxuICA1MDpcdFx0VFNNX0NFUlRTLFxuICA1MTpcdFx0VFNNX01BTklGRVNULFxuICA1MjpcdH07XG4gIDUzOlx0XG4gIDU0Olx0c3RhdGljIHN0cnVjdCB0c21fcmVwb3J0ICp0b190c21fcmVwb3J0KHN0cnVjdCBjb25maWdfaXRlbSAqY2ZnKVxuICA1NTpcdHtcbiAgNTY6XHRcdHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICpzdGF0ZSA9XG4gIDU3Olx0XHRcdGNvbnRhaW5lcl9vZihjZmcsIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlLCBjZmcpO1xuICA1ODpcdFxuICA1OTpcdFx0cmV0dXJuIFx1MDAyNnN0YXRlLVx1MDAzZXJlcG9ydDtcbiAgNjA6XHR9XG4gIDYxOlx0XG4gIDYyOlx0c3RhdGljIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0KVxuICA2MzpcdHtcbiAgNjQ6XHRcdHJldHVybiBjb250YWluZXJfb2YocmVwb3J0LCBzdHJ1Y3QgdHNtX3JlcG9ydF9zdGF0ZSwgcmVwb3J0KTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0c3RhdGljIGludCB0cnlfYWR2YW5jZV93cml0ZV9nZW5lcmF0aW9uKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQpXG4gIDY4Olx0e1xuICA2OTpcdFx0c3RydWN0IHRzbV9yZXBvcnRfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUocmVwb3J0KTtcbiAgNzA6XHRcbiAgNzE6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2dHNtX3J3c2VtKTtcbiAgNzI6XHRcbiAgNzM6XHRcdC8qXG4gIDc0Olx0XHQgKiBNYWxpY2lvdXMgb3IgYnJva2VuIHVzZXJzcGFjZSBoYXMgd3JpdHRlbiBlbm91Z2ggdGltZXMgZm9yXG4gIDc1Olx0XHQgKiByZWFkX2dlbmVyYXRpb24gPT0gd3JpdGVfZ2VuZXJhdGlvbiBieSBtb2R1bGFyIGFyaXRobWV0aWMgd2l0aG91dCBhblxuICA3NjpcdFx0ICogaW50ZXJpbSByZWFkLiBTdG9wIGFjY2VwdGluZyB1cGRhdGVzIHVudGlsIHRoZSBjdXJyZW50IHJlcG9ydFxuICA3NzpcdFx0ICogY29uZmlndXJhdGlvbiBpcyByZWFkLlxuICA3ODpcdFx0ICovXG4gIDc5Olx0XHRpZiAoc3RhdGUtXHUwMDNld3JpdGVfZ2VuZXJhdGlvbiA9PSBzdGF0ZS1cdTAwM2VyZWFkX2dlbmVyYXRpb24gLSAxKVxuICA4MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuICA4MTpcdFx0c3RhdGUtXHUwMDNld3JpdGVfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4gIDgyOlx0XHRyZXR1cm4gMDtcbiAgODM6XHR9XG4gIDg0Olx0XG4gIDg1Olx0c3RhdGljIHNzaXplX3QgdHNtX3JlcG9ydF9wcml2bGV2ZWxfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICpjZmcsXG4gIDg2Olx0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuICA4NzpcdHtcbiAgODg6XHRcdHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQgPSB0b190c21fcmVwb3J0KGNmZyk7XG4gIDg5Olx0XHR1bnNpZ25lZCBpbnQgdmFsO1xuICA5MDpcdFx0aW50IHJjO1xuICA5MTpcdFxuICA5MjpcdFx0cmMgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2dmFsKTtcbiAgOTM6XHRcdGlmIChyYylcbiAgOTQ6XHRcdFx0cmV0dXJuIHJjO1xuICA5NTpcdFxuICA5NjpcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnRzbV9yd3NlbSk7XG4gIDk3Olx0XHRpZiAoIXByb3ZpZGVyLm9wcylcbiAgOTg6XHRcdFx0cmV0dXJuIC1FTlhJTztcbiAgOTk6XHRcbiAxMDA6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTkwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggUmVhY2hhYmlsaXR5IEFuYWx5c2lzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZSBjb2RlIHJlbGF0ZWQgdG8gYHRzbV9yZXBvcnRfb3BzYCBpcyBldmVuIHJlYWNoYWJsZS4gSSBzZWUgdGhhdCBpdCYjMzk7cyByZWdpc3RlcmVkIHRocm91Z2ggYHRzbV9yZXBvcnRfcmVnaXN0ZXJgIGluIGB0ZHhfdHNtX29wc2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2Agb3IgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQgaW4gdGhlIHRhcmdldCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgY29kZSBnb3QgdHJpYWdlZCBpbW1lZGlhdGVseSBtYWtlcyBtZSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgcmVhc29uLCBhbmQgSSBuZWVkIHRvIGJlIGRpbGlnZW50LgoKTXkgbWluZCBxdWlja2x5IGp1bXBzIHRvIGNoZWNraW5nIHN5emthbGxlciYjMzk7cyBkZXNjcmlwdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgcmVtaW5kIG1lIG9mIHNvbWUgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIHRvb2xzIEkgKnNob3VsZCogdXNlIC0gYXZvaWRpbmcgdGhvc2Ugd2hpY2ggY2FuJiMzOTt0IGhhbmRsZSBzeXpsYW5nIGRlc2NyaXB0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHVzaW5nIHRoZSByaWdodCB0b29scyAtIG5vIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGhlcmUsIEkgbmVlZCB0byB1c2UgdGhlIGF2YWlsYWJsZSB0b29scywgd2hpY2ggYXJlIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGFuZCBgc2V0LXJlc3VsdHNgLgoKSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5OiBpcyB0aGUgY29kZSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgaW5zdHJ1Y3Rpb25zIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0IGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgb24gZXhlY3V0YWJsZSBjb2RlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBVbnJlYWNoYWJsZSBjb2RlIGlzIGEgbm9uLXN0YXJ0ZXIuCgomIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGlzIHRoZSBrZXkuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBURFguIElzIFREWCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGU/CgpJIHJlY2FsbCB0aGF0IEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlICg0dGggZ2VuIFhlb24gU2NhbGFibGUgb3IgbmV3ZXIpIGFuZCBzcGVjaWZpYyBCSU9TIGFuZCBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb25zLiBDcnVjaWFsbHksIFFFTVUgKmNhbm5vdCogZW11bGF0ZSBURFguIFlvdSBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLiBTeXprYWxsZXIgcnVucyBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgb3IgR29vZ2xlJiMzOTtzIGVxdWl2YWxlbnQgbm9uLWNvbmZpZGVudGlhbCBpbnN0YW5jZXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBib2lscyBkb3duIHRvOiBJbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgbGlrZSBzeXprYWxsZXIgdXNlcywgaXMgYHRkeF9ndWVzdF9pbml0YCBldmVyIHJlYWNoZWQ/IEkgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4sIHJlLWVtcGhhc2l6aW5nIHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlOiBJIGhhdmUgdG8gYmUgc3VyZSB0aGUgY29kZSBleGVjdXRlcyBpbiB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnQuCgpUaGUgbmV4dCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGRvZXMgR0NFIHN1cHBvcnQgVERYPyYjMzQ7IEdDRSAqZG9lcyogb2ZmZXIgQ29uZmlkZW50aWFsIFZNcyB3aXRoIFREWCBvbiBjZXJ0YWluIGluc3RhbmNlIHR5cGVzLiBCdXQgdGhlIGluc3RydWN0aW9ucyBhcmUgYWJvdXQgKnN0YW5kYXJkKiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFN0YW5kYXJkIEdDRSBpbnN0YW5jZXMgZG9uJiMzOTt0IHJ1biBpbiBURFggZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgYWxzbyBkb2VzbiYjMzk7dCBydW4gaW5zaWRlIENvbmZpZGVudGlhbCBWTXMuIEl0IG9wZXJhdGVzIGluIHRoZSBkZWZhdWx0LCBub24tY29uZmlkZW50aWFsIGVudmlyb25tZW50cy4KCk9rYXksIGxldCYjMzk7cyBleGFtaW5lIHRoZSBjb2RlLiBJbiBgdGR4X2Vhcmx5X2luaXQoKWAsIHRoZXJlJiMzOTtzIGEgQ1BVSUQgY2hlY2suIFVubGVzcyB3ZSYjMzk7cmUgb24gYWN0dWFsIFREWCBoYXJkd2FyZSwgdGhlIHNpZ25hdHVyZSBjaGVjayBmYWlscywgYW5kIGB0ZHhfZWFybHlfaW5pdGAgcmV0dXJucy4gVGhpcyByZXN1bHRzIGluIHRoZSBmbGFnIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIG5vdCBiZWluZyBzZXQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4KClRoZW4sIHRoZSBjaGVjayBpbiBgdGR4X2d1ZXN0X2luaXQoKWAgZmFpbHMgYmVjYXVzZSB0aGUgZmVhdHVyZSBpc24mIzM5O3Qgc2V0LiBgeDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKWAgcmV0dXJucyBmYWxzZSwgYW5kIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBpbW1lZGlhdGVseSByZXR1cm5zIGFuIGVycm9yLiBUaGlzIG1lYW5zIHRoYXQgYWxsIHRoZSBzdWJzZXF1ZW50IGNvZGUgcGF0aHMgaW4gYHRkeC1ndWVzdC5jYCByZWxhdGVkIHRvIHF1b3RlIG1hbmFnZW1lbnQsIGRldmljZSByZWdpc3RyYXRpb24sIGFuZCBUU00gb3BzICpuZXZlciogZ2V0IGV4ZWN1dGVkLgoKSW4gYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCwgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKWAgaXMgaW50cm9kdWNlZCwgd2hpY2ggY2FsbHMgYHRkZ192bV9yZCgpYC4gVGhhdCBmdW5jdGlvbiBleGVjdXRlcyBhIGBURENBTExgIGluc3RydWN0aW9uLiBBIGBURENBTExgIHdpbGwgdHJpZ2dlciBhICNVRCBmYXVsdCBvbiBhIENQVSB0aGF0IGRvZXNuJiMzOTt0IHN1cHBvcnQgVERYLiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyBvbmx5IGNhbGxlZCBpbiBgZ2V0X3F1b3RlX2J1Zl9zaXplKClgLiBCZWNhdXNlIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGlzbiYjMzk7dCByZWFjaGVkLCBpdCBtZWFucyBURENBTEwgaXMgbm90IGNhbGxlZC4gVGhpcyBjb2RlIGlzICp1bnJlYWNoYWJsZSouCgpUaGUgYm90dG9tIGxpbmUgaXM6IHRoZSBjb2RlIGlzIG5vdCByZWFjaGFibGUuIEkgbm93IG5lZWQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgLiBJZiBubyBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCwgdGhlbiB0aGUgcGF0Y2ggaXMgdW5yZWFjaGFibGUsIGFuZCBubyBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZ2V0X21heF9xdW90ZV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jPTE5OT1FWFBPUlRfU1lNQk9MX0dQTCh0ZHhfaGNhbGxfZ2V0X3F1b3RlKTtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMDEtLyoqXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyMDI6ICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIwMy0gKlxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxNC0gKi9cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjIxNTp1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjE2LXtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMjItfVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjIzOkVYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjI0LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTg0PXU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTg1LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6ODY6dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC04Ny1cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9MjI5PXN0YXRpYyBzaXplX3QgZ2V0X3F1b3RlX2J1Zl9zaXplKHZvaWQpXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtMjMwLXtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzoyMzE6XHR1MzIgcXVvdGVfc2l6ZSA9IHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKTtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy0yMzItXHRzaXplX3QgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgzNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVERYIEd1ZXN0IENvZGUgUmVhY2hhYmlsaXR5IEFzc2Vzc21lbnQgZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIFREWCBndWVzdCBjb2RlIGluIGBkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNgLCBzcGVjaWZpY2FsbHkgZnVuY3Rpb25zIGxpa2UgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemVgLCBpcyByZWFjaGFibGUgYnkgc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBjb2RlIGFuYWx5c2lzIHNob3dzIHRoYXQgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBnZXRfcXVvdGVfYnVmX3NpemUoKWAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBjYWxsZWQgd2l0aGluIGB0ZHhfZ3Vlc3RfaW5pdCgpYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbml0aWFsaXphdGlvbiBwYXRoIGlzIGV2ZXIgdGFrZW4gdW5kZXIgc3RhbmRhcmQgc3l6a2FsbGVyIGZ1enppbmcgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgc3l6a2FsbGVyIGd1aWRlbGluZXMgb24gcmVhY2hhYmlsaXR5LiBUaGUgZ3VpZGVsaW5lcyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFzIHRoZSBwcmltYXJ5IGZhY3Rvci4gVGhlIGdvYWwgaXMgdG8gZGlzY292ZXIgYnVncyBpbiAqZXhlY3V0YWJsZSogY29kZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBleHBsaWNpdCBuZWdhdGl2ZSBjcml0ZXJpYTogJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgU3BlY2lmaWNhbGx5LCBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUgYXJlIGV4Y2x1ZGVkLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhpcyB0byBURFguIEludGVsIFREWCBpcyBhIGhhcmR3YXJlIENQVSBzZWN1cml0eSB0ZWNobm9sb2d5IGZvciBjb25maWRlbnRpYWwgVk1zLiBUbyBleGVjdXRlLCBpdCByZXF1aXJlcyBzcGVjaWZpYyBJbnRlbCBYZW9uIGhhcmR3YXJlIGFuZCBURFggZW5hYmxlZC4gSSByZWNhbGwgdGhhdCBkdXJpbmcgZWFybHkgYm9vdCwgdGhlIGd1ZXN0IGtlcm5lbCBjaGVja3MgZm9yIFREWCBzdXBwb3J0IHZpYSBDUFVJRCBsZWFmIDB4MjEgKGBURFhfQ1BVSURfTEVBRl9JRGApLiBJbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQg4oCTIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMg4oCTIHRoaXMgbGVhZiB3aWxsICpub3QqIHJldHVybiB0aGUgVERYIHNpZ25hdHVyZS4gQ29uc2VxdWVudGx5LCB0aGUgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgZmVhdHVyZSBmbGFnIHdpbGwgbm90IGJlIGVuYWJsZWQuCgpTaW5jZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBpcyBub3QgcHJlc2VudCwgYHg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcylgIHdpbGwgZmFpbC4gIFRoaXMgbWVhbnMgdGhhdCBgdGR4X2d1ZXN0X2luaXQoKWAgd2lsbCByZXR1cm4gYC1FTk9ERVZgLCBlZmZlY3RpdmVseSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBlbnRpcmUgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyIHdvbiYjMzk7dCByZWdpc3RlciBpdHMgYC9kZXYvdGR4LWd1ZXN0YCBkZXZpY2UsIGl0IHdvbiYjMzk7dCBpbnRlcmFjdCB3aXRoIFRTTSwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBnZXRfcXVvdGVfYnVmX3NpemUoKWAsICBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCwgYGFsbG9jX3F1b3RlX2J1ZigpYCwgYGZyZWVfcXVvdGVfYnVmKClgLCBhbmQgYHRkeF9yZXBvcnRfbmV3X2xvY2tlZCgpYCB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gVGhlIGNvZGUgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AgYW5kIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBRRU1VIG9mZmVycyBhIHdvcmthcm91bmQgdGhyb3VnaCBgLWNwdWAgZmxhZ3Mgb3Igc29tZXRoaW5nLCBidXQgSSBhbSBwcmV0dHkgY2VydGFpbiBRRU1VIGRvZXMgbm90IGhhdmUgc29mdHdhcmUgZW11bGF0aW9uIGZvciBURFguIFREWCBpbiBLVk0vUUVNVSAqcmVxdWlyZXMqIHNwZWNpZmljIGhhcmR3YXJlIChTYXBwaGlyZSBSYXBpZHMgb3IgbmV3ZXIpIHdpdGggVERYIGVuYWJsZWQsIGhvc3Qgc3VwcG9ydCAoS1ZNIFREWCksIGFuZCBRRU1VIHdpdGggVERYIGd1ZXN0IHN1cHBvcnQgKHNwZWNpZmljYWxseSwgYC1vYmplY3QgdGR4LWd1ZXN0LC4uLmApLiBTeXprYWxsZXImIzM5O3Mgc3RhbmRhcmQgZnV6emluZyBzZXR1cCBkb2VzbiYjMzk7dCBtZWV0IGFueSBvZiB0aGVzZSByZXF1aXJlbWVudHMuCgpJIHJlY2FsbCB0aGF0IHJlc2VhcmNoIHByb2plY3RzIGV4aXN0IHRoYXQgaGF2ZSBleHBsb3JlZCBmdXp6aW5nIG9mIFNFVi9TTlAvVERYLCBob3dldmVyLCB0aGF0IGlzIG5vdCB0aGUgc3l6a2FsbGVyIGRlZmF1bHQgc2V0dXAuIEluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgdHJpYWdlLCBjb2RlIGlzIG5vdCBmdXp6ZWQgaWYgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgYmFja2Rvb3Igd2F5IHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLCBwZXJoYXBzIHRocm91Z2ggYSBzeXNmcyBpbnRlcmZhY2UsIGRlYnVnZnMgZW50cnksIG9yIHNvbWUga2luZCBvZiBtb2NrIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgdGhlIGB0ZHhfZ3Vlc3RfaWRzYCBvciBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB0aHJvdWdoIGEgZ3JlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2d1ZXN0X2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDA3PXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0ZHhfbWlzY19kZXYgPSB7XG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxMy1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTQ6c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTUtXHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTctfTtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTg6TU9EVUxFX0RFVklDRV9UQUJMRSh4ODZjcHUsIHRkeF9ndWVzdF9pZHMpO1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxOS1cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDI3PXN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQzMC1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MzE6XHRpZiAoIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcykpXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDMyLVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1ODgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFREWCBHdWVzdCBEcml2ZXIqKgoKT2theSwgc28gYHRkeF9ndWVzdF9pZHNgIGlzIGlzb2xhdGVkIHdpdGhpbiBgdGR4LWd1ZXN0LmNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG9idmlvdXMgZW50cnlwb2ludHMgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AuIEkgbmVlZCB0byBlbnN1cmUgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgdGhlcmUuIEFmdGVyIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gYWJzb3JiIHRoZSByZXN0IG9mIHRoZSBzb3VyY2UgZmlsZSB0byBncmFzcCB0aGUgZW50aXJldHkgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBSZWFkaW5nIHRoZSBmdWxsIGBkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNgIGZpbGUgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhY2hpZXZlIHRoaXMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgY29kZS4gSSBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggam9iLCBhZnRlciBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LypcbiAgIDM6XHQgKiBURFggZ3Vlc3QgdXNlciBpbnRlcmZhY2UgZHJpdmVyXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSW50ZWwgQ29ycG9yYXRpb25cbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQjZGVmaW5lIHByX2ZtdChmbXQpXHRcdFx0S0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gICA5Olx0XG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9taXNjZGV2aWNlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja3B0ci5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHNtLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90c20tbXIuaFx1MDAzZVxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvdGR4LWd1ZXN0LmhcdTAwM2VcbiAgMjQ6XHRcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2Nhc20vY3B1X2RldmljZV9pZC5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjYXNtL3RkeC5oXHUwMDNlXG4gIDI3Olx0XG4gIDI4Olx0LyogVERSRVBPUlQgYnVmZmVyICovXG4gIDI5Olx0c3RhdGljIHU4ICp0ZHhfcmVwb3J0X2J1ZjtcbiAgMzA6XHRcbiAgMzE6XHQvKiBMb2NrIHRvIHNlcmlhbGl6ZSBUREcuTVIuUkVQT1JUIGFuZCBUREcuTVIuUlRNUi5FWFRFTkQgVERDQUxMcyAqL1xuICAzMjpcdHN0YXRpYyBERUZJTkVfTVVURVgobXJfbG9jayk7XG4gIDMzOlx0XG4gIDM0Olx0LyogVERSRVBPUlQgZmllbGRzICovXG4gIDM1Olx0ZW51bSB7XG4gIDM2Olx0XHRURFJFUE9SVF9yZXBvcnRkYXRhID0gMTI4LFxuICAzNzpcdFx0VERSRVBPUlRfdGVlX3RjYl9pbmZvID0gMjU2LFxuICAzODpcdFx0VERSRVBPUlRfdGRpbmZvID0gVERSRVBPUlRfdGVlX3RjYl9pbmZvICYjNDM7IDI1NixcbiAgMzk6XHRcdFREUkVQT1JUX2F0dHJpYnV0ZXMgPSBURFJFUE9SVF90ZGluZm8sXG4gIDQwOlx0XHRURFJFUE9SVF94ZmFtID0gVERSRVBPUlRfYXR0cmlidXRlcyAmIzQzOyBzaXplb2YodTY0KSxcbiAgNDE6XHRcdFREUkVQT1JUX21ydGQgPSBURFJFUE9SVF94ZmFtICYjNDM7IHNpemVvZih1NjQpLFxuICA0MjpcdFx0VERSRVBPUlRfbXJjb25maWdpZCA9IFREUkVQT1JUX21ydGQgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0MzpcdFx0VERSRVBPUlRfbXJvd25lciA9IFREUkVQT1JUX21yY29uZmlnaWQgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0NDpcdFx0VERSRVBPUlRfbXJvd25lcmNvbmZpZyA9IFREUkVQT1JUX21yb3duZXIgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0NTpcdFx0VERSRVBPUlRfcnRtcjAgPSBURFJFUE9SVF9tcm93bmVyY29uZmlnICYjNDM7IFNIQTM4NF9ESUdFU1RfU0laRSxcbiAgNDY6XHRcdFREUkVQT1JUX3J0bXIxID0gVERSRVBPUlRfcnRtcjAgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0NzpcdFx0VERSRVBPUlRfcnRtcjIgPSBURFJFUE9SVF9ydG1yMSAmIzQzOyBTSEEzODRfRElHRVNUX1NJWkUsXG4gIDQ4Olx0XHRURFJFUE9SVF9ydG1yMyA9IFREUkVQT1JUX3J0bXIyICYjNDM7IFNIQTM4NF9ESUdFU1RfU0laRSxcbiAgNDk6XHRcdFREUkVQT1JUX3NlcnZ0ZF9oYXNoID0gVERSRVBPUlRfcnRtcjMgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA1MDpcdH07XG4gIDUxOlx0XG4gIDUyOlx0c3RhdGljIGludCB0ZHhfZG9fcmVwb3J0KHNvY2twdHJfdCBkYXRhLCBzb2NrcHRyX3QgdGRyZXBvcnQpXG4gIDUzOlx0e1xuICA1NDpcdFx0c2NvcGVkX2NvbmRfZ3VhcmQobXV0ZXhfaW50ciwgcmV0dXJuIC1FSU5UUiwgXHUwMDI2bXJfbG9jaykge1xuICA1NTpcdFx0XHR1OCAqcmVwb3J0ZGF0YSA9IHRkeF9yZXBvcnRfYnVmICYjNDM7IFREUkVQT1JUX3JlcG9ydGRhdGE7XG4gIDU2Olx0XHRcdGludCByZXQ7XG4gIDU3Olx0XG4gIDU4Olx0XHRcdGlmICghc29ja3B0cl9pc19udWxsKGRhdGEpIFx1MDAyNlx1MDAyNlxuICA1OTpcdFx0XHQgICAgY29weV9mcm9tX3NvY2twdHIocmVwb3J0ZGF0YSwgZGF0YSwgVERYX1JFUE9SVERBVEFfTEVOKSlcbiAgNjA6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAgNjE6XHRcbiAgNjI6XHRcdFx0cmV0ID0gdGR4X21jYWxsX2dldF9yZXBvcnQwKHJlcG9ydGRhdGEsIHRkeF9yZXBvcnRfYnVmKTtcbiAgNjM6XHRcdFx0aWYgKFdBUk5fT05DRShyZXQsIFwmIzM0O3RkeF9tY2FsbF9nZXRfcmVwb3J0MCgpIGZhaWxlZDogJWRcJiMzNDssIHJldCkpXG4gIDY0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAgNjU6XHRcbiAgNjY6XHRcdFx0aWYgKCFzb2NrcHRyX2lzX251bGwodGRyZXBvcnQpIFx1MDAyNlx1MDAyNlxuICA2NzpcdFx0XHQgICAgY29weV90b19zb2NrcHRyKHRkcmVwb3J0LCB0ZHhfcmVwb3J0X2J1ZiwgVERYX1JFUE9SVF9MRU4pKVxuICA2ODpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA2OTpcdFx0fVxuICA3MDpcdFx0cmV0dXJuIDA7XG4gIDcxOlx0fVxuICA3MjpcdFxuICA3MzpcdHN0YXRpYyBpbnQgdGR4X2RvX2V4dGVuZCh1OCBtcl9pbmQsIGNvbnN0IHU4ICpkYXRhKVxuICA3NDpcdHtcbiAgNzU6XHRcdHNjb3BlZF9jb25kX2d1YXJkKG11dGV4X2ludHIsIHJldHVybiAtRUlOVFIsIFx1MDAyNm1yX2xvY2spIHtcbiAgNzY6XHRcdFx0LypcbiAgNzc6XHRcdFx0ICogVERYIHJlcXVpcmVzIEBleHRlbmRfYnVmIHRvIGJlIDY0LWJ5dGUgYWxpZ25lZC5cbiAgNzg6XHRcdFx0ICogSXQmIzM5O3Mgc2FmZSB0byB1c2UgUkVQT1JUREFUQSBidWZmZXIgZm9yIHRoYXQgcHVycG9zZSBiZWNhdXNlXG4gIDc5Olx0XHRcdCAqIHRkeF9tcl9yZXBvcnQvZXh0ZW5kX2xvY2soKSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICA4MDpcdFx0XHQgKi9cbiAgODE6XHRcdFx0dTggKmV4dGVuZF9idWYgPSB0ZHhfcmVwb3J0X2J1ZiAmIzQzOyBURFJFUE9SVF9yZXBvcnRkYXRhO1xuICA4MjpcdFx0XHRpbnQgcmV0O1xuICA4MzpcdFxuICA4NDpcdFx0XHRtZW1jcHkoZXh0ZW5kX2J1ZiwgZGF0YSwgU0hBMzg0X0RJR0VTVF9TSVpFKTtcbiAgODU6XHRcbiAgODY6XHRcdFx0cmV0ID0gdGR4X21jYWxsX2V4dGVuZF9ydG1yKG1yX2luZCwgZXh0ZW5kX2J1Zik7XG4gIDg3Olx0XHRcdGlmIChXQVJOX09OQ0UocmV0LCBcJiMzNDt0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIoJXUpIGZhaWxlZDogJWRcJiMzNDssIG1yX2luZCwgcmV0KSlcbiAgODg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuICA4OTpcdFx0fVxuICA5MDpcdFx0cmV0dXJuIDA7XG4gIDkxOlx0fVxuICA5MjpcdFxuICA5MzpcdCNkZWZpbmUgVERYX01SXyhyKSAubXJfdmFsdWUgPSAodm9pZCAqKVREUkVQT1JUXyMjciwgVFNNX01SXyhyLCBTSEEzODQpXG4gIDk0Olx0c3RhdGljIHN0cnVjdCB0c21fbWVhc3VyZW1lbnRfcmVnaXN0ZXIgdGR4X21yc1tdID0ge1xuICA5NTpcdFx0eyBURFhfTVJfKHJ0bXIwKSB8IFRTTV9NUl9GX1JUTVIgfSxcbiAgOTY6XHRcdHsgVERYX01SXyhydG1yMSkgfCBUU01fTVJfRl9SVE1SIH0sXG4gIDk3Olx0XHR7IFREWF9NUl8ocnRtcjIpIHwgVFNNX01SX0ZfUlRNUiB9LFxuICA5ODpcdFx0eyBURFhfTVJfKHJ0bXIzKSB8IFRTTV9NUl9GX1JUTVIgfSxcbiAgOTk6XHRcdHsgVERYX01SXyhtcnRkKSB9LFxuIDEwMDpcdFx0eyBURFhfTVJfKG1yY29uZmlnaWQpIHwgVFNNX01SX0ZfTk9IQVNIIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjI0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AgLSBMaW5lcyAxMDEtMjAwKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gbGluZXMgMTAxIHRvIDIwMCB3aXRoaW4gdGhhdCBgdGR4LWd1ZXN0LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgcGFydCBkZWFsaW5nIHdpdGggdGhlIFREWCBndWVzdCBkcml2ZXIuIEJhc2VkIG9uIHRoZSBmaWxlIHN0cnVjdHVyZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHNvbWUgY29yZSBpbml0aWFsaXphdGlvbiwgcGVyaGFwcyBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgY29tbXVuaWNhdGlvbiBwYXRoIHdpdGggdGhlIFREWCBtb2R1bGUsIG9yIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIFREWC1zcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZWl0aGVyIHRoZSBgdGR4YCBpbnRlcmZhY2UgaGVyZSBvciBhdCBsZWFzdCBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHdlbGwuIEdpdmVuIHRoZSBURFggY29udGV4dCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBzZXR0aW5nIHVwIHRoZSBHdWVzdCBBdHRlc3RhdGlvbiBSZXBvcnQsIG9yIGlmIHRoZXJlIGlzIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycyBmb3IgdGhlIFREWC1zcGVjaWZpYyBoYXJkd2FyZSBhbmQgbWVtb3J5IHJlZ2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBpcyBhbHdheXMgY3JpdGljYWwgaW4gc2VjdXJlIHN5c3RlbXM7IGEgbWlzc3RlcCBoZXJlLCBhbmQgdGhlIHdob2xlIHN5c3RlbSBiZWNvbWVzIHZ1bG5lcmFibGUuIEl0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiBlc3RhYmxpc2hpbmcgdGhlIHNlY3VyZSBtZW1vcnkgcmVnaW9ucy4KCk15IGV4cGVydGlzZSB0ZWxscyBtZSB0byBxdWlja2x5IHdhdGNoIG91dCBmb3IgdGhlIGZvbGxvd2luZzogZXJyb3IgY29uZGl0aW9uczsgYW55IGNhbGxzIHRvIGxvdyBsZXZlbCBoYXJkd2FyZSByZWdpc3RlcnM7IGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBhbnkgb2YgdGhlIHNlY3VyaXR5IG1vZHVsZXMgaW4gdGhlIHN5c3RlbS4gSSBhbHNvIHdvdWxkIG5vdCBiZSBzdXJwcmlzZWQgdG8gc2VlIHRoaXMgY29kZSBkZWFsaW5nIHdpdGggaGFuZGxpbmcgaW50ZXJydXB0cyByZWxhdGVkIHRvIFREWCBldmVudHMsIHN1Y2ggYXMgYXR0ZXN0YXRpb24gb3IgbWVtb3J5IGZhdWx0cy4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGV4cGVjdGVkIHBsYXRmb3JtIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciB0aGUgaGFuZGxpbmcgb2YgYW55IG5lY2Vzc2FyeSBwcmUtYm9vdCByb3V0aW5lcyByZWxhdGVkIHRvIHRoZSBURFggZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdHsgVERYX01SXyhtcm93bmVyKSB8IFRTTV9NUl9GX05PSEFTSCB9LFxuIDEwMjpcdFx0eyBURFhfTVJfKG1yb3duZXJjb25maWcpIHwgVFNNX01SX0ZfTk9IQVNIIH0sXG4gMTAzOlx0fTtcbiAxMDQ6XHQjdW5kZWYgVERYX01SX1xuIDEwNTpcdFxuIDEwNjpcdHN0YXRpYyBpbnQgdGR4X21yX3JlZnJlc2goY29uc3Qgc3RydWN0IHRzbV9tZWFzdXJlbWVudHMgKnRtKVxuIDEwNzpcdHtcbiAxMDg6XHRcdHJldHVybiB0ZHhfZG9fcmVwb3J0KEtFUk5FTF9TT0NLUFRSKE5VTEwpLCBLRVJORUxfU09DS1BUUihOVUxMKSk7XG4gMTA5Olx0fVxuIDExMDpcdFxuIDExMTpcdHN0YXRpYyBpbnQgdGR4X21yX2V4dGVuZChjb25zdCBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50cyAqdG0sXG4gMTEyOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCB0c21fbWVhc3VyZW1lbnRfcmVnaXN0ZXIgKm1yLFxuIDExMzpcdFx0XHRcdCBjb25zdCB1OCAqZGF0YSlcbiAxMTQ6XHR7XG4gMTE1Olx0XHRyZXR1cm4gdGR4X2RvX2V4dGVuZChtciAtIHRtLVx1MDAzZW1ycywgZGF0YSk7XG4gMTE2Olx0fVxuIDExNzpcdFxuIDExODpcdHN0YXRpYyBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50cyB0ZHhfbWVhc3VyZW1lbnRzID0ge1xuIDExOTpcdFx0Lm1ycyA9IHRkeF9tcnMsXG4gMTIwOlx0XHQubnJfbXJzID0gQVJSQVlfU0laRSh0ZHhfbXJzKSxcbiAxMjE6XHRcdC5yZWZyZXNoID0gdGR4X21yX3JlZnJlc2gsXG4gMTIyOlx0XHQud3JpdGUgPSB0ZHhfbXJfZXh0ZW5kLFxuIDEyMzpcdH07XG4gMTI0Olx0XG4gMTI1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRkeF9tcl9pbml0KHZvaWQpXG4gMTI2Olx0e1xuIDEyNzpcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZztcbiAxMjg6XHRcdGludCByYztcbiAxMjk6XHRcbiAxMzA6XHRcdHU4ICpidWYgX19mcmVlKGtmcmVlKSA9IGt6YWxsb2MoVERYX1JFUE9SVF9MRU4sIEdGUF9LRVJORUwpO1xuIDEzMTpcdFx0aWYgKCFidWYpXG4gMTMyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIDEzMzpcdFxuIDEzNDpcdFx0dGR4X3JlcG9ydF9idWYgPSBidWY7XG4gMTM1Olx0XHRyYyA9IHRkeF9tcl9yZWZyZXNoKFx1MDAyNnRkeF9tZWFzdXJlbWVudHMpO1xuIDEzNjpcdFx0aWYgKHJjKVxuIDEzNzpcdFx0XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4gMTM4Olx0XG4gMTM5Olx0XHQvKlxuIDE0MDpcdFx0ICogQG1yX3ZhbHVlIHdhcyBpbml0aWFsaXplZCB3aXRoIHRoZSBvZmZzZXQgb25seSwgd2hpbGUgdGhlIGJhc2VcbiAxNDE6XHRcdCAqIGFkZHJlc3MgaXMgYmVpbmcgYWRkZWQgaGVyZS5cbiAxNDI6XHRcdCAqL1xuIDE0MzpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGR4X21ycyk7ICYjNDM7JiM0MztpKVxuIDE0NDpcdFx0XHQqKGxvbmcgKilcdTAwMjZ0ZHhfbXJzW2ldLm1yX3ZhbHVlICYjNDM7PSAobG9uZylidWY7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRnID0gdHNtX21yX2NyZWF0ZV9hdHRyaWJ1dGVfZ3JvdXAoXHUwMDI2dGR4X21lYXN1cmVtZW50cyk7XG4gMTQ3Olx0XHRpZiAoIUlTX0VSUihnKSlcbiAxNDg6XHRcdFx0dGR4X3JlcG9ydF9idWYgPSBub19mcmVlX3B0cihidWYpO1xuIDE0OTpcdFxuIDE1MDpcdFx0cmV0dXJuIGc7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuIDE1NDpcdHtcbiAxNTU6XHRcdHRzbV9tcl9mcmVlX2F0dHJpYnV0ZV9ncm91cChtcl9ncnApO1xuIDE1NjpcdFx0a2ZyZWUodGR4X3JlcG9ydF9idWYpO1xuIDE1NzpcdH1cbiAxNTg6XHRcbiAxNTk6XHQvKlxuIDE2MDpcdCAqIEludGVsJiMzOTtzIFNHWCBRRSBpbXBsZW1lbnRhdGlvbiBnZW5lcmFsbHkgdXNlcyBRdW90ZSBzaXplIGxlc3NcbiAxNjE6XHQgKiB0aGFuIDhLICgySyBRdW90ZSBkYXRhICYjNDM7IH41SyBvZiBjZXJ0aWZpY2F0ZSBibG9iKS5cbiAxNjI6XHQgKiBESUNFLWJhc2VkIGF0dGVzdGF0aW9uIHVzZXMgbGF5ZXJlZCBldmlkZW5jZSB0aGF0IHJlcXVpcmVzXG4gMTYzOlx0ICogbGFyZ2VyIFF1b3RlIHNpemUgKH4xMDBLKS5cbiAxNjQ6XHQgKi9cbiAxNjU6XHQjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFXHRTWl8xMjhLXG4gMTY2Olx0XG4gMTY3Olx0I2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUlx0XHQxXG4gMTY4Olx0XG4gMTY5Olx0LyogVERYIEdldFF1b3RlIHN0YXR1cyBjb2RlcyAqL1xuIDE3MDpcdCNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1NcdFx0MFxuIDE3MTpcdCNkZWZpbmUgR0VUX1FVT1RFX0lOX0ZMSUdIVFx0XHQweGZmZmZmZmZmZmZmZmZmZmZcbiAxNzI6XHRcbiAxNzM6XHQjZGVmaW5lIFREWF9RVU9URV9CVUZfTEVOKG4pXHRcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXG4gMTc0Olx0XG4gMTc1Olx0Lyogc3RydWN0IHRkeF9xdW90ZV9idWY6IEZvcm1hdCBvZiBRdW90ZSByZXF1ZXN0IGJ1ZmZlci5cbiAxNzY6XHQgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cbiAxNzc6XHQgKiBAc3RhdHVzOiBTdGF0dXMgY29kZSBvZiBRdW90ZSByZXF1ZXN0LCBmaWxsZWQgYnkgVk1NLlxuIDE3ODpcdCAqIEBpbl9sZW46IExlbmd0aCBvZiBURFJFUE9SVCwgZmlsbGVkIGJ5IFRELlxuIDE3OTpcdCAqIEBvdXRfbGVuOiBMZW5ndGggb2YgUXVvdGUgZGF0YSwgZmlsbGVkIGJ5IFZNTS5cbiAxODA6XHQgKiBAZGF0YTogUXVvdGUgZGF0YSBvbiBvdXRwdXQgb3IgVERSRVBPUlQgb24gaW5wdXQuXG4gMTgxOlx0ICpcbiAxODI6XHQgKiBNb3JlIGRldGFpbHMgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIgY2FuIGJlIGZvdW5kIGluIFREWFxuIDE4MzpcdCAqIEd1ZXN0LUhvc3QgQ29tbXVuaWNhdGlvbiBJbnRlcmZhY2UgKEdIQ0kpIGZvciBJbnRlbCBURFggMS4wLFxuIDE4NDpcdCAqIHNlY3Rpb24gdGl0bGVkIFwmIzM0O1RERy5WUC5WTUNBTExcdTAwM2NHZXRRdW90ZVx1MDAzZVwmIzM0O1xuIDE4NTpcdCAqL1xuIDE4NjpcdHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcbiAxODc6XHRcdHU2NCB2ZXJzaW9uO1xuIDE4ODpcdFx0dTY0IHN0YXR1cztcbiAxODk6XHRcdHUzMiBpbl9sZW47XG4gMTkwOlx0XHR1MzIgb3V0X2xlbjtcbiAxOTE6XHRcdHU4IGRhdGFbXTtcbiAxOTI6XHR9O1xuIDE5MzpcdFxuIDE5NDpcdC8qIFF1b3RlIGRhdGEgYnVmZmVyIGFuZCBsZW5ndGggKi9cbiAxOTU6XHRzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcbiAxOTY6XHRzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuO1xuIDE5NzpcdFxuIDE5ODpcdC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xuIDE5OTpcdHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7XG4gMjAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjc0CgkJCQkJCQlvdXRwdXQ6IDIzMgoJCQkJCQkJdGhvdWdodHM6IDExMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgVERYIEd1ZXN0IENvZGUmIzM5O3MgUmVhY2hhYmlsaXR5IGluIEZ1enppbmcgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiBgdGR4LWd1ZXN0LmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0cyBmdW5jdGlvbnMgYXJlIGNvbnRpbmdlbnQgb24gYHRkeF9ndWVzdF9pbml0KClgIHN1Y2NlZWRpbmcuIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBjaGVja3MgZm9yIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBDUFUgZmVhdHVyZS4gVGhpcyBmZWF0dXJlIGlzIG9ubHkgc2V0IGlmIHRoZSBrZXJuZWwgYm9vdHMgd2l0aGluIGFuIEludGVsIFREWCBUcnVzdCBEb21haW4sIHdoaWNoIGlzIGluZGljYXRlZCBieSBhIHNwZWNpZmljIENQVUlEIGxlYWYgY2hlY2sgZm9yICYjMzQ7SW50ZWxURFggICAgJiMzNDsgZHVyaW5nIGJvb3QsIGFuZCBpbiBgdGR4X2Vhcmx5X2luaXQoKWAuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50OiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgYmUgaXQgUUVNVSBvciBHQ0UgaW5zdGFuY2VzLCAqZG9uJiMzOTt0KiBzdXBwb3J0IG9yIGVtdWxhdGUgSW50ZWwgVERYIGhhcmR3YXJlLiBUaGlzIG1lYW5zIHRoZSByZXF1aXJlZCBDUFVJRCBsZWFmIHdvbiYjMzk7dCBiZSBwcmVzZW50LCBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCB3b24mIzM5O3QgYmUgc2V0LCBhbmQgYHRkeF9ndWVzdF9pbml0KClgIHdpbGwgZmFpbCwgcmV0dXJuaW5nIGAtRU5PREVWYC4gVGhhdCBtZWFucyB0aGUgbmV3IGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGZ1bmN0aW9uIGFuZCB0aGUgdXBkYXRlZCBxdW90ZSBidWZmZXIgYWxsb2NhdGlvbiBpbiBgdGR4LWd1ZXN0LmNgIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuCgpCYXNlZCBvbiB0aGUgY3JpdGVyaWEgb3V0bGluZWQgZm9yIGRldGVybWluaW5nIGBXb3J0aEZ1enppbmdgLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gb24gJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgdGhlIGNvZGUgY2xlYXJseSBmYWxscyBpbnRvIHRoaXMgY2F0ZWdvcnkuIFREWCByZXF1aXJlcyBzcGVjaWFsaXplZCBJbnRlbCBYZW9uIGhhcmR3YXJlIGFuZCBURFggZmlybXdhcmUvaHlwZXJ2aXNvciBzdXBwb3J0LCB3aGljaCBhcmVuJiMzOTt0IGF2YWlsYWJsZSBpbiBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoaXMgZmVhdHVyZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gdGhlIHN0YW5kYXJkIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBObyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVjZXNzYXJ5IGFzIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudCBmb3IgcnVubmluZyB0aGlzIGNvZGUgcGF0aCBpcyBvdXRzaWRlIG9mIHRoZSByZWFsbSBvZiBwb3NzaWJpbGl0aWVzIGZvciBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpcyBzb2xpZDoKKiAgIFdvcnRoRnV6emluZyA9IGZhbHNlCiogICBGb2N1c1N5bWJvbHMgPSBcWyBdCiogICBFbmFibGVDb25maWdzID0gXFsgXQoqICAgUmVhc29uaW5nID0gY29uY2lzZSBleHBsYW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSBhbmQgdXBkYXRlcyB0aGUgVERYIGd1ZXN0IGRyaXZlciAoZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jKSB0byBkeW5hbWljYWxseSBzaXplIHRoZSBxdW90ZSBidWZmZXIgYmFzZWQgb24gVERYIG1ldGFkYXRhLiBUaGlzIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBydW5uaW5nIGFzIGFuIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBsYWNrIHRoZSBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgc3VwcG9ydCByZXF1aXJlZCBmb3IgVERYLiBEdXJpbmcgYm9vdCwgdGR4X2Vhcmx5X2luaXQoKSB2ZXJpZmllcyBDUFVJRCBsZWFmIDB4MjEgZm9yIHRoZSBURFggc2lnbmF0dXJlLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNvIFg4Nl9GRUFUVVJFX1REWF9HVUVTVCBpcyBuZXZlciBzZXQuIENvbnNlcXVlbnRseSwgdGR4X2d1ZXN0X2luaXQoKSBpbW1lZGlhdGVseSBmYWlscyB3aXRoIC1FTk9ERVYgYW5kIHRoZSBkcml2ZXIgbmV2ZXIgcmVnaXN0ZXJzIG9yIGV4ZWN1dGVzLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSBhbmQgY2Fubm90IHJ1biBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIGFuZCB1cGRhdGVzIHRoZSBURFggZ3Vlc3QgZHJpdmVyIChkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMpIHRvIGR5bmFtaWNhbGx5IHNpemUgdGhlIHF1b3RlIGJ1ZmZlciBiYXNlZCBvbiBURFggbWV0YWRhdGEuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGxhY2sgdGhlIHNwZWNpYWxpemVkIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBURFguIER1cmluZyBib290LCB0ZHhfZWFybHlfaW5pdCgpIHZlcmlmaWVzIENQVUlEIGxlYWYgMHgyMSBmb3IgdGhlIFREWCBzaWduYXR1cmUsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc28gWDg2X0ZFQVRVUkVfVERYX0dVRVNUIGlzIG5ldmVyIHNldC4gQ29uc2VxdWVudGx5LCB0ZHhfZ3Vlc3RfaW5pdCgpIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGggLUVOT0RFViBhbmQgdGhlIGRyaXZlciBuZXZlciByZWdpc3RlcnMgb3IgZXhlY3V0ZXMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlIGFuZCBjYW5ub3QgcnVuIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjEzLjg3NjU4NjQ3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDg3MTMwOTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIGFuZCB1cGRhdGVzIHRoZSBURFggZ3Vlc3QgZHJpdmVyIChkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMpIHRvIGR5bmFtaWNhbGx5IHNpemUgdGhlIHF1b3RlIGJ1ZmZlciBiYXNlZCBvbiBURFggbWV0YWRhdGEuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGxhY2sgdGhlIHNwZWNpYWxpemVkIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBURFguIER1cmluZyBib290LCB0ZHhfZWFybHlfaW5pdCgpIHZlcmlmaWVzIENQVUlEIGxlYWYgMHgyMSBmb3IgdGhlIFREWCBzaWduYXR1cmUsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc28gWDg2X0ZFQVRVUkVfVERYX0dVRVNUIGlzIG5ldmVyIHNldC4gQ29uc2VxdWVudGx5LCB0ZHhfZ3Vlc3RfaW5pdCgpIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGggLUVOT0RFViBhbmQgdGhlIGRyaXZlciBuZXZlciByZWdpc3RlcnMgb3IgZXhlY3V0ZXMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlIGFuZCBjYW5ub3QgcnVuIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MTMuODc2NTkzNTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMzY0OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWExMmM2NDE2ZjRiOWNhZTE0ZDU0Njc5ZDNhMzE5MzcwZGNkZGJjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTowNDoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuaW5kZXggZjkwNGE2MzZkNDQ5Yi4uYjk4MDU4ZDdkMjQ0ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuQEAgLTE5OCw2ICsxOTgsMzAgQEAgdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XFxuIFxcbisvKipcXG4rICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcXG4rICpcXG4rICogUmVhZCB0aGUgbWF4aW11bSBzaXplIG9mIGEgVEQgUXVvdGUgZnJvbSBhIDQtYnl0ZSBURCBtZXRhZGF0YSBmaWVsZC4gVGhlIFREWFxcbisgKiBndWVzdCBkcml2ZXIgdXNlcyBpdCB0byBzaXplIHRoZSBidWZmZXIgZm9yIFF1b3Rlcy4gT2xkZXIgVERYIG1vZHVsZXMgZG8gbm90XFxuKyAqIHN1cHBvcnQgdGhpcyBmaWVsZCBhbmQgcmV0dXJuIGFuIGVycm9yLlxcbisgKlxcbisgKiBUaGUgcmVwb3J0ZWQgc2l6ZSBjb3ZlcnMgZXZlcnkgUXVvdGUgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLFxcbisgKiBpbmNsdWRpbmcgU0dYLWJhc2VkIFF1b3Rlcy5cXG4rICpcXG4rICogQSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUgcmVwb3J0ZWQgc2l6ZS5cXG4rICpcXG4rICogUmV0dXJuOiBNYXhpbXVtIFF1b3RlIHNpemUgaW4gYnl0ZXMgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlLlxcbisgKi9cXG4rdTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcXG4re1xcbitcXHR1NjQgdmFsLCByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXFx1MDAyNnZhbCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xcbitcXG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuaW5kZXggZjIwZTkxZDdhYzM1Yi4uNmYxMDZkNGIxYTU4MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG5AQCAtNTAsNiArNTAsNyBAQFxcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1xcdFxcdDB4MTExMDAwMDMwMDAwMDAxNlxcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1xcdFxcdFxcdDB4MTExMDAwMDMwMDAwMDAxN1xcbisjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkVcXHRcXHQweDkwMTAwMDAyMDAwMDAwMDdcXG4gI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTXFx0XFx0MHg5MTAwMDAwMDAwMDAwMDEwXFxuICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRURcXHQweDkxMDAwMDAwMDAwMDAwMTlcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtODMsNiArODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XFxuIFxcbiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7XFxuIFxcbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcXG4rXFxuIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpO1xcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjcyMjRhNjZiNjVkMTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuKysrIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcXG4gICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlc1xcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxcbiAgKi9cXG4tI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkVcXHRcXHRTWl8xMjhLXFxuKyNkZWZpbmUgR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkVcXHRTWl8xMjhLXFxuIFxcbiAjZGVmaW5lIEdFVF9RVU9URV9DTURfVkVSXFx0XFx0MVxcbiBcXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXFx0XFx0MFxcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcXHRcXHQweGZmZmZmZmZmZmZmZmZmZmZcXG4gXFxuLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU5cXHRcXHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcXG4rI2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVxcdFxcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXFxuIFxcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxcbiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cXG5AQCAtMTkxLDggKzE5MSw5IEBAIHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcXG4gXFx0dTggZGF0YVtdO1xcbiB9O1xcbiBcXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cXG4rLyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqL1xcbiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcXG4rc3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcXG4gXFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xcbkBAIC0yMDksOSArMjEwLDggQEAgc3RhdGljIGxvbmcgdGR4X2dldF9yZXBvcnQwKHN0cnVjdCB0ZHhfcmVwb3J0X3JlcSBfX3VzZXIgKnJlcSlcXG4gXFx0XFx0XFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVxcdTAwM2V0ZHJlcG9ydCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuK3N0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkge1xcbkBAIC0yMjIsMTIgKzIyMiwzNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuIFxcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXFxuKy8qXFxuKyAqIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCBmb3IgYSBRdW90ZS4gVGhpcyBjb3ZlcnMgYWxsIFF1b3RlXFxuKyAqIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXFxuKyAqL1xcbitzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHUzMiBxdW90ZV9zaXplID0gdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXG4rXFx0aWYgKHF1b3RlX3NpemUpXFxuK1xcdFxcdC8qIFRoZSByZXBvcnRlZCBzaXplIGRvZXMgbm90IGluY2x1ZGUgdGhlIGJ1ZmZlciBoZWFkZXIgKi9cXG4rXFx0XFx0bGVuID0gVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0LyogT2xkZXIgVERYIG1vZHVsZXMgZG9uJ3QgcmVwb3J0IHRoZSBzaXplLCB1c2UgdGhlIGRlZmF1bHQgKi9cXG4rXFx0XFx0bGVuID0gR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkU7XFxuK1xcbitcXHRyZXR1cm4gbGVuO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXFxuIHtcXG4tXFx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcXG4gXFx0dW5zaWduZWQgaW50IGNvdW50ID0gbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHZvaWQgKmFkZHI7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGlzIGZhaWxzIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBleGNlZWRzIHRoZSBidWRkeSBhbGxvY2F0b3Inc1xcbitcXHQgKiBtYXhpbXVtIG9yZGVyIChvcmRlci0xMCwgNE1CKS5cXG4rXFx0ICovXFxuIFxcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdChsZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4gXFx0aWYgKCFhZGRyKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMjg1LDcgKzMwNyw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXFxuIFxcdGlmIChkZXNjLVxcdTAwM2VpbmJsb2JfbGVuICE9IFREWF9SRVBPUlREQVRBX0xFTilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgR0VUX1FVT1RFX0JVRl9TSVpFKTtcXG4rXFx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIHF1b3RlX2RhdGFfbGVuKTtcXG4gXFxuIFxcdC8qIFVwZGF0ZSBRdW90ZSBidWZmZXIgaGVhZGVyICovXFxuIFxcdHF1b3RlX2J1Zi1cXHUwMDNldmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSO1xcbkBAIC0yOTYsNyArMzE4LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGVyciA9IHRkeF9oY2FsbF9nZXRfcXVvdGUocXVvdGVfZGF0YSwgR0VUX1FVT1RFX0JVRl9TSVpFKTtcXG4rXFx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJHZXRRdW90ZSBoeXBlcmNhbGwgZmFpbGVkLCBzdGF0dXM6JWxseFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuQEAgLTMxNSw3ICszMzcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxcbiBcXG4gXFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXFx1MDAzZW91dF9sZW4pO1xcbiBcXG4tXFx0aWYgKG91dF9sZW4gXFx1MDAzZSBURFhfUVVPVEVfTUFYX0xFTilcXG4rXFx0aWYgKFREWF9RVU9URV9CVUZfTEVOKG91dF9sZW4pIFxcdTAwM2UgcXVvdGVfZGF0YV9sZW4pXFxuIFxcdFxcdHJldHVybiAtRUZCSUc7XFxuIFxcbiBcXHRidWYgPSBrdm1lbWR1cChxdW90ZV9idWYtXFx1MDAzZWRhdGEsIG91dF9sZW4sIEdGUF9LRVJORUwpO1xcbkBAIC00MTcsNyArNDM5LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZGVpbml0X21yO1xcbiBcXG4tXFx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZigpO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgYnVmZmVyIHNpemUgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlIFRELFxcbitcXHQgKiBldmVuIGFmdGVyIGEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZS5cXG4rXFx0ICovXFxuK1xcdHF1b3RlX2RhdGFfbGVuID0gUEFHRV9BTElHTihnZXRfcXVvdGVfYnVmX3NpemUoKSk7XFxuK1xcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xcbiBcXHRpZiAoIXF1b3RlX2RhdGEpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUXVvdGUgYnVmZmVyXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtNDMxLDcgKzQ1OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZnJlZV9xdW90ZTpcXG4tXFx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XFxuK1xcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gZnJlZV9taXNjOlxcbiBcXHRtaXNjX2RlcmVnaXN0ZXIoXFx1MDAyNnRkeF9taXNjX2Rldik7XFxuIGRlaW5pdF9tcjpcXG5AQCAtNDQ0LDcgKzQ3MSw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcXG4gc3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXFxuIHtcXG4gXFx0dHNtX3JlcG9ydF91bnJlZ2lzdGVyKFxcdTAwMjZ0ZHhfdHNtX29wcyk7XFxuLVxcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEpO1xcbitcXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XFxuIFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gXFx0dGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjE1LjUwOTk3MDk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjkyMzc5MTE0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIGFuZCB1cGRhdGVzIHRoZSBURFggZ3Vlc3QgZHJpdmVyIChkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMpIHRvIGR5bmFtaWNhbGx5IHNpemUgdGhlIHF1b3RlIGJ1ZmZlciBiYXNlZCBvbiBURFggbWV0YWRhdGEuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGxhY2sgdGhlIHNwZWNpYWxpemVkIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBURFguIER1cmluZyBib290LCB0ZHhfZWFybHlfaW5pdCgpIHZlcmlmaWVzIENQVUlEIGxlYWYgMHgyMSBmb3IgdGhlIFREWCBzaWduYXR1cmUsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc28gWDg2X0ZFQVRVUkVfVERYX0dVRVNUIGlzIG5ldmVyIHNldC4gQ29uc2VxdWVudGx5LCB0ZHhfZ3Vlc3RfaW5pdCgpIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGggLUVOT0RFViBhbmQgdGhlIGRyaXZlciBuZXZlciByZWdpc3RlcnMgb3IgZXhlY3V0ZXMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlIGFuZCBjYW5ub3QgcnVuIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YTEyYzY0MTZmNGI5Y2FlMTRkNTQ2NzlkM2EzMTkzNzBkY2RkYmM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MDQ6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5pbmRleCBmOTA0YTYzNmQ0NDliLi5iOTgwNThkN2QyNDRkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5AQCAtMTk4LDYgKzE5OCwzMCBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4rLyoqXG4rICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcbisgKlxuKyAqIFJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIFREIFF1b3RlIGZyb20gYSA0LWJ5dGUgVEQgbWV0YWRhdGEgZmllbGQuIFRoZSBURFhcbisgKiBndWVzdCBkcml2ZXIgdXNlcyBpdCB0byBzaXplIHRoZSBidWZmZXIgZm9yIFF1b3Rlcy4gT2xkZXIgVERYIG1vZHVsZXMgZG8gbm90XG4rICogc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4rICpcbisgKiBUaGUgcmVwb3J0ZWQgc2l6ZSBjb3ZlcnMgZXZlcnkgUXVvdGUgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLFxuKyAqIGluY2x1ZGluZyBTR1gtYmFzZWQgUXVvdGVzLlxuKyAqXG4rICogQSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUgcmVwb3J0ZWQgc2l6ZS5cbisgKlxuKyAqIFJldHVybjogTWF4aW11bSBRdW90ZSBzaXplIGluIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZS5cbisgKi9cbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKVxuK3tcbitcdHU2NCB2YWwsIHJldDtcbitcbitcdHJldCA9IHRkZ192bV9yZChURENTX1FVT1RFX01BWF9TSVpFLCBcdTAwMjZ2YWwpO1xuK1xuK1x0cmV0dXJuIHJldCA/IDAgOiAodTMyKXZhbDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodGR4X2dldF9tYXhfcXVvdGVfc2l6ZSk7XG4rXG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjZmMTA2ZDRiMWE1ODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuQEAgLTUwLDYgKzUwLDcgQEBcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cbiAjZGVmaW5lIFREQ1NfQ09ORklHX0ZMQUdTXHRcdDB4MTExMDAwMDMwMDAwMDAxNlxuICNkZWZpbmUgVERDU19URF9DVExTXHRcdFx0MHgxMTEwMDAwMzAwMDAwMDE3XG4rI2RlZmluZSBURENTX1FVT1RFX01BWF9TSVpFXHRcdDB4OTAxMDAwMDIwMDAwMDAwN1xuICNkZWZpbmUgVERDU19OT1RJRllfRU5BQkxFU1x0XHQweDkxMDAwMDAwMDAwMDAwMTBcbiAjZGVmaW5lIFREQ1NfVE9QT0xPR1lfRU5VTV9DT05GSUdVUkVEXHQweDkxMDAwMDAwMDAwMDAwMTlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5AQCAtODMsNiArODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XG4gXG4gdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpO1xuIFxuK3UzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpO1xuK1xuIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpO1xuIHZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuaW5kZXggZDAzMDNlMzFlODE2MS4uNzIyNGE2NmI2NWQxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuKysrIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXG5AQCAtMTYyLDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuICAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXNcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxuICAqL1xuLSNkZWZpbmUgR0VUX1FVT1RFX0JVRl9TSVpFXHRcdFNaXzEyOEtcbisjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFXHRTWl8xMjhLXG4gXG4gI2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUlx0XHQxXG4gXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuICNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1NcdFx0MFxuICNkZWZpbmUgR0VUX1FVT1RFX0lOX0ZMSUdIVFx0XHQweGZmZmZmZmZmZmZmZmZmZmZcbiBcbi0jZGVmaW5lIFREWF9RVU9URV9NQVhfTEVOXHRcdChHRVRfUVVPVEVfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IHRkeF9xdW90ZV9idWYpKVxuKyNkZWZpbmUgVERYX1FVT1RFX0JVRl9MRU4obilcdFx0c3RydWN0X3NpemVfdChzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiwgZGF0YSwgbilcbiBcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxuICAqIEB2ZXJzaW9uOiBRdW90ZSBmb3JtYXQgdmVyc2lvbiwgZmlsbGVkIGJ5IFRELlxuQEAgLTE5MSw4ICsxOTEsOSBAQCBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiB7XG4gXHR1OCBkYXRhW107XG4gfTtcbiBcbi0vKiBRdW90ZSBkYXRhIGJ1ZmZlciAqL1xuKy8qIFF1b3RlIGRhdGEgYnVmZmVyIGFuZCBsZW5ndGggKi9cbiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcbitzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuO1xuIFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7XG5AQCAtMjA5LDkgKzIxMCw4IEBAIHN0YXRpYyBsb25nIHRkeF9nZXRfcmVwb3J0MChzdHJ1Y3QgdGR4X3JlcG9ydF9yZXEgX191c2VyICpyZXEpXG4gXHRcdFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVx1MDAzZXRkcmVwb3J0KSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbitzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYsIHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkge1xuQEAgLTIyMiwxMiArMjIyLDM0IEBAIHN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbiBcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXG4rLypcbisgKiBSZXR1cm4gYSBidWZmZXIgc2l6ZSBsYXJnZSBlbm91Z2ggZm9yIGEgUXVvdGUuIFRoaXMgY292ZXJzIGFsbCBRdW90ZVxuKyAqIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXG4rICovXG4rc3RhdGljIHNpemVfdCBnZXRfcXVvdGVfYnVmX3NpemUodm9pZClcbit7XG4rXHR1MzIgcXVvdGVfc2l6ZSA9IHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKTtcbitcdHNpemVfdCBsZW47XG4rXG4rXHRpZiAocXVvdGVfc2l6ZSlcbitcdFx0LyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqL1xuK1x0XHRsZW4gPSBURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKTtcbitcdGVsc2VcbitcdFx0LyogT2xkZXIgVERYIG1vZHVsZXMgZG9uJ3QgcmVwb3J0IHRoZSBzaXplLCB1c2UgdGhlIGRlZmF1bHQgKi9cbitcdFx0bGVuID0gR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkU7XG4rXG4rXHRyZXR1cm4gbGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4rXHQvKlxuK1x0ICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJ3NcbitcdCAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLlxuK1x0ICovXG4gXHRhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIWFkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTI4NSw3ICszMDcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4rXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgcXVvdGVfZGF0YV9sZW4pO1xuIFxuIFx0LyogVXBkYXRlIFF1b3RlIGJ1ZmZlciBoZWFkZXIgKi9cbiBcdHF1b3RlX2J1Zi1cdTAwM2V2ZXJzaW9uID0gR0VUX1FVT1RFX0NNRF9WRVI7XG5AQCAtMjk2LDcgKzMxOCw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xuK1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIkdldFF1b3RlIGh5cGVyY2FsbCBmYWlsZWQsIHN0YXR1czolbGx4XFxuXCIsIGVycik7XG4gXHRcdHJldHVybiAtRUlPO1xuQEAgLTMxNSw3ICszMzcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4rXHRpZiAoVERYX1FVT1RFX0JVRl9MRU4ob3V0X2xlbikgXHUwMDNlIHF1b3RlX2RhdGFfbGVuKVxuIFx0XHRyZXR1cm4gLUVGQklHO1xuIFxuIFx0YnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLVx1MDAzZWRhdGEsIG91dF9sZW4sIEdGUF9LRVJORUwpO1xuQEAgLTQxNyw3ICs0MzksMTIgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZGVpbml0X21yO1xuIFxuLVx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZigpO1xuK1x0LypcbitcdCAqIFRoZSBidWZmZXIgc2l6ZSByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVEQsXG4rXHQgKiBldmVuIGFmdGVyIGEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZS5cbitcdCAqL1xuK1x0cXVvdGVfZGF0YV9sZW4gPSBQQUdFX0FMSUdOKGdldF9xdW90ZV9idWZfc2l6ZSgpKTtcbitcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xuIFx0aWYgKCFxdW90ZV9kYXRhKSB7XG4gXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXG5cIik7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNDMxLDcgKzQ1OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX3F1b3RlOlxuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4rXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gZnJlZV9taXNjOlxuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gZGVpbml0X21yOlxuQEAgLTQ0NCw3ICs0NzEsNyBAQCBtb2R1bGVfaW5pdCh0ZHhfZ3Vlc3RfaW5pdCk7XG4gc3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXG4ge1xuIFx0dHNtX3JlcG9ydF91bnJlZ2lzdGVyKFx1MDAyNnRkeF90c21fb3BzKTtcbi1cdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEpO1xuK1x0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gXHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MTUuNTA5OTczODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTU2ODEyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcXVvdGUgc2l6ZS4gSSBzZWUgY2hhbmdlcyBpbiBgdGR4LmNgLCBhZGRpbmcgYSBmdW5jdGlvbiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCB0aGF0IGNhbGxzIGB0ZGdfdm1fcmQoKWAgd2l0aCBhIG5ldyBjb25zdGFudCBgVERDU19RVU9URV9NQVhfU0laRWAuIFRoZXJlIGFyZSBhbHNvIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgdXBkYXRlcyBkZWZpbmluZyB0aGUgY29uc3RhbnQgYW5kIGRlY2xhcmluZyB0aGUgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCB0aGUgYHRkeC1ndWVzdC5jYCBkcml2ZXIgaXMgdXNpbmcgdGhpcyBuZXcgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgc2l6ZSBhIHF1b3RlIGJ1ZmZlciBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIGNvbnRhaW5zIHNvbWUgc2l6ZSBjaGVja3MgdGhhdCB1c2UgdGhpcyBpbmZvcm1hdGlvbi5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyBjb2RlICphY3R1YWxseSogcnVuIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gSSBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1bCBoZXJlLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCBpdCdzIGEgbm8tZ28sIGV2ZW4gaWYgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbkxldCBtZSB0aGlua+KApiBXaGF0IGV4YWN0bHkgaXMgSW50ZWwgVERYPyBJIHJlY2FsbCBpdCdzIHJlbGF0ZWQgdG8gVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIHdoaWNoIGlzIGEgY29uZmlkZW50aWFsIGNvbXB1dGluZyB0ZWNobm9sb2d5LiBPa2F5LCBidXQgY2FuIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGV2ZW4gKnJ1biogVERYIGd1ZXN0cz8gSXMgdGhpcyBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBwYXRoLCBgdGR4X2d1ZXN0X2luaXRgLCBldmVyIGFjdHVhbGx5IGhpdCBpbiB0aG9zZSBlbnZpcm9ubWVudHM/IE9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyB0aGUgaW1wb3J0YW5jZSBvZiBvbmx5IGZ1enppbmcgY29kZSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGNvdWxkIGJlIGEgZGVhbGJyZWFrZXIuXG5cbkkgbmVlZCB0byBiZSB2ZXJ5IHByZWNpc2UgaGVyZS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gb25seSByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjaGFuZ2VzIGZhbGwgaW50byBjZXJ0YWluIGNhdGVnb3JpZXMuIFRoZSBrZXkgb25lIGhlcmUgaXMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiDigJMgRG9lcyBURFggZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnk/IEkgbmVlZCB0byBrbm93IGlmIHRoZSBgdGR4LWd1ZXN0YCBkcml2ZXIgaW5pdGlhbGl6ZXMgcHJvcGVybHkgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIGhvdyBgdGR4X2d1ZXN0X2luaXRgIGFjdHVhbGx5IHdvcmtzIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRyaXZlciB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBhbmQgd2hlbiB0aGF0IGNvZGUgaXMgYWN0dWFsbHkgaGl0LiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBkZWNpc2lvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MjIuNDY2NzkwMDQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5NTpcXHR9XFxuIDM5NjpcXHRcXG4gMzk3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRkeF9ndWVzdF9mb3BzID0ge1xcbiAzOTg6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDM5OTpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSB0ZHhfZ3Vlc3RfaW9jdGwsXFxuIDQwMDpcXHR9O1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdGR4X2F0dHJfZ3JvdXBzW10gPSB7XFxuIDQwMzpcXHRcXHROVUxMLCAvKiBtZWFzdXJlbWVudHMgKi9cXG4gNDA0OlxcdFxcdE5VTExcXG4gNDA1OlxcdH07XFxuIDQwNjpcXHRcXG4gNDA3OlxcdHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0ZHhfbWlzY19kZXYgPSB7XFxuIDQwODpcXHRcXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbiA0MDk6XFx0XFx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbiA0MTA6XFx0XFx0LmZvcHMgPSBcXHUwMDI2dGR4X2d1ZXN0X2ZvcHMsXFxuIDQxMTpcXHRcXHQuZ3JvdXBzID0gdGR4X2F0dHJfZ3JvdXBzLFxcbiA0MTI6XFx0fTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcXG4gNDE1OlxcdFxcdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXFxuIDQxNjpcXHRcXHR7fVxcbiA0MTc6XFx0fTtcXG4gNDE4OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB0ZHhfZ3Vlc3RfaWRzKTtcXG4gNDE5OlxcdFxcbiA0MjA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB0c21fcmVwb3J0X29wcyB0ZHhfdHNtX29wcyA9IHtcXG4gNDIxOlxcdFxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuIDQyMjpcXHRcXHQucmVwb3J0X25ldyA9IHRkeF9yZXBvcnRfbmV3LFxcbiA0MjM6XFx0XFx0LnJlcG9ydF9hdHRyX3Zpc2libGUgPSB0ZHhfcmVwb3J0X2F0dHJfdmlzaWJsZSxcXG4gNDI0OlxcdFxcdC5yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSA9IHRkeF9yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSxcXG4gNDI1OlxcdH07XFxuIDQyNjpcXHRcXG4gNDI3OlxcdHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuIDQyODpcXHR7XFxuIDQyOTpcXHRcXHRpbnQgcmV0O1xcbiA0MzA6XFx0XFxuIDQzMTpcXHRcXHRpZiAoIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcykpXFxuIDQzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0dGR4X2F0dHJfZ3JvdXBzWzBdID0gdGR4X21yX2luaXQoKTtcXG4gNDM1OlxcdFxcdGlmIChJU19FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKSlcXG4gNDM2OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHRkeF9hdHRyX2dyb3Vwc1swXSk7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnRkeF9taXNjX2Rldik7XFxuIDQzOTpcXHRcXHRpZiAocmV0KVxcbiA0NDA6XFx0XFx0XFx0Z290byBkZWluaXRfbXI7XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdC8qXFxuIDQ0MzpcXHRcXHQgKiBUaGUgYnVmZmVyIHNpemUgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlIFRELFxcbiA0NDQ6XFx0XFx0ICogZXZlbiBhZnRlciBhIHJ1bnRpbWUgVERYIG1vZHVsZSB1cGRhdGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjIyLjQ2Njg5MTIzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxMDA2NzA4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgcHJlc2VudGVkIGFzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFREWCBHdWVzdCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhlIGNoZWNrOiBgaWYgKCF4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpKSByZXR1cm4gLUVOT0RFVjtgLiBUaGlzIHN1Z2dlc3RzIGl0J3MgdmVyaWZ5aW5nIHNvbWV0aGluZyBhYm91dCB0aGUgQ1BVIGJlZm9yZSBwcm9jZWVkaW5nLiBJdCdzIHVzaW5nIGB4ODZfbWF0Y2hfY3B1KClgIHdpdGggYHRkeF9ndWVzdF9pZHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGB0ZHhfZ3Vlc3RfaWRzYCBhcmUsIHNwZWNpZmljYWxseSBob3cgdGhleSBhcmUgYmVpbmcgdXNlZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQgaXMgcmV0dXJuaW5nIGEgZGV2aWNlIG5vdCBmb3VuZCBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBndWVzdCBoYXMgbm90IHJlcG9ydGVkIGl0c2VsZiBhcyBjYXBhYmxlLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgeDg2X21hdGNoX2NwdSgpYCBmdW5jdGlvbiBpcyBjYWxsaW5nIGBYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpYC4gIEFoLCB0aGF0J3Mgd2hhdCdzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGNoZWNrIGZvciB0aGUgVERYIGd1ZXN0IGZlYXR1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXM6IHdoZXJlIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGFjdHVhbGx5ICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBmZWF0dXJlIGZsYWcgaXMgc2V0LiBJdCB3aWxsIGxpa2VseSBiZSBpbiBzb21lIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXIgZmlsZSBvciBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZ28gaHVudCB0aGF0IGRvd24gdG8gdW5kZXJzdGFuZCB3aGF0IGNyaXRlcmlhIG11c3QgYmUgbWV0IGZvciB0aGlzIGluaXRpYWxpemF0aW9uIHRvIHN1Y2NlZWQgYW5kIHdoeSB0aGlzIC1FTk9ERVYgZXJyb3IgbWlnaHQgYmUgaGFwcGVuaW5nLiBJcyB0aGlzIGEgQ1BVSUQgYml0PyBBbiBNU1IgdmFsdWU/IEdvdHRhIGZpbmQgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ2MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MzAuNTY3NTY0ODQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQxMDU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWDg2X0ZFQVRVUkVfVERYX0dVRVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMzY9dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDUtXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTE0NjpcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE0Ny1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjM5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcXHRcXHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyNDA6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcXHRcXHQoIDgqMzIrMjIpIC8qIFxcXCJ0ZHhfZ3Vlc3RcXFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yNDEtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTM0PXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMCh1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6Mzg6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM5LVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgMCwgMCwgMCwgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTQ4PXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMSh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUxLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6NTI6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUzLVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIDAsIDAsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD02Mj1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDIodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02Ni1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjY3OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02OC1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgMCwgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTc3PXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgxLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6ODI6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgzLVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTkyPXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsNCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6OTg6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk5LVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgcDQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaD04PXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FjY2VwdF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5LmgtMTAtXFx0LyogUGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5LWFjY2VwdGFuY2UgY2FsbCBnb2VzIGhlcmUgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oOjExOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpIHtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oLTEyLVxcdFxcdGlmICghdGR4X2FjY2VwdF9tZW1vcnkoc3RhcnQsIGVuZCkpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD05OT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSlcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEwMi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMDM6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMDQtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTIzPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDModW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTI3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjEyODpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEyOS1cXHRcXHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNDg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNCh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNTItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTUzOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTU0LVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTE3Mz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw1KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE3OC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxNzk6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xODAtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MjAxPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDYodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjA2LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjIwNzpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIwOC1cXHRcXHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgMCwgMCxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIyOD11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw3KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIzNC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMzU6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMzYtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYz00NDA9dm9pZCBndWVzdF9mb3JjZV9tdHJyX3N0YXRlKHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdmFyLCB1bnNpZ25lZCBpbnQgbnVtX3ZhcixcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtNDYyLVxcdCAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9YRU5QVikgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjQ2MzpcXHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTQ2NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jPTkzOD12b2lkIF9faW5pdCBzZWxlY3RfaWRsZV9yb3V0aW5lKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTk1Mi1cXHRcXHRzdGF0aWNfY2FsbF91cGRhdGUoeDg2X2lkbGUsIG13YWl0X2lkbGUpO1xcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM6OTUzOlxcdH0gZWxzZSBpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKSB7XFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTQtXFx0XFx0cHJfaW5mbyhcXFwidXNpbmcgVERYIGF3YXJlIGlkbGUgcm91dGluZVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlM9MTI5PVNZTV9DT0RFX1NUQVJUX0xPQ0FMX05PQUxJR04oaWRlbnRpdHlfbWFwcGVkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TLTIwNC1cXHRhbmRsXFx0JChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfTEE1NyksICVyMTNkXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TOjIwNTpcXHRBTFRFUk5BVElWRSBcXFwiXFxcIiwgX19zdHJpbmdpZnkob3JsICRYODZfQ1I0X01DRSwgJXIxM2QpLCBYODZfRkVBVFVSRV9URFhfR1VFU1RcXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMtMjA2LVxcdG1vdnFcXHQlcjEzLCAlY3I0XFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB0ZHhfZ3Vlc3RfaWRzW10gPSB7XFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpcXHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTYtXFx0e31cXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcXHRcXHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMzA6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcXHRcXHQoIDgqMzIrMjIpIC8qIFxcXCJ0ZHhfZ3Vlc3RcXFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjMyLjM3MTY3NzQ1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1ODYwMTc0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFREWCBFYXJseSBJbml0aWFsaXphdGlvbiBhbmQgR3Vlc3QgRGV0ZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IG9mIGB0ZHhfZWFybHlfaW5pdGAgYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIFREWCBndWVzdCBlbnZpcm9ubWVudCBpcyBpbml0aWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9tZW50IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBpdCdzIG9wZXJhdGluZyB3aXRoaW4gYSBURFggY29udGV4dC4gVGhpcyBpcyBjcnVjaWFsIGZvciB2ZXJpZnlpbmcgdGhlIGludGVncml0eSBvZiB0aGUgVERYIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgYW55IHBvdGVudGlhbCBlYXJseS1zdGFnZSB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byBrbm93ICpwcmVjaXNlbHkqIHdoYXQgdGhlIGRldGVjdGlvbiBtZWNoYW5pc21zIGFyZSwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc3VtcHRpb25zIHRoZXkgbWFrZSBhYm91dCB0aGUgaGFyZHdhcmUgb3IgZmlybXdhcmUgZW52aXJvbm1lbnQuIEFyZSB3ZSByZWx5aW5nIHNvbGVseSBvbiBDUFVJRCBmZWF0dXJlcywgbWVtb3J5IG1hcCBpbnNwZWN0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJJ20gbG9va2luZyBmb3IgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgZGVlcGVyIGludmVzdGlnYXRpb24gaW50byBURFggZ3Vlc3QgYnJpbmctdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzMwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MzQuOTU3Njk3ODgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTcwMTM4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2Vhcmx5X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTAwMj1zdGF0aWMgaW50IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMDYtXFx0ICogT25seSBoYW5kbGUgc2hhcmVkLVxcdTAwM2Vwcml2YXRlIGNvbnZlcnNpb24gaGVyZS5cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDA3OlxcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMDgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDE1PXN0YXRpYyBpbnQgdGR4X2VuY19zdGF0dXNfY2hhbmdlX2ZpbmlzaCh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbnVtcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDE5LVxcdCAqIE9ubHkgaGFuZGxlIHByaXZhdGUtXFx1MDAzZXNoYXJlZCBjb252ZXJzaW9uIGhlcmUuXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTAyMDpcXHQgKiBTZWUgdGhlIGNvbW1lbnQgaW4gdGR4X2Vhcmx5X2luaXQoKS5cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDIxLVxcdCAqL1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEyMj1zdGF0aWMgX19pbml0IHZvaWQgdGR4X2Fubm91bmNlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTM1LVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExMzY6dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTM3LXtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTU3PXN0cnVjdCB2ZV9pbmZvIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTY5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjcwOnZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTcxLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9ODk9dm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC05Mi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Vhcmx5X2luaXQodm9pZCkgeyB9O1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTk0LXN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmM9MjIyPWFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgX19pbml0IF9fbm9yZXR1cm4geDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcmVhbF9tb2RlX2RhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMtMjc4LVxcdC8qIE5lZWRlZCBiZWZvcmUgY2NfcGxhdGZvcm1faGFzKCkgY2FuIGJlIHVzZWQgZm9yIFREWCAqL1xcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYzoyNzk6XFx0dGR4X2Vhcmx5X2luaXQoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMtMjgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDozNi42MTQ3MTY5ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODkxNDQ2OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgVERYIEVhcmx5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYHRkeF9lYXJseV9pbml0YCBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSB3b3JrcyBvbiB4ODYsIGVzcGVjaWFsbHkgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIGFuZCBib290LWxldmVsIHBlcnNwZWN0aXZlLiBTbywgSSBrbm93IHRoaXMgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBURFggZW52aXJvbm1lbnQuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG93LWxldmVsIHN0dWZmIOKAkyB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3IgVERYIGNhcGFiaWxpdGllcywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgYW5kIHBlcmhhcHMgZXZlbiBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgVERYIG1vZHVsZSBpdHNlbGYuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzaWxpY29uLCB0aGUgYm9vdGxvYWRlciwgYW5kIG90aGVyIGVhcmx5LXN0YWdlIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGhhcmR3YXJlJ3MgVERYLXNwZWNpZmljIGluc3RydWN0aW9ucyBhbmQgcmVnaXN0ZXJzLiBJdCdzIGdvaW5nIHRvIGJlIGtleSB0byB2ZXJpZnkgaG93IHRoZXNlIGVhcmx5IGludGVyYWN0aW9ucyBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGV4cGVjdGF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGFuZCB3aWxsIHRyeSB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgd2l0aCBjdXJyZW50IHNlY3VyaXR5IGJlc3QgcHJhY3RpY2VzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhpcyBmdW5jdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDozOS41MDYxNjcwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdFxcdHRkeF9kdW1wX2F0dHJpYnV0ZXMoYXJncy5yZHgpO1xcbjExMzE6XFx0XFxuMTEzMjpcXHRcXHR0ZGdfdm1fcmQoVERDU19URF9DVExTLCBcXHUwMDI2Y29udHJvbHMpO1xcbjExMzM6XFx0XFx0dGR4X2R1bXBfdGRfY3Rscyhjb250cm9scyk7XFxuMTEzNDpcXHR9XFxuMTEzNTpcXHRcXG4xMTM2OlxcdHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHR1NjQgY2NfbWFzaztcXG4xMTM5OlxcdFxcdHUzMiBlYXgsIHNpZ1szXTtcXG4xMTQwOlxcdFxcbjExNDE6XFx0XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxcbjExNDQ6XFx0XFx0XFx0cmV0dXJuO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XFxuMTE0NzpcXHRcXG4xMTQ4OlxcdFxcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cXG4xMTQ5OlxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMO1xcbjExNTI6XFx0XFxuMTE1MzpcXHRcXHQvKiBDb25maWd1cmUgdGhlIFREICovXFxuMTE1NDpcXHRcXHR0ZHhfc2V0dXAoXFx1MDAyNmNjX21hc2spO1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRjY19zZXRfbWFzayhjY19tYXNrKTtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0LypcXG4xMTU5OlxcdFxcdCAqIEFsbCBiaXRzIGFib3ZlIEdQQSB3aWR0aCBhcmUgcmVzZXJ2ZWQgYW5kIGtlcm5lbCB0cmVhdHMgc2hhcmVkIGJpdFxcbjExNjA6XFx0XFx0ICogYXMgZmxhZywgbm90IGFzIHBhcnQgb2YgcGh5c2ljYWwgYWRkcmVzcy5cXG4xMTYxOlxcdFxcdCAqXFxuMTE2MjpcXHRcXHQgKiBBZGp1c3QgcGh5c2ljYWwgbWFzayB0byBvbmx5IGNvdmVyIHZhbGlkIEdQQSBiaXRzLlxcbjExNjM6XFx0XFx0ICovXFxuMTE2NDpcXHRcXHRwaHlzaWNhbF9tYXNrIFxcdTAwMjY9IGNjX21hc2sgLSAxO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHQvKlxcbjExNjc6XFx0XFx0ICogVGhlIGtlcm5lbCBtYXBwaW5nIHNob3VsZCBtYXRjaCB0aGUgVERYIG1ldGFkYXRhIGZvciB0aGUgcGFnZS5cXG4xMTY4OlxcdFxcdCAqIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoKSBjYW4gdG91Y2ggbWVtb3J5ICphZGphY2VudCogdG8gdGhhdCB3aGljaCBpc1xcbjExNjk6XFx0XFx0ICogb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgY2FuIGNhdGNoIGV2ZW4gX21vbWVudGFyeV8gbWlzbWF0Y2hlcy4gIEJhZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDozOS41MDYyNjk2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDMxNjY4MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVERYIEd1ZXN0IEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBMZXQgbWUgZGlnIGludG8gdGhpcyBgdGR4X2Vhcmx5X2luaXRgIGNvZGUgc25pcHBldC4gSSBzZWUgYSBgY3B1aWRfY291bnRgIGNhbGwgd2l0aCBgVERYX0NQVUlEX0xFQUZfSURgIGFuZCBhIGNvbXBhcmlzb24gYWdhaW5zdCBgVERYX0lERU5UYC4gUmlnaHQsIHRoYXQncyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgaGFyZHdhcmUgY29uZmlkZW50aWFsIGNvbXB1dGluZy4gQnV0LCBjYW4gUUVNVSBldmVuIGVtdWxhdGUgVERYPyBBbmQgbW9yZSBzcGVjaWZpY2FsbHksIGRvZXMgc3RhbmRhcmQgUUVNVSBvciBzb21ldGhpbmcgbGlrZSBhIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpbnN0YW5jZSAqcnVuKiBhIFREWCBndWVzdD9cblxuV2FpdCwgVERYIGRlbWFuZHMgVERYIGhhcmR3YXJlIOKAkyBTYXBwaGlyZSBSYXBpZHMgb3IgbGF0ZXIgWGVvbiwgcmlnaHQ/IFBsdXMgaG9zdCBzdXBwb3J0IGxpa2UgTUNIRUNLLCBTRUFNLCBhIFREWCBtb2R1bGUgaW4gU0VBTSBmaXJtd2FyZSwgYW5kIEtWTSBURFggcGF0Y2hlcy4gU28sIGlzIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSByZWFsbHkgY29tcGF0aWJsZSB3aXRoIHJ1bm5pbmcgVERYP1xuXG5BaCwgb2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBwcm9qZWN0J3MgaW5zdHJ1Y3Rpb25zLiBTZWN0aW9ucyAxIGFuZCAyIGFyZSBrZXkuIFwiUmVhY2hhYmxlIGNvZGVcIiBpcyB0aGUgZ2F0ZS4gRnV6emluZyBpcyAqb25seSogdXNlZnVsIGZvciBjb2RlIHRoYXQgKmV4ZWN1dGVzKiBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMuIEFuZCB0aGVuIHNlY3Rpb24gMiB0YWxrcyBhYm91dCBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIOKAkyB0aGluZ3MgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQncyBub3QgZW11bGF0ZWQuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIGEgVERYIGd1ZXN0IGVmZmVjdGl2ZWx5IFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgaW4gdGhpcyBjb250ZXh0PyBEb2VzIGl0IGZhbGwgdW5kZXIgdGhhdCBjYXRlZ29yeSwgZ2l2ZW4gdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cz9cblxuSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBiZWZvcmUgSSBwcm9jZWVkLiBMZXQncyBzZWUgaG93IHN5emthbGxlciBoYW5kbGVzIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZW52aXJvbm1lbnRzIGdlbmVyYWxseSwgYW5kIGlmIGl0ICphY3R1YWxseSogZnV6emVzIFREWC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgc3l6a2FsbGVyIGV2ZW4gY29uc2lkZXJzIFREWC4gTGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHRyZWUsIEdpdCBoaXN0b3J5LCBvciBhbnkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgYHRkeC1ndWVzdGAgY29uY2VwdC4gUGVyaGFwcyBJIGNhbiBzZWFyY2ggdGhlIHN5emthbGxlciBjb2RlYmFzZSBpdHNlbGYgZm9yIG1lbnRpb25zIG9mIFwic3l6a2FsbGVyXCIgb3IgXCJ2aXJ0L2NvY29cIiAoY29uZmlkZW50aWFsIGNvbXB1dGluZykuXG5cbkknbGwgdHJ5IGEgZmV3IHNlYXJjaCB0ZXJtcyBhbmQgbG9vayBhdCBvdGhlciBjb25maWRlbnRpYWwgY29tcHV0aW5nIGRyaXZlcnMsIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgVERYX0dVRVNUYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIGl0IGFuZCB3aGVyZSBpdCdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MDkuODIyOTUzMjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MDU5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfR1VFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz04OTI9Y29uZmlnIEJIWVZFX0dVRVNUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTkwMC1cXG5hcmNoL3g4Ni9LY29uZmlnOjkwMTpjb25maWcgSU5URUxfVERYX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy05MDItXFx0Ym9vbCBcXFwiSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgLSBHdWVzdCBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToxMS4zNzkwMTk0MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ4NTQ5MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIENvbmZsaWN0cyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IG9yIGEgcG90ZW50aWFsIGNvbmZsaWN0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgYXJjaC94ODYvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgOTAxLiBJIGtub3cgdGhhdCBhcmVhIGRlYWxzIHdpdGggYSBjb3JlIHg4NiBhcmNoaXRlY3R1cmUgZmVhdHVyZXMsIHNvIHRoYXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBkZWZpbmVkIHRoZXJlIGFuZCBpZiBhbnl0aGluZyByZWxldmFudCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gZnVuY3Rpb25hbGl0eS5cblxuVGhlbiwgSSdsbCBwaXZvdCBhbmQgY2hlY2sgYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnYC4gVGhpcyBhcmVhIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBURFggZ3Vlc3QgZHJpdmVyLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGJldHRpbmcgdGhlcmUgY291bGQgYmUgc29tZSBpbnRlcmFjdGlvbiBvciBwb3RlbnRpYWwgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBhcmNoaXRlY3R1cmUtbGV2ZWwgY29uZmlndXJhdGlvbnMgYW5kIHRoZSB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLiBIb3BlZnVsbHksIHRoaXMgY3Jvc3MtcmVmZXJlbmNlIHdpbGwgcHJvdmlkZSBzb21lIGNsYXJpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3bywgZm9jdXNpbmcgb24gYW55IHN5bWJvbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgYXQgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkyMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjE0Ljg2NDUxMzU2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFxuIDkwMTpcXHRjb25maWcgSU5URUxfVERYX0dVRVNUXFxuIDkwMjpcXHRcXHRib29sIFxcXCJJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSAtIEd1ZXN0IFN1cHBvcnRcXFwiXFxuIDkwMzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0lOVEVMXFxuIDkwNDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4gOTA1OlxcdFxcdGRlcGVuZHMgb24gRUZJX1NUVUJcXG4gOTA2OlxcdFxcdGRlcGVuZHMgb24gUEFSQVZJUlRcXG4gOTA3OlxcdFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiA5MDg6XFx0XFx0c2VsZWN0IFg4Nl9NRU1fRU5DUllQVFxcbiA5MDk6XFx0XFx0c2VsZWN0IFg4Nl9NQ0VcXG4gOTEwOlxcdFxcdHNlbGVjdCBVTkFDQ0VQVEVEX01FTU9SWVxcbiA5MTE6XFx0XFx0aGVscFxcbiA5MTI6XFx0XFx0ICBTdXBwb3J0IHJ1bm5pbmcgYXMgYSBndWVzdCB1bmRlciBJbnRlbCBURFguICBXaXRob3V0IHRoaXMgc3VwcG9ydCxcXG4gOTEzOlxcdFxcdCAgdGhlIGd1ZXN0IGtlcm5lbCBjYW4gbm90IGJvb3Qgb3IgcnVuIHVuZGVyIFREWC5cXG4gOTE0OlxcdFxcdCAgVERYIGluY2x1ZGVzIG1lbW9yeSBlbmNyeXB0aW9uIGFuZCBpbnRlZ3JpdHkgY2FwYWJpbGl0aWVzXFxuIDkxNTpcXHRcXHQgIHdoaWNoIHByb3RlY3QgdGhlIGNvbmZpZGVudGlhbGl0eSBhbmQgaW50ZWdyaXR5IG9mIGd1ZXN0XFxuIDkxNjpcXHRcXHQgIG1lbW9yeSBjb250ZW50cyBhbmQgQ1BVIHN0YXRlLiBURFggZ3Vlc3RzIGFyZSBwcm90ZWN0ZWQgZnJvbVxcbiA5MTc6XFx0XFx0ICBzb21lIGF0dGFja3MgZnJvbSB0aGUgVk1NLlxcbiA5MTg6XFx0XFxuIDkxOTpcXHRlbmRpZiAjIEhZUEVSVklTT1JfR1VFU1RcXG4gOTIwOlxcdFxcbiA5MjE6XFx0c291cmNlIFxcXCJhcmNoL3g4Ni9LY29uZmlnLmNwdVxcXCJcXG4gOTIyOlxcdFxcbiA5MjM6XFx0Y29uZmlnIEhQRVRfVElNRVJcXG4gOTI0OlxcdFxcdGRlZl9ib29sIFg4Nl82NFxcbiA5MjU6XFx0XFx0cHJvbXB0IFxcXCJIUEVUIFRpbWVyIFN1cHBvcnRcXFwiIGlmIFg4Nl8zMlxcbiA5MjY6XFx0XFx0aGVscFxcbiA5Mjc6XFx0XFx0ICBVc2UgdGhlIElBLVBDIEhQRVQgKEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyKSB0byBtYW5hZ2VcXG4gOTI4OlxcdFxcdCAgdGltZSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBQSVQgYW5kIFJUQywgaWYgYSBIUEVUIGlzXFxuIDkyOTpcXHRcXHQgIHByZXNlbnQuXFxuIDkzMDpcXHRcXHQgIEhQRVQgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiB0aW1lciByZXBsYWNpbmcgbGVnYWN5IDgyNTRzLlxcbiA5MzE6XFx0XFx0ICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QXFxuIDkzMjpcXHRcXHQgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLFxcbiA5MzM6XFx0XFx0ICBhcyBpdCBpcyBvZmYtY2hpcC4gIFRoZSBpbnRlcmZhY2UgdXNlZCBpcyBkb2N1bWVudGVkXFxuIDkzNDpcXHRcXHQgIGluIHRoZSBIUEVUIHNwZWMsIHJldmlzaW9uIDEuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjE0Ljg2NDcxMjI4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTgyOTg2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipDaGVja2luZyB0aGUgVERYIEd1ZXN0IEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSW50ZWwncyBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBndWVzdCBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGtlcm5lbCB3aWxsIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBLY29uZmlnIHN0cnVjdHVyZSwgbGlrZWx5IHdpdGggYSBtYWluIGBDT05GSUdfVERYX0dVRVNUYCBvcHRpb24gYXMgdGhlIHRvcC1sZXZlbCBjb250cm9sLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVudCBvcHRpb25zLCB0b28g4oCTIG1heWJlIHRoaW5ncyB0aGF0IGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG1lbW9yeSBlbmNyeXB0aW9uLCBhdHRlc3RhdGlvbiBzdXBwb3J0LCBvciBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgdmlydHVhbGl6YXRpb24gZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyBsaWtlIEtWTS4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIG9wdGlvbnMgZm9yIGRlYnVnIG9yIGxvZ2dpbmcsIGFuZCB3aGF0IGxldmVsIG9mIGdyYW51bGFyaXR5IHRoZXkgb2ZmZXIuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBoZXJlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBjb25maWd1cmUgYSBURFggZ3Vlc3QgcHJvcGVybHkgYW5kIHdoYXQgbGV2ZXJzIEkgY2FuIHB1bGwgdG8gb3B0aW1pemUgaXRzIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHBvc3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToyNC44NDc3MDU0MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjU3MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlREWF9HVUVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfU0VWX0dVRVNUKVxcdFxcdCs9IHNldi1ndWVzdC9cXG5kcml2ZXJzL3ZpcnQvY29jby9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19JTlRFTF9URFhfR1VFU1QpXFx0Kz0gdGR4LWd1ZXN0L1xcbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVxcdCs9IHRkeC1ob3N0L1xcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWc6MTpjb25maWcgVERYX0dVRVNUX0RSSVZFUlxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlREWCBHdWVzdCBkcml2ZXJcXFwiXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWc6MzpcXHRkZXBlbmRzIG9uIElOVEVMX1REWF9HVUVTVFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTQtXFx0c2VsZWN0IFRTTV9SRVBPUlRTXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1REWF9HVUVTVF9EUklWRVIpICs9IHRkeC1ndWVzdC5vXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB0ZHhfZ3Vlc3RfaWRzW10gPSB7XFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpcXHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTYtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjQuODk1OTY3ODA5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MDk4OTI5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgVERYIEd1ZXN0IERyaXZlciBLY29uZmlnIEVudHJ5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgVERYIEd1ZXN0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgYFREWF9HVUVTVF9EUklWRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZS4gSXQncyBhIHRyaXN0YXRlLCBzbyBpdCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBkaXNhYmxlZC4gVGhlIGRlcGVuZGVuY3kgb24gYElOVEVMX1REWF9HVUVTVGAgaXMgZXhwZWN0ZWQsIG9mIGNvdXJzZS4gV2Ugb25seSB3YW50IHRoaXMgZHJpdmVyIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBJbnRlbCBURFggZ3Vlc3QgZW52aXJvbm1lbnQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGhlcmUgaXMgdGhlIGBzZWxlY3QgVFNNX1JFUE9SVFNgLiBUaGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUsIHdoaWNoIG1lYW5zIEknbGwgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoYXQgYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgcHVsbGVkIGluLiBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIFRydXN0ZWQgU3lzdGVtIE1lbW9yeSByZXBvcnRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciBpdC4gU28gSSdsbCBwcm9iYWJseSBsb29rIGF0IGBkcml2ZXJzL3ZpcnQvY29jby90c20uY2AsIG9yIG1heWJlIHNvbWUgcmVsYXRlZCBmaWxlLCB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoYXQgYFRTTV9SRVBPUlRTYCBzeW1ib2wuIFRpbWUgdG8gc2VlIHdoYXQgdGhhdCBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToyNy42MDU4NjM3MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY3NjY2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFNNX1JFUE9SVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L2NvY28vYXJtLWNjYS1ndWVzdC9LY29uZmlnPTE9Y29uZmlnIEFSTV9DQ0FfR1VFU1RcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL2FybS1jY2EtZ3Vlc3QvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gQVJNNjRcXG5kcml2ZXJzL3ZpcnQvY29jby9hcm0tY2NhLWd1ZXN0L0tjb25maWc6NDpcXHRzZWxlY3QgVFNNX1JFUE9SVFNcXG5kcml2ZXJzL3ZpcnQvY29jby9hcm0tY2NhLWd1ZXN0L0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnPTU9Y29uZmlnIFRTTV9HVUVTVFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvS2NvbmZpZy03LVxcbmRyaXZlcnMvdmlydC9jb2NvL2d1ZXN0L0tjb25maWc6ODpjb25maWcgVFNNX1JFUE9SVFNcXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnLTktXFx0c2VsZWN0IFRTTV9HVUVTVFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfVFNNX1JFUE9SVFMpXFx0Kz0gdHNtX3JlcG9ydC5vXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGUtMy10c21fcmVwb3J0LXkgOj0gcmVwb3J0Lm9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3Nldi1ndWVzdC9LY29uZmlnPTE9Y29uZmlnIFNFVl9HVUVTVFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEFNRF9NRU1fRU5DUllQVFxcbmRyaXZlcnMvdmlydC9jb2NvL3Nldi1ndWVzdC9LY29uZmlnOjU6XFx0c2VsZWN0IFRTTV9SRVBPUlRTXFxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZz0xPWNvbmZpZyBURFhfR1VFU1RfRFJJVkVSXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gSU5URUxfVERYX0dVRVNUXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWc6NDpcXHRzZWxlY3QgVFNNX1JFUE9SVFNcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZy01LVxcdHNlbGVjdCBUU01fTUVBU1VSRU1FTlRTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjI5LjE1MjYzNzE5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDUxNTMyMjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgdGR4LWd1ZXN0LmNgIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaW4gYHRkeC1ndWVzdC5jYCwgdGhpcyBkcml2ZXIgaXMgcmVnaXN0ZXJpbmcgYSBtaXNjIGRldmljZS4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzaW5nIGB0ZHhfZ3Vlc3RfZm9wc2AgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIGEgYG1pc2NkZXZpY2VgIG5hbWVkIGBLQlVJTERfTU9ETkFNRWAgd2l0aCBkeW5hbWljIG1pbm9yIG51bWJlciDigJMgd2hpY2gsIEkgY2FuIGd1ZXNzIGlzIHByb2JhYmx5IGp1c3QgYHRkeC1ndWVzdGAsIGFuZCB0aGUgZGV2aWNlIG5vZGUgd291bGQgYmUgYC9kZXYvdGR4LWd1ZXN0YCBvciBgL2Rldi90ZHhfZ3Vlc3RgIGJhc2VkIG9uIHRoZSBuYW1lLiBJdCBhbHNvIHJlZ2lzdGVycyBpbiBzeXNmcyB1bmRlciBgL3N5cy9rZXJuZWwvY29uZmlnL3RzbS9yZXBvcnRgIGFzIGEgVFNNIHJlcG9ydHMgY29uZmlnZnMuIFRoYXQncyB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBzaWRlIG9mIHRoaW5ncy5cblxuQnV0IEknbSB3b25kZXJpbmcsIHdoYXQgdHJpZ2dlcnMgdGhpcyBkZXZpY2UgdG8gYWN0dWFsbHkgbG9hZD8gTGV0IG1lIHNlZS4gTG9va2luZyBhdCBgdGR4X2d1ZXN0X2luaXRgLCB0aGVyZSdzIGEgY2hlY2s6IGAheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKWAuIElmIHRoYXQgY2hlY2sgZmFpbHMsIHdlIGJhaWwgd2l0aCBgLUVOT0RFVmAuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoZSBzeXN0ZW0gbmVlZHMgdG8gbWF0Y2ggYSBjZXJ0YWluIENQVSBjYXBhYmlsaXR5LiBXaGF0IGlzIGB0ZHhfZ3Vlc3RfaWRzYD8gT2gsIGl0IGxvb2tzIGxpa2UgaXQncyBsaW5rZWQgdG8gYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAuXG5cblNvLCB3aGVuIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIHNldD8gQWhhLCBpdCdzIGluIGB0ZHhfZWFybHlfaW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIGBjcHVpZF9jb3VudGAgY2FsbCB3aXRoIGBURFhfQ1BVSURfTEVBRl9JRGAsIGFuZCBhIHNpZ25hdHVyZSBjaGVjayB3aXRoIGBURFhfSURFTlRgLiBJZiB0aGUgc2lnbmF0dXJlcyBtYXRjaCwgYHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKWAgaXMgY2FsbGVkLiBUaGF0IG1lYW5zIHRoYXQgdGhlIENQVSdzIGNhcGFiaWxpdGllcywgYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ1BVSUQsIGFyZSBhIGtleSBmYWN0b3IgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hhdCBgVERYX0NQVUlEX0xFQUZfSURgIGFuZCBgVERYX0lERU5UYCBhY3R1YWxseSBhcmU7IHRoZXkncmUgcHJvYmFibHkgc29tZSBzcGVjaWZpYyBDUFVJRCBsZWFmIGFuZCBzaWduYXR1cmUgdmFsdWVzIHJlbGF0ZWQgdG8gVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24pIHN1cHBvcnQuIEknbSBndWVzc2luZyB0aGVzZSBhcmUgY2hlY2tlZCAqdmVyeSogZWFybHkgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaGFzIHRoZSBwcm9wZXIgaGFyZHdhcmUgdG8gZXZlbiBjb25zaWRlciBydW5uaW5nIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNTo0My42Njc5NjM2OTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM4OTU4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVERYX0NQVUlEX0xFQUZfSURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21lbS5jPTE1PXN0YXRpYyBib29sIGVhcmx5X2lzX3RkeF9ndWVzdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21lbS5jLTI1LVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9tZW0uYzoyNjpcXHRcXHRjcHVpZF9jb3VudChURFhfQ1BVSURfTEVBRl9JRCwgMCwgXFx1MDAyNmVheCxcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmMtMjctXFx0XFx0XFx0ICAgIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYz02ND12b2lkIGVhcmx5X3RkeF9kZXRlY3Qodm9pZClcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYy02Ny1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmM6Njg6XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMtNjktXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTM2PXZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQwLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExNDE6XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQyLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oLTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaDoxMTojZGVmaW5lIFREWF9DUFVJRF9MRUFGX0lEXFx0MHgyMVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaC0xMi0jZGVmaW5lIFREWF9JREVOVFxcdFxcdFxcXCJJbnRlbFREWCAgICBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjQ1LjE3MTg2NTM1N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjc5MTIxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgSW50ZWwgVERYIERldGVjdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLiBDUFVJRCBsZWFmIDB4MjEgaXMgcmV0dXJuaW5nIFwiSW50ZWxURFggICAgXCIuIE9rYXksIHNvIFREWCBpcyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIExldCdzIGRpZyBpbnRvIGB0ZHhfc2V0dXBgLCB3aGljaCBJIGtub3cgaXMgaW4gYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYC4gSSdsbCB3YW50IHRvIHJldmlldyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzZXR1cCBvZiBURFgsIGluY2x1ZGluZyBhbnkgY2hlY2tzIG9uIHRoZSBCSU9TIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6NDguNDUwOTkwMTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODAwNjQ1MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIF9faW5pdCB0ZHhfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjUwLjIzMTA2MjAyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTk3NDY2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYHRkeF9zZXR1cGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIFREWCBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSB3b3VsZCB0aGlzIGNydWNpYWwgZnVuY3Rpb24sIGB0ZHhfc2V0dXBgLCByZXNpZGU/XCIgR2l2ZW4gdGhlIGNvbnRleHQg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSBhbmQgdGhlIHg4NiBhcmNoaXRlY3R1cmUg4oCTIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG9idmlvdXM6IGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoYXQgcGF0aCAqc2NyZWFtcyogcmVsZXZhbnQgY29kZS4gSXQncyBhbG1vc3QgYSBnaXZlbiB0aGF0IGB0ZHhfc2V0dXBgIHdpbGwgYmUgZGVmaW5lZCwgb3IgYXQgbGVhc3QgY2FsbGVkLCB3aXRoaW4gdGhhdCBmaWxlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiB1bmVhcnRoIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjU2LjgyODUzMTI5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MjkwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2NvY28vdGR4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTM0MD1zdGF0aWMgdm9pZCByZWR1Y2VfdW5uZWNlc3NhcnlfdmUodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTM1My1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzozNTQ6c3RhdGljIHZvaWQgdGR4X3NldHVwKHU2NCAqY2NfbWFzaylcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0zNTUte1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEzNj12b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE1My1cXHQvKiBDb25maWd1cmUgdGhlIFREICovXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTE1NDpcXHR0ZHhfc2V0dXAoXFx1MDAyNmNjX21hc2spO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjU2Ljg3NDQ2NjIxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzAyOTI1ODY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBURFggU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cCBzZXF1ZW5jZSBmb3IgVERYIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gYHRkeF9zZXR1cGAgd2l0aGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVERYIGluaXRpYWxpemF0aW9uIGxvZ2ljIHNob3VsZCByZXNpZGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGNhbGxzIHRoYXQgZXN0YWJsaXNoIHRoZSBURFggY29udGV4dCwgY29uZmlndXJlIHRoZSBtZW1vcnkgbWFwIGZvciB0aGUgZ3Vlc3QsIGFuZCBzZXQgdXAgYW55IG5lY2Vzc2FyeSBzdHJ1Y3R1cmVzIGZvciBzZWN1cmUgZ3Vlc3Qgb3BlcmF0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIFREWCBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBoYW5kbGVzIHRoZSBURFggZ3Vlc3Qtc3BlY2lmaWMgbWVtb3J5IG1hcCBhbmQgcHJvdGVjdGlvbiBrZXlzLCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBjb3JlIGtlcm5lbCBib290IHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjoxMy45MDM3Mjg3NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU0OlxcdHN0YXRpYyB2b2lkIHRkeF9zZXR1cCh1NjQgKmNjX21hc2spXFxuIDM1NTpcXHR7XFxuIDM1NjpcXHRcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG4gMzU3OlxcdFxcdHVuc2lnbmVkIGludCBncGFfd2lkdGg7XFxuIDM1ODpcXHRcXHR1NjQgdGRfYXR0cjtcXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0LypcXG4gMzYxOlxcdFxcdCAqIFRESU5GTyBURFggbW9kdWxlIGNhbGwgaXMgdXNlZCB0byBnZXQgdGhlIFREIGV4ZWN1dGlvbiBlbnZpcm9ubWVudFxcbiAzNjI6XFx0XFx0ICogaW5mb3JtYXRpb24gbGlrZSBHUEEgd2lkdGgsIG51bWJlciBvZiBhdmFpbGFibGUgdmNwdXMsIGRlYnVnIG1vZGVcXG4gMzYzOlxcdFxcdCAqIGluZm9ybWF0aW9uLCBldGMuIE1vcmUgZGV0YWlscyBhYm91dCB0aGUgQUJJIGNhbiBiZSBmb3VuZCBpbiBURFhcXG4gMzY0OlxcdFxcdCAqIEd1ZXN0LUhvc3QtQ29tbXVuaWNhdGlvbiBJbnRlcmZhY2UgKEdIQ0kpLCBzZWN0aW9uIDIuNC4yIFREQ0FMTFxcbiAzNjU6XFx0XFx0ICogW1RERy5WUC5JTkZPXS5cXG4gMzY2OlxcdFxcdCAqL1xcbiAzNjc6XFx0XFx0dGRjYWxsKFRER19WUF9JTkZPLCBcXHUwMDI2YXJncyk7XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdC8qXFxuIDM3MDpcXHRcXHQgKiBUaGUgaGlnaGVzdCBiaXQgb2YgYSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBcXFwic2hhcmluZ1xcXCIgYml0LlxcbiAzNzE6XFx0XFx0ICogU2V0IGl0IGZvciBzaGFyZWQgcGFnZXMgYW5kIGNsZWFyIGl0IGZvciBwcml2YXRlIHBhZ2VzLlxcbiAzNzI6XFx0XFx0ICpcXG4gMzczOlxcdFxcdCAqIFRoZSBHUEEgd2lkdGggdGhhdCBjb21lcyBvdXQgb2YgdGhpcyBjYWxsIGlzIGNyaXRpY2FsLiBURFggZ3Vlc3RzXFxuIDM3NDpcXHRcXHQgKiBjYW4gbm90IG1lYW5pbmdmdWxseSBydW4gd2l0aG91dCBpdC5cXG4gMzc1OlxcdFxcdCAqL1xcbiAzNzY6XFx0XFx0Z3BhX3dpZHRoID0gYXJncy5yY3ggXFx1MDAyNiBHRU5NQVNLKDUsIDApO1xcbiAzNzc6XFx0XFx0KmNjX21hc2sgPSBCSVRfVUxMKGdwYV93aWR0aCAtIDEpO1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHR0ZF9hdHRyID0gYXJncy5yZHg7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdC8qIEtlcm5lbCBkb2VzIG5vdCB1c2UgTk9USUZZX0VOQUJMRVMgYW5kIGRvZXMgbm90IG5lZWQgcmFuZG9tICNWRXMgKi9cXG4gMzgyOlxcdFxcdHRkZ192bV93cihURENTX05PVElGWV9FTkFCTEVTLCAwLCAtMVVMTCk7XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdGRpc2FibGVfc2VwdF92ZSh0ZF9hdHRyKTtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0cmVkdWNlX3VubmVjZXNzYXJ5X3ZlKCk7XFxuIDM4NzpcXHR9XFxuIDM4ODpcXHRcXG4gMzg5OlxcdC8qXFxuIDM5MDpcXHQgKiBUaGUgVERYIG1vZHVsZSBzcGVjIHN0YXRlcyB0aGF0ICNWRSBtYXkgYmUgaW5qZWN0ZWQgZm9yIGEgbGltaXRlZCBzZXQgb2ZcXG4gMzkxOlxcdCAqIHJlYXNvbnM6XFxuIDM5MjpcXHQgKlxcbiAzOTM6XFx0ICogIC0gRW11bGF0aW9uIG9mIHRoZSBhcmNoaXRlY3R1cmFsICNWRSBpbmplY3Rpb24gb24gRVBUIHZpb2xhdGlvbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6MTMuOTAzODI1NTU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MjgwNzg2Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggUmVhY2hhYmlsaXR5IGluIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHRkY2FsbChUREdfVlBfSU5GTywgXHUwMDI2YXJncyk7YCBjYWxsIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIEl0J3MgZXhlY3V0aW5nIHRoZSBgdGRjYWxsYCBpbnN0cnVjdGlvbiDigJMgdGhlIG9uZSB0aGF0J3MgdHlwaWNhbGx5IGAweDBmIDB4MDEgMHhjY2Agb3Igc2ltaWxhci4gIE9uIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgVk0sIHdpdGhvdXQgSW50ZWwgVERYIGhhcmR3YXJlLCB0aGlzIHdpbGwgbGlrZWx5IGNhdXNlIGEgI1VEIG9yICNWRSwgYmFzaWNhbGx5IGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGRvZXMgYSBzdGFuZGFyZCBRRU1VIC8gR0NFIGV2ZW4gKnJ1biogSW50ZWwgVERYPyAgQWJzb2x1dGVseSBub3QhIFREWCBuZWVkcyBzcGVjaWZpYyBJbnRlbCA0dGggR2VuIG9yIG5ld2VyIFhlb24gc2VydmVyIENQVXMgd2l0aCBoYXJkd2FyZSBURFggZW5hYmxlZCBpbiB0aGUgQklPUywgYW5kIFREWCBob3N0IHN1cHBvcnQsIHJpZ2h0PyBTdGFuZGFyZCBRRU1VIG9yIEdDRSBWTXMgYXJlICpub3QqIHJ1bm5pbmcgYXMgVERYIGd1ZXN0cy5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBldmVuIGNvbnNpZGVyIFREWCBndWVzdHMgaW4gaXRzIHJlYWNoYWJpbGl0eSBhbmFseXNpcz8gIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgc3l6a2FsbGVyIGRlY2lkZXMgd2hhdCdzIHdvcnRoIGZ1enppbmcuXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGNyaXRlcmlhIGluIGRldGFpbCBhbmQgcmV2aWV3IHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LlxuXG5UaGUgZ29hbCBpcyB0byBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGJ1Z3MsIGFuZCBuZXcgYXNzZXJ0aW9ucyBjYXVzZWQgYnkgdGhlIHBhdGNoLlxuXG4qICAgKipSZWFjaGFiaWxpdHkgaXMga2V5OioqIFN5emthbGxlciBjYW4gb25seSBmaW5kIGJ1Z3MgaW4gY29kZSB0aGF0IGFjdHVhbGx5IHJ1bnMgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBpdCB1c2VzIChHQ0Ugb3IgUUVNVSwgbGV2ZXJhZ2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIHN0cnVjdHVyYWxseSwgd2UgZG9uJ3QgZnV6eiBpdC5cblxuKiAgICoqTmVnYXRpdmUgY3JpdGVyaWE6KiogV2Ugc2F5IFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgdGhlIGNvZGUgZmFsbHMgaW50byBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzOlxuICAgICogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzIChkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZXRjLikuXG4gICAgKiAgIFVzZXItc3BhY2UgdGhpbmdzIHRoYXQgZG9uJ3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuXG4gICAgKiAgIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuXG4gICAgKiAgIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciB0aGUgY29kZS5cbiAgICAqICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogU3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgcmVhbCBoYXJkd2FyZS5cblxuSG9sZCBvbiwgdGhhdCBsYXN0IG9uZSBpcyB0aGUgY3J1Y2lhbCBiaXQuIFRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5IGhhcyBtZSB0aGlua2luZy4gSXMgYSBURFggZ3Vlc3QgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGVcIj8gT3IsIGlzIGl0IHJlYWNoYWJsZSBvciB1bnJlYWNoYWJsZT8gV2hhdCdzIHRoZSB3b3JkaW5nPyBUaGUgZXhhbXBsZSBpcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgc3VjaCB0aGF0IGRlbWFuZCBwaHlzaWNhbCBjYXJkcy4gIERvZXMgdGhpcyBleHRlbmQgdG8gY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLCBURFgpPyBHQ0UgaGFzIEMzIG1hY2hpbmVzIChJbnRlbCA0dGggR2VuIFhlb24pIHRoYXQgcHJvdmlkZSBDb25maWRlbnRpYWwgVk1zIHVzaW5nIEludGVsIFREWCwgc28gdGhleSBjbGVhcmx5IHN1cHBvcnQgVERYLiBCdXQsIGlzIHRoYXQgYSBcInN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50XCI/ICBJIG1lYW4sIHRoZSBkZWZpbml0aW9uIHN0YXRlcyBcInN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcClcIi4gRG9lcyBzeXprYWxsZXIgd29yayB3aXRoIHRoaXMgc3RhbmRhcmQgZW52aXJvbm1lbnQ/XG5cblN5emthbGxlciBydW5zIHN0YW5kYXJkIFFFTVUgKGxpa2UgYHFlbXUtc3lzdGVtLXg4Nl82NCAtZW5hYmxlLWt2bSAuLi5gKSBvciBzdGFuZGFyZCBHQ0UgaW5zdGFuY2VzIChgZTItc3RhbmRhcmQtNGAsIGV0Yy4pLiBTbywgdGhlIGNvcmUgcXVlc3Rpb24gYmVjb21lczogZG9lcyB0aGUgZ3Vlc3QgKmhhdmUqIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGluIHRoZXNlIHNldHVwcz8gTk8sIGFic29sdXRlbHkgbm90ISBXaGVuIGJvb3RpbmcgYSAqc3RhbmRhcmQqIFFFTVUgb3IgR0NFIFZNLCBgY3B1aWRfY291bnQoMHgyMSwgMClgICpkb2Vzbid0KiByZXR1cm4gXCJJbnRlbFREWCBcIi5cblxuVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGB0ZHgtZ3Vlc3RgIGlzIG5ldmVyIGluaXRpYWxpemVkISBgL2Rldi90ZHgtZ3Vlc3RgIGlzIG5ldmVyIGNyZWF0ZWQuICBgdGR4X3RzbV9vcHNgIGlzIG5ldmVyIHJlZ2lzdGVyZWQuICBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyAqbmV2ZXIqIGNhbGxlZC5cblxuV2FpdCBhIHNlY29uZC4gTGV0J3MgcmVhbGx5IHNvbGlkaWZ5IHRoaXMuIENhbiBRRU1VIGVtdWxhdGUgVERYPyBObywgdGhhdCdzIGltcG9zc2libGUuIFREWCByZXF1aXJlcyBJbnRlbCBoYXJkd2FyZSB3aXRoIE1DSEVDSy9TRUFNIGZpcm13YXJlLiAgV2hhdCBhYm91dCBUU00gcmVwb3J0cz8gTmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9yZXBvcnQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjMyLjE4NDYxNTA5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9yZXBvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKiBDb3B5cmlnaHQoYykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHNtLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J3c2VtLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbmZpZ2ZzLmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdHN0YXRpYyBzdHJ1Y3QgdHNtX3Byb3ZpZGVyIHtcXG4gIDE2OlxcdFxcdGNvbnN0IHN0cnVjdCB0c21fcmVwb3J0X29wcyAqb3BzO1xcbiAgMTc6XFx0XFx0dm9pZCAqZGF0YTtcXG4gIDE4OlxcdFxcdGF0b21pY190IGNvdW50O1xcbiAgMTk6XFx0fSBwcm92aWRlcjtcXG4gIDIwOlxcdHN0YXRpYyBERUNMQVJFX1JXU0VNKHRzbV9yd3NlbSk7XFxuICAyMTpcXHRcXG4gIDIyOlxcdC8qKlxcbiAgMjM6XFx0ICogRE9DOiBUcnVzdGVkIFNlY3VyaXR5IE1vZHVsZSAoVFNNKSBBdHRlc3RhdGlvbiBSZXBvcnQgSW50ZXJmYWNlXFxuICAyNDpcXHQgKlxcbiAgMjU6XFx0ICogVGhlIFRTTSByZXBvcnQgaW50ZXJmYWNlIGlzIGEgY29tbW9uIHByb3ZpZGVyIG9mIGJsb2JzIHRoYXQgZmFjaWxpdGF0ZVxcbiAgMjY6XFx0ICogYXR0ZXN0YXRpb24gb2YgYSBUVk0gKGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZ3Vlc3QpIGJ5IGFuIGF0dGVzdGF0aW9uXFxuICAyNzpcXHQgKiBzZXJ2aWNlLiBBIFRTTSByZXBvcnQgY29tYmluZXMgYSB1c2VyLWRlZmluZWQgYmxvYiAobGlrZWx5IGEgcHVibGljLWtleSB3aXRoXFxuICAyODpcXHQgKiBhIG5vbmNlIGZvciBhIGtleS1leGNoYW5nZSBwcm90b2NvbCkgd2l0aCBhIHNpZ25lZCBhdHRlc3RhdGlvbiByZXBvcnQuIFRoYXRcXG4gIDI5OlxcdCAqIGNvbWJpbmVkIGJsb2IgaXMgdGhlbiB1c2VkIHRvIG9idGFpbiBzZWNyZXRzIHByb3ZpZGVkIGJ5IGFuIGFnZW50IHRoYXQgY2FuXFxuICAzMDpcXHQgKiB2YWxpZGF0ZSB0aGUgYXR0ZXN0YXRpb24gcmVwb3J0LiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGludGVyZmFjZSBpc1xcbiAgMzE6XFx0ICogaW52b2tlZCBpbmZyZXF1ZW50bHksIGhvd2V2ZXIgY29uZmlnZnMgYWxsb3dzIGZvciBtdWx0aXBsZSBhZ2VudHMgdG9cXG4gIDMyOlxcdCAqIG93biB0aGVpciBvd24gcmVwb3J0IGdlbmVyYXRpb24gaW5zdGFuY2VzIHRvIGdlbmVyYXRlIHJlcG9ydHMgYXNcXG4gIDMzOlxcdCAqIG9mdGVuIGFzIG5lZWRlZC5cXG4gIDM0OlxcdCAqXFxuICAzNTpcXHQgKiBUaGUgYXR0ZXN0YXRpb24gcmVwb3J0IGZvcm1hdCBpcyBUU00gcHJvdmlkZXIgc3BlY2lmaWMsIHdoZW4gLyBpZiBhIHN0YW5kYXJkXFxuICAzNjpcXHQgKiBtYXRlcmlhbGl6ZXMgdGhhdCBjYW4gYmUgcHVibGlzaGVkIGluc3RlYWQgb2YgdGhlIHZlbmRvciBsYXlvdXQuIFVudGlsIHRoZW5cXG4gIDM3OlxcdCAqIHRoZSAncHJvdmlkZXInIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCBvZiAnb3V0YmxvYicsIGFuZCBvcHRpb25hbGx5XFxuICAzODpcXHQgKiAnYXV4YmxvYicgYW5kICdtYW5pZmVzdGJsb2InLlxcbiAgMzk6XFx0ICovXFxuICA0MDpcXHRcXG4gIDQxOlxcdHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlIHtcXG4gIDQyOlxcdFxcdHN0cnVjdCB0c21fcmVwb3J0IHJlcG9ydDtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGxvbmcgd3JpdGVfZ2VuZXJhdGlvbjtcXG4gIDQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVhZF9nZW5lcmF0aW9uO1xcbiAgNDU6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtIGNmZztcXG4gIDQ2OlxcdH07XFxuICA0NzpcXHRcXG4gIDQ4OlxcdGVudW0gdHNtX2RhdGFfc2VsZWN0IHtcXG4gIDQ5OlxcdFxcdFRTTV9SRVBPUlQsXFxuICA1MDpcXHRcXHRUU01fQ0VSVFMsXFxuICA1MTpcXHRcXHRUU01fTUFOSUZFU1QsXFxuICA1MjpcXHR9O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgc3RydWN0IHRzbV9yZXBvcnQgKnRvX3RzbV9yZXBvcnQoc3RydWN0IGNvbmZpZ19pdGVtICpjZmcpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgdHNtX3JlcG9ydF9zdGF0ZSAqc3RhdGUgPVxcbiAgNTc6XFx0XFx0XFx0Y29udGFpbmVyX29mKGNmZywgc3RydWN0IHRzbV9yZXBvcnRfc3RhdGUsIGNmZyk7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdHJldHVybiBcXHUwMDI2c3RhdGUtXFx1MDAzZXJlcG9ydDtcXG4gIDYwOlxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0c3RhdGljIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0KVxcbiAgNjM6XFx0e1xcbiAgNjQ6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihyZXBvcnQsIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlLCByZXBvcnQpO1xcbiAgNjU6XFx0fVxcbiAgNjY6XFx0XFxuICA2NzpcXHRzdGF0aWMgaW50IHRyeV9hZHZhbmNlX3dyaXRlX2dlbmVyYXRpb24oc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydClcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHJlcG9ydCk7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNnRzbV9yd3NlbSk7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdC8qXFxuICA3NDpcXHRcXHQgKiBNYWxpY2lvdXMgb3IgYnJva2VuIHVzZXJzcGFjZSBoYXMgd3JpdHRlbiBlbm91Z2ggdGltZXMgZm9yXFxuICA3NTpcXHRcXHQgKiByZWFkX2dlbmVyYXRpb24gPT0gd3JpdGVfZ2VuZXJhdGlvbiBieSBtb2R1bGFyIGFyaXRobWV0aWMgd2l0aG91dCBhblxcbiAgNzY6XFx0XFx0ICogaW50ZXJpbSByZWFkLiBTdG9wIGFjY2VwdGluZyB1cGRhdGVzIHVudGlsIHRoZSBjdXJyZW50IHJlcG9ydFxcbiAgNzc6XFx0XFx0ICogY29uZmlndXJhdGlvbiBpcyByZWFkLlxcbiAgNzg6XFx0XFx0ICovXFxuICA3OTpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXdyaXRlX2dlbmVyYXRpb24gPT0gc3RhdGUtXFx1MDAzZXJlYWRfZ2VuZXJhdGlvbiAtIDEpXFxuICA4MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAgODE6XFx0XFx0c3RhdGUtXFx1MDAzZXdyaXRlX2dlbmVyYXRpb24rKztcXG4gIDgyOlxcdFxcdHJldHVybiAwO1xcbiAgODM6XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgc3NpemVfdCB0c21fcmVwb3J0X3ByaXZsZXZlbF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNmZyxcXG4gIDg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0c3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCA9IHRvX3RzbV9yZXBvcnQoY2ZnKTtcXG4gIDg5OlxcdFxcdHVuc2lnbmVkIGludCB2YWw7XFxuICA5MDpcXHRcXHRpbnQgcmM7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHJjID0ga3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZ2YWwpO1xcbiAgOTM6XFx0XFx0aWYgKHJjKVxcbiAgOTQ6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnRzbV9yd3NlbSk7XFxuICA5NzpcXHRcXHRpZiAoIXByb3ZpZGVyLm9wcylcXG4gIDk4OlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjMyLjE4NDcwNzYwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjA3MzQ1OTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipURFggUmVhY2hhYmlsaXR5IEFuYWx5c2lzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgY29kZSByZWxhdGVkIHRvIGB0c21fcmVwb3J0X29wc2AgaXMgZXZlbiByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggYHRzbV9yZXBvcnRfcmVnaXN0ZXJgIGluIGB0ZHhfdHNtX29wc2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2Agb3IgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQgaW4gdGhlIHRhcmdldCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgY29kZSBnb3QgdHJpYWdlZCBpbW1lZGlhdGVseSBtYWtlcyBtZSBzdXNwZWN0IHRoZXJlJ3MgYSByZWFzb24sIGFuZCBJIG5lZWQgdG8gYmUgZGlsaWdlbnQuXG5cbk15IG1pbmQgcXVpY2tseSBqdW1wcyB0byBjaGVja2luZyBzeXprYWxsZXIncyBkZXNjcmlwdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgcmVtaW5kIG1lIG9mIHNvbWUgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIHRvb2xzIEkgKnNob3VsZCogdXNlIC0gYXZvaWRpbmcgdGhvc2Ugd2hpY2ggY2FuJ3QgaGFuZGxlIHN5emxhbmcgZGVzY3JpcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgcmlnaHQgdG9vbHMgLSBubyBgcmVhZC1zeXotc3BlY2Agb3IgYHN5ei1ncmVwcGVyYCBoZXJlLCBJIG5lZWQgdG8gdXNlIHRoZSBhdmFpbGFibGUgdG9vbHMsIHdoaWNoIGFyZSBgZ3JlcHBlcmAsIGByZWFkLWZpbGVgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBhbmQgYHNldC1yZXN1bHRzYC5cblxuSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5OiBpcyB0aGUgY29kZSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgaW5zdHJ1Y3Rpb25zIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0IGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgb24gZXhlY3V0YWJsZSBjb2RlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBVbnJlYWNoYWJsZSBjb2RlIGlzIGEgbm9uLXN0YXJ0ZXIuXG5cblwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgaXMgdGhlIGtleS4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmluZyBwaHlzaWNhbCBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIFREWC4gSXMgVERYIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZT9cblxuSSByZWNhbGwgdGhhdCBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAoNHRoIGdlbiBYZW9uIFNjYWxhYmxlIG9yIG5ld2VyKSBhbmQgc3BlY2lmaWMgQklPUyBhbmQgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9ucy4gQ3J1Y2lhbGx5LCBRRU1VICpjYW5ub3QqIGVtdWxhdGUgVERYLiBZb3UgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZS4gU3l6a2FsbGVyIHJ1bnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG9yIEdvb2dsZSdzIGVxdWl2YWxlbnQgbm9uLWNvbmZpZGVudGlhbCBpbnN0YW5jZXMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJvaWxzIGRvd24gdG86IEluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBsaWtlIHN5emthbGxlciB1c2VzLCBpcyBgdGR4X2d1ZXN0X2luaXRgIGV2ZXIgcmVhY2hlZD8gSSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBhZ2FpbiwgcmUtZW1waGFzaXppbmcgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGU6IEkgaGF2ZSB0byBiZSBzdXJlIHRoZSBjb2RlIGV4ZWN1dGVzIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudC5cblxuVGhlIG5leHQgdGhvdWdodCBpcywgXCJXYWl0LCBkb2VzIEdDRSBzdXBwb3J0IFREWD9cIiBHQ0UgKmRvZXMqIG9mZmVyIENvbmZpZGVudGlhbCBWTXMgd2l0aCBURFggb24gY2VydGFpbiBpbnN0YW5jZSB0eXBlcy4gQnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGFib3V0ICpzdGFuZGFyZCogdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTdGFuZGFyZCBHQ0UgaW5zdGFuY2VzIGRvbid0IHJ1biBpbiBURFggZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgYWxzbyBkb2Vzbid0IHJ1biBpbnNpZGUgQ29uZmlkZW50aWFsIFZNcy4gSXQgb3BlcmF0ZXMgaW4gdGhlIGRlZmF1bHQsIG5vbi1jb25maWRlbnRpYWwgZW52aXJvbm1lbnRzLlxuXG5Pa2F5LCBsZXQncyBleGFtaW5lIHRoZSBjb2RlLiBJbiBgdGR4X2Vhcmx5X2luaXQoKWAsIHRoZXJlJ3MgYSBDUFVJRCBjaGVjay4gVW5sZXNzIHdlJ3JlIG9uIGFjdHVhbCBURFggaGFyZHdhcmUsIHRoZSBzaWduYXR1cmUgY2hlY2sgZmFpbHMsIGFuZCBgdGR4X2Vhcmx5X2luaXRgIHJldHVybnMuIFRoaXMgcmVzdWx0cyBpbiB0aGUgZmxhZyBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBub3QgYmVpbmcgc2V0LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuXG5cblRoZW4sIHRoZSBjaGVjayBpbiBgdGR4X2d1ZXN0X2luaXQoKWAgZmFpbHMgYmVjYXVzZSB0aGUgZmVhdHVyZSBpc24ndCBzZXQuIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYCByZXR1cm5zIGZhbHNlLCBhbmQgYHRkeF9ndWVzdF9pbml0KClgIGltbWVkaWF0ZWx5IHJldHVybnMgYW4gZXJyb3IuIFRoaXMgbWVhbnMgdGhhdCBhbGwgdGhlIHN1YnNlcXVlbnQgY29kZSBwYXRocyBpbiBgdGR4LWd1ZXN0LmNgIHJlbGF0ZWQgdG8gcXVvdGUgbWFuYWdlbWVudCwgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgYW5kIFRTTSBvcHMgKm5ldmVyKiBnZXQgZXhlY3V0ZWQuXG5cbkluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AsIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGlzIGludHJvZHVjZWQsIHdoaWNoIGNhbGxzIGB0ZGdfdm1fcmQoKWAuIFRoYXQgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgVERDQUxMYCBpbnN0cnVjdGlvbi4gQSBgVERDQUxMYCB3aWxsIHRyaWdnZXIgYSAjVUQgZmF1bHQgb24gYSBDUFUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgVERYLiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyBvbmx5IGNhbGxlZCBpbiBgZ2V0X3F1b3RlX2J1Zl9zaXplKClgLiBCZWNhdXNlIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGlzbid0IHJlYWNoZWQsIGl0IG1lYW5zIFREQ0FMTCBpcyBub3QgY2FsbGVkLiBUaGlzIGNvZGUgaXMgKnVucmVhY2hhYmxlKi5cblxuVGhlIGJvdHRvbSBsaW5lIGlzOiB0aGUgY29kZSBpcyBub3QgcmVhY2hhYmxlLiBJIG5vdyBuZWVkIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYC4gSWYgbm8gb3RoZXIgZnVuY3Rpb25zIGNhbGwgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKWAsIHRoZW4gdGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlLCBhbmQgbm8gZnV6emluZyBpcyBuZWNlc3NhcnkuIEknbGwgdXNlIGBncmVwcGVyYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjo1NC4yNTgxNzA1MTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDk0OTkxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2dldF9tYXhfcXVvdGVfc2l6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xOTk9RVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMDEtLyoqXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjAyOiAqIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSAtIEdldCB0aGUgbWF4aW11bSBURCBRdW90ZSBzaXplXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjAzLSAqXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMTQtICovXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjE1OnUzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjE2LXtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIyMi19XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjIzOkVYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIyNC1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTg0PXU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC04NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo4Njp1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC04Ny1cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz0yMjk9c3RhdGljIHNpemVfdCBnZXRfcXVvdGVfYnVmX3NpemUodm9pZClcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtMjMwLXtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6MjMxOlxcdHUzMiBxdW90ZV9zaXplID0gdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpO1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy0yMzItXFx0c2l6ZV90IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6NTUuNzY3Njc1MjgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzNDQ4NjcxNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBHdWVzdCBDb2RlIFJlYWNoYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgVERYIGd1ZXN0IGNvZGUgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgbGlrZSBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZWAsIGlzIHJlYWNoYWJsZSBieSBzeXprYWxsZXIuIFRoZSBpbml0aWFsIGNvZGUgYW5hbHlzaXMgc2hvd3MgdGhhdCBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZWAgaXMgb25seSBjYWxsZWQgYnkgYGdldF9xdW90ZV9idWZfc2l6ZSgpYCwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCB3aXRoaW4gYHRkeF9ndWVzdF9pbml0KClgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0aCBpcyBldmVyIHRha2VuIHVuZGVyIHN0YW5kYXJkIHN5emthbGxlciBmdXp6aW5nIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIHN5emthbGxlciBndWlkZWxpbmVzIG9uIHJlYWNoYWJpbGl0eS4gVGhlIGd1aWRlbGluZXMgZW1waGFzaXplIHJlYWNoYWJpbGl0eSBhcyB0aGUgcHJpbWFyeSBmYWN0b3IuIFRoZSBnb2FsIGlzIHRvIGRpc2NvdmVyIGJ1Z3MgaW4gKmV4ZWN1dGFibGUqIGNvZGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgZXhwbGljaXQgbmVnYXRpdmUgY3JpdGVyaWE6IFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFNwZWNpZmljYWxseSwgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIGFyZSBleGNsdWRlZC5cblxuTm93LCBsZXQncyBhcHBseSB0aGlzIHRvIFREWC4gSW50ZWwgVERYIGlzIGEgaGFyZHdhcmUgQ1BVIHNlY3VyaXR5IHRlY2hub2xvZ3kgZm9yIGNvbmZpZGVudGlhbCBWTXMuIFRvIGV4ZWN1dGUsIGl0IHJlcXVpcmVzIHNwZWNpZmljIEludGVsIFhlb24gaGFyZHdhcmUgYW5kIFREWCBlbmFibGVkLiBJIHJlY2FsbCB0aGF0IGR1cmluZyBlYXJseSBib290LCB0aGUgZ3Vlc3Qga2VybmVsIGNoZWNrcyBmb3IgVERYIHN1cHBvcnQgdmlhIENQVUlEIGxlYWYgMHgyMSAoYFREWF9DUFVJRF9MRUFGX0lEYCkuIEluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCDigJMgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdXNlcyDigJMgdGhpcyBsZWFmIHdpbGwgKm5vdCogcmV0dXJuIHRoZSBURFggc2lnbmF0dXJlLiBDb25zZXF1ZW50bHksIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBmZWF0dXJlIGZsYWcgd2lsbCBub3QgYmUgZW5hYmxlZC5cblxuU2luY2UgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgbm90IHByZXNlbnQsIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYCB3aWxsIGZhaWwuICBUaGlzIG1lYW5zIHRoYXQgYHRkeF9ndWVzdF9pbml0KClgIHdpbGwgcmV0dXJuIGAtRU5PREVWYCwgZWZmZWN0aXZlbHkgc2hvcnQtY2lyY3VpdGluZyB0aGUgZW50aXJlIGluaXRpYWxpemF0aW9uIHBhdGguIFRoZXJlZm9yZSwgdGhlIGRyaXZlciB3b24ndCByZWdpc3RlciBpdHMgYC9kZXYvdGR4LWd1ZXN0YCBkZXZpY2UsIGl0IHdvbid0IGludGVyYWN0IHdpdGggVFNNLCBhbmQgZnVuY3Rpb25zIGxpa2UgYGdldF9xdW90ZV9idWZfc2l6ZSgpYCwgIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgLCBgYWxsb2NfcXVvdGVfYnVmKClgLCBgZnJlZV9xdW90ZV9idWYoKWAsIGFuZCBgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKClgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBUaGUgY29kZSBpbiBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCBhbmQgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCBpcyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUUVNVSBvZmZlcnMgYSB3b3JrYXJvdW5kIHRocm91Z2ggYC1jcHVgIGZsYWdzIG9yIHNvbWV0aGluZywgYnV0IEkgYW0gcHJldHR5IGNlcnRhaW4gUUVNVSBkb2VzIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgVERYLiBURFggaW4gS1ZNL1FFTVUgKnJlcXVpcmVzKiBzcGVjaWZpYyBoYXJkd2FyZSAoU2FwcGhpcmUgUmFwaWRzIG9yIG5ld2VyKSB3aXRoIFREWCBlbmFibGVkLCBob3N0IHN1cHBvcnQgKEtWTSBURFgpLCBhbmQgUUVNVSB3aXRoIFREWCBndWVzdCBzdXBwb3J0IChzcGVjaWZpY2FsbHksIGAtb2JqZWN0IHRkeC1ndWVzdCwuLi5gKS4gU3l6a2FsbGVyJ3Mgc3RhbmRhcmQgZnV6emluZyBzZXR1cCBkb2Vzbid0IG1lZXQgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cy5cblxuSSByZWNhbGwgdGhhdCByZXNlYXJjaCBwcm9qZWN0cyBleGlzdCB0aGF0IGhhdmUgZXhwbG9yZWQgZnV6emluZyBvZiBTRVYvU05QL1REWCwgaG93ZXZlciwgdGhhdCBpcyBub3QgdGhlIHN5emthbGxlciBkZWZhdWx0IHNldHVwLiBJbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIHRyaWFnZSwgY29kZSBpcyBub3QgZnV6emVkIGlmIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGlzbid0IHNvbWUgYmFja2Rvb3Igd2F5IHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLCBwZXJoYXBzIHRocm91Z2ggYSBzeXNmcyBpbnRlcmZhY2UsIGRlYnVnZnMgZW50cnksIG9yIHNvbWUga2luZCBvZiBtb2NrIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgdGhlIGB0ZHhfZ3Vlc3RfaWRzYCBvciBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB0aHJvdWdoIGEgZ3JlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjM5LjIxNjM1MTU0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODUzNzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfZ3Vlc3RfaWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MDc9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRkeF9taXNjX2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTMtXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNDpzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTUtXFx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTctfTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDE4Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB0ZHhfZ3Vlc3RfaWRzKTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE5LVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQyNz1zdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQzMC1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDMxOlxcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDMyLVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNzo0MS41NjQ4OTQ1MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE3MzI4MTg3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggR3Vlc3QgRHJpdmVyKipcblxuT2theSwgc28gYHRkeF9ndWVzdF9pZHNgIGlzIGlzb2xhdGVkIHdpdGhpbiBgdGR4LWd1ZXN0LmNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgb2J2aW91cyBlbnRyeXBvaW50cyBpbiBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0aGVyZS4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIGFic29yYiB0aGUgcmVzdCBvZiB0aGUgc291cmNlIGZpbGUgdG8gZ3Jhc3AgdGhlIGVudGlyZXR5IG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gUmVhZGluZyB0aGUgZnVsbCBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCBmaWxlIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gYWNoaWV2ZSB0aGlzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9ucyBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGNvZGUuIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIGpvYiwgYWZ0ZXIgYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjUzLjI5NzcxNjYxN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogVERYIGd1ZXN0IHVzZXIgaW50ZXJmYWNlIGRyaXZlclxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAyMiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHRcXG4gICA4OlxcdCNkZWZpbmUgcHJfZm10KGZtdClcXHRcXHRcXHRLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlzY2RldmljZS5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja3B0ci5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RzbS5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RzbS1tci5oXFx1MDAzZVxcbiAgMjI6XFx0XFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC90ZHgtZ3Vlc3QuaFxcdTAwM2VcXG4gIDI0OlxcdFxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9jcHVfZGV2aWNlX2lkLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3RkeC5oXFx1MDAzZVxcbiAgMjc6XFx0XFxuICAyODpcXHQvKiBURFJFUE9SVCBidWZmZXIgKi9cXG4gIDI5OlxcdHN0YXRpYyB1OCAqdGR4X3JlcG9ydF9idWY7XFxuICAzMDpcXHRcXG4gIDMxOlxcdC8qIExvY2sgdG8gc2VyaWFsaXplIFRERy5NUi5SRVBPUlQgYW5kIFRERy5NUi5SVE1SLkVYVEVORCBURENBTExzICovXFxuICAzMjpcXHRzdGF0aWMgREVGSU5FX01VVEVYKG1yX2xvY2spO1xcbiAgMzM6XFx0XFxuICAzNDpcXHQvKiBURFJFUE9SVCBmaWVsZHMgKi9cXG4gIDM1OlxcdGVudW0ge1xcbiAgMzY6XFx0XFx0VERSRVBPUlRfcmVwb3J0ZGF0YSA9IDEyOCxcXG4gIDM3OlxcdFxcdFREUkVQT1JUX3RlZV90Y2JfaW5mbyA9IDI1NixcXG4gIDM4OlxcdFxcdFREUkVQT1JUX3RkaW5mbyA9IFREUkVQT1JUX3RlZV90Y2JfaW5mbyArIDI1NixcXG4gIDM5OlxcdFxcdFREUkVQT1JUX2F0dHJpYnV0ZXMgPSBURFJFUE9SVF90ZGluZm8sXFxuICA0MDpcXHRcXHRURFJFUE9SVF94ZmFtID0gVERSRVBPUlRfYXR0cmlidXRlcyArIHNpemVvZih1NjQpLFxcbiAgNDE6XFx0XFx0VERSRVBPUlRfbXJ0ZCA9IFREUkVQT1JUX3hmYW0gKyBzaXplb2YodTY0KSxcXG4gIDQyOlxcdFxcdFREUkVQT1JUX21yY29uZmlnaWQgPSBURFJFUE9SVF9tcnRkICsgU0hBMzg0X0RJR0VTVF9TSVpFLFxcbiAgNDM6XFx0XFx0VERSRVBPUlRfbXJvd25lciA9IFREUkVQT1JUX21yY29uZmlnaWQgKyBTSEEzODRfRElHRVNUX1NJWkUsXFxuICA0NDpcXHRcXHRURFJFUE9SVF9tcm93bmVyY29uZmlnID0gVERSRVBPUlRfbXJvd25lciArIFNIQTM4NF9ESUdFU1RfU0laRSxcXG4gIDQ1OlxcdFxcdFREUkVQT1JUX3J0bXIwID0gVERSRVBPUlRfbXJvd25lcmNvbmZpZyArIFNIQTM4NF9ESUdFU1RfU0laRSxcXG4gIDQ2OlxcdFxcdFREUkVQT1JUX3J0bXIxID0gVERSRVBPUlRfcnRtcjAgKyBTSEEzODRfRElHRVNUX1NJWkUsXFxuICA0NzpcXHRcXHRURFJFUE9SVF9ydG1yMiA9IFREUkVQT1JUX3J0bXIxICsgU0hBMzg0X0RJR0VTVF9TSVpFLFxcbiAgNDg6XFx0XFx0VERSRVBPUlRfcnRtcjMgPSBURFJFUE9SVF9ydG1yMiArIFNIQTM4NF9ESUdFU1RfU0laRSxcXG4gIDQ5OlxcdFxcdFREUkVQT1JUX3NlcnZ0ZF9oYXNoID0gVERSRVBPUlRfcnRtcjMgKyBTSEEzODRfRElHRVNUX1NJWkUsXFxuICA1MDpcXHR9O1xcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgaW50IHRkeF9kb19yZXBvcnQoc29ja3B0cl90IGRhdGEsIHNvY2twdHJfdCB0ZHJlcG9ydClcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHNjb3BlZF9jb25kX2d1YXJkKG11dGV4X2ludHIsIHJldHVybiAtRUlOVFIsIFxcdTAwMjZtcl9sb2NrKSB7XFxuICA1NTpcXHRcXHRcXHR1OCAqcmVwb3J0ZGF0YSA9IHRkeF9yZXBvcnRfYnVmICsgVERSRVBPUlRfcmVwb3J0ZGF0YTtcXG4gIDU2OlxcdFxcdFxcdGludCByZXQ7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdFxcdGlmICghc29ja3B0cl9pc19udWxsKGRhdGEpIFxcdTAwMjZcXHUwMDI2XFxuICA1OTpcXHRcXHRcXHQgICAgY29weV9mcm9tX3NvY2twdHIocmVwb3J0ZGF0YSwgZGF0YSwgVERYX1JFUE9SVERBVEFfTEVOKSlcXG4gIDYwOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRcXHRyZXQgPSB0ZHhfbWNhbGxfZ2V0X3JlcG9ydDAocmVwb3J0ZGF0YSwgdGR4X3JlcG9ydF9idWYpO1xcbiAgNjM6XFx0XFx0XFx0aWYgKFdBUk5fT05DRShyZXQsIFxcXCJ0ZHhfbWNhbGxfZ2V0X3JlcG9ydDAoKSBmYWlsZWQ6ICVkXFxcIiwgcmV0KSlcXG4gIDY0OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdFxcdGlmICghc29ja3B0cl9pc19udWxsKHRkcmVwb3J0KSBcXHUwMDI2XFx1MDAyNlxcbiAgNjc6XFx0XFx0XFx0ICAgIGNvcHlfdG9fc29ja3B0cih0ZHJlcG9ydCwgdGR4X3JlcG9ydF9idWYsIFREWF9SRVBPUlRfTEVOKSlcXG4gIDY4OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgNjk6XFx0XFx0fVxcbiAgNzA6XFx0XFx0cmV0dXJuIDA7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdHN0YXRpYyBpbnQgdGR4X2RvX2V4dGVuZCh1OCBtcl9pbmQsIGNvbnN0IHU4ICpkYXRhKVxcbiAgNzQ6XFx0e1xcbiAgNzU6XFx0XFx0c2NvcGVkX2NvbmRfZ3VhcmQobXV0ZXhfaW50ciwgcmV0dXJuIC1FSU5UUiwgXFx1MDAyNm1yX2xvY2spIHtcXG4gIDc2OlxcdFxcdFxcdC8qXFxuICA3NzpcXHRcXHRcXHQgKiBURFggcmVxdWlyZXMgQGV4dGVuZF9idWYgdG8gYmUgNjQtYnl0ZSBhbGlnbmVkLlxcbiAgNzg6XFx0XFx0XFx0ICogSXQncyBzYWZlIHRvIHVzZSBSRVBPUlREQVRBIGJ1ZmZlciBmb3IgdGhhdCBwdXJwb3NlIGJlY2F1c2VcXG4gIDc5OlxcdFxcdFxcdCAqIHRkeF9tcl9yZXBvcnQvZXh0ZW5kX2xvY2soKSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxcbiAgODA6XFx0XFx0XFx0ICovXFxuICA4MTpcXHRcXHRcXHR1OCAqZXh0ZW5kX2J1ZiA9IHRkeF9yZXBvcnRfYnVmICsgVERSRVBPUlRfcmVwb3J0ZGF0YTtcXG4gIDgyOlxcdFxcdFxcdGludCByZXQ7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdFxcdG1lbWNweShleHRlbmRfYnVmLCBkYXRhLCBTSEEzODRfRElHRVNUX1NJWkUpO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRcXHRyZXQgPSB0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIobXJfaW5kLCBleHRlbmRfYnVmKTtcXG4gIDg3OlxcdFxcdFxcdGlmIChXQVJOX09OQ0UocmV0LCBcXFwidGR4X21jYWxsX2V4dGVuZF9ydG1yKCV1KSBmYWlsZWQ6ICVkXFxcIiwgbXJfaW5kLCByZXQpKVxcbiAgODg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDg5OlxcdFxcdH1cXG4gIDkwOlxcdFxcdHJldHVybiAwO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHQjZGVmaW5lIFREWF9NUl8ocikgLm1yX3ZhbHVlID0gKHZvaWQgKilURFJFUE9SVF8jI3IsIFRTTV9NUl8ociwgU0hBMzg0KVxcbiAgOTQ6XFx0c3RhdGljIHN0cnVjdCB0c21fbWVhc3VyZW1lbnRfcmVnaXN0ZXIgdGR4X21yc1tdID0ge1xcbiAgOTU6XFx0XFx0eyBURFhfTVJfKHJ0bXIwKSB8IFRTTV9NUl9GX1JUTVIgfSxcXG4gIDk2OlxcdFxcdHsgVERYX01SXyhydG1yMSkgfCBUU01fTVJfRl9SVE1SIH0sXFxuICA5NzpcXHRcXHR7IFREWF9NUl8ocnRtcjIpIHwgVFNNX01SX0ZfUlRNUiB9LFxcbiAgOTg6XFx0XFx0eyBURFhfTVJfKHJ0bXIzKSB8IFRTTV9NUl9GX1JUTVIgfSxcXG4gIDk5OlxcdFxcdHsgVERYX01SXyhtcnRkKSB9LFxcbiAxMDA6XFx0XFx0eyBURFhfTVJfKG1yY29uZmlnaWQpIHwgVFNNX01SX0ZfTk9IQVNIIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjUzLjI5Nzg3NjkzN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDQyNzkyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCAtIExpbmVzIDEwMS0yMDAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAxMDEgdG8gMjAwIHdpdGhpbiB0aGF0IGB0ZHgtZ3Vlc3QuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IGRlYWxpbmcgd2l0aCB0aGUgVERYIGd1ZXN0IGRyaXZlci4gQmFzZWQgb24gdGhlIGZpbGUgc3RydWN0dXJlLCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBzb21lIGNvcmUgaW5pdGlhbGl6YXRpb24sIHBlcmhhcHMgZXN0YWJsaXNoaW5nIHRoZSBpbml0aWFsIGNvbW11bmljYXRpb24gcGF0aCB3aXRoIHRoZSBURFggbW9kdWxlLCBvciBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBoYW5kbGluZyBURFgtc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBlaXRoZXIgdGhlIGB0ZHhgIGludGVyZmFjZSBoZXJlIG9yIGF0IGxlYXN0IHNvbWUgYmFzaWMgZXJyb3IgaGFuZGxpbmcgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgd2VsbC4gR2l2ZW4gdGhlIFREWCBjb250ZXh0LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIHNldHRpbmcgdXAgdGhlIEd1ZXN0IEF0dGVzdGF0aW9uIFJlcG9ydCwgb3IgaWYgdGhlcmUgaXMgdGhlIGVzdGFibGlzaG1lbnQgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGZvciB0aGUgVERYLXNwZWNpZmljIGhhcmR3YXJlIGFuZCBtZW1vcnkgcmVnaW9ucy4gVGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIGlzIGFsd2F5cyBjcml0aWNhbCBpbiBzZWN1cmUgc3lzdGVtczsgYSBtaXNzdGVwIGhlcmUsIGFuZCB0aGUgd2hvbGUgc3lzdGVtIGJlY29tZXMgdnVsbmVyYWJsZS4gSXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIGVzdGFibGlzaGluZyB0aGUgc2VjdXJlIG1lbW9yeSByZWdpb25zLlxuXG5NeSBleHBlcnRpc2UgdGVsbHMgbWUgdG8gcXVpY2tseSB3YXRjaCBvdXQgZm9yIHRoZSBmb2xsb3dpbmc6IGVycm9yIGNvbmRpdGlvbnM7IGFueSBjYWxscyB0byBsb3cgbGV2ZWwgaGFyZHdhcmUgcmVnaXN0ZXJzOyBhbmQgaW50ZXJhY3Rpb25zIHdpdGggYW55IG9mIHRoZSBzZWN1cml0eSBtb2R1bGVzIGluIHRoZSBzeXN0ZW0uIEkgYWxzbyB3b3VsZCBub3QgYmUgc3VycHJpc2VkIHRvIHNlZSB0aGlzIGNvZGUgZGVhbGluZyB3aXRoIGhhbmRsaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byBURFggZXZlbnRzLCBzdWNoIGFzIGF0dGVzdGF0aW9uIG9yIG1lbW9yeSBmYXVsdHMuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGV4cGVjdGVkIHBsYXRmb3JtIGNhcGFiaWxpdGllcy4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIHRoZSBoYW5kbGluZyBvZiBhbnkgbmVjZXNzYXJ5IHByZS1ib290IHJvdXRpbmVzIHJlbGF0ZWQgdG8gdGhlIFREWCBlbnZpcm9ubWVudC5cblxuTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgYmVpbmcgZG9uZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTYyNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDc6NTYuMzQwNjczMDY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXHR7IFREWF9NUl8obXJvd25lcikgfCBUU01fTVJfRl9OT0hBU0ggfSxcXG4gMTAyOlxcdFxcdHsgVERYX01SXyhtcm93bmVyY29uZmlnKSB8IFRTTV9NUl9GX05PSEFTSCB9LFxcbiAxMDM6XFx0fTtcXG4gMTA0OlxcdCN1bmRlZiBURFhfTVJfXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyBpbnQgdGR4X21yX3JlZnJlc2goY29uc3Qgc3RydWN0IHRzbV9tZWFzdXJlbWVudHMgKnRtKVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0cmV0dXJuIHRkeF9kb19yZXBvcnQoS0VSTkVMX1NPQ0tQVFIoTlVMTCksIEtFUk5FTF9TT0NLUFRSKE5VTEwpKTtcXG4gMTA5OlxcdH1cXG4gMTEwOlxcdFxcbiAxMTE6XFx0c3RhdGljIGludCB0ZHhfbXJfZXh0ZW5kKGNvbnN0IHN0cnVjdCB0c21fbWVhc3VyZW1lbnRzICp0bSxcXG4gMTEyOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50X3JlZ2lzdGVyICptcixcXG4gMTEzOlxcdFxcdFxcdFxcdCBjb25zdCB1OCAqZGF0YSlcXG4gMTE0OlxcdHtcXG4gMTE1OlxcdFxcdHJldHVybiB0ZHhfZG9fZXh0ZW5kKG1yIC0gdG0tXFx1MDAzZW1ycywgZGF0YSk7XFxuIDExNjpcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdHN0YXRpYyBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50cyB0ZHhfbWVhc3VyZW1lbnRzID0ge1xcbiAxMTk6XFx0XFx0Lm1ycyA9IHRkeF9tcnMsXFxuIDEyMDpcXHRcXHQubnJfbXJzID0gQVJSQVlfU0laRSh0ZHhfbXJzKSxcXG4gMTIxOlxcdFxcdC5yZWZyZXNoID0gdGR4X21yX3JlZnJlc2gsXFxuIDEyMjpcXHRcXHQud3JpdGUgPSB0ZHhfbXJfZXh0ZW5kLFxcbiAxMjM6XFx0fTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRkeF9tcl9pbml0KHZvaWQpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpnO1xcbiAxMjg6XFx0XFx0aW50IHJjO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHR1OCAqYnVmIF9fZnJlZShrZnJlZSkgPSBremFsbG9jKFREWF9SRVBPUlRfTEVOLCBHRlBfS0VSTkVMKTtcXG4gMTMxOlxcdFxcdGlmICghYnVmKVxcbiAxMzI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdHRkeF9yZXBvcnRfYnVmID0gYnVmO1xcbiAxMzU6XFx0XFx0cmMgPSB0ZHhfbXJfcmVmcmVzaChcXHUwMDI2dGR4X21lYXN1cmVtZW50cyk7XFxuIDEzNjpcXHRcXHRpZiAocmMpXFxuIDEzNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdC8qXFxuIDE0MDpcXHRcXHQgKiBAbXJfdmFsdWUgd2FzIGluaXRpYWxpemVkIHdpdGggdGhlIG9mZnNldCBvbmx5LCB3aGlsZSB0aGUgYmFzZVxcbiAxNDE6XFx0XFx0ICogYWRkcmVzcyBpcyBiZWluZyBhZGRlZCBoZXJlLlxcbiAxNDI6XFx0XFx0ICovXFxuIDE0MzpcXHRcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGR4X21ycyk7ICsraSlcXG4gMTQ0OlxcdFxcdFxcdCoobG9uZyAqKVxcdTAwMjZ0ZHhfbXJzW2ldLm1yX3ZhbHVlICs9IChsb25nKWJ1ZjtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0ZyA9IHRzbV9tcl9jcmVhdGVfYXR0cmlidXRlX2dyb3VwKFxcdTAwMjZ0ZHhfbWVhc3VyZW1lbnRzKTtcXG4gMTQ3OlxcdFxcdGlmICghSVNfRVJSKGcpKVxcbiAxNDg6XFx0XFx0XFx0dGR4X3JlcG9ydF9idWYgPSBub19mcmVlX3B0cihidWYpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRyZXR1cm4gZztcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIHZvaWQgdGR4X21yX2RlaW5pdChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptcl9ncnApXFxuIDE1NDpcXHR7XFxuIDE1NTpcXHRcXHR0c21fbXJfZnJlZV9hdHRyaWJ1dGVfZ3JvdXAobXJfZ3JwKTtcXG4gMTU2OlxcdFxcdGtmcmVlKHRkeF9yZXBvcnRfYnVmKTtcXG4gMTU3OlxcdH1cXG4gMTU4OlxcdFxcbiAxNTk6XFx0LypcXG4gMTYwOlxcdCAqIEludGVsJ3MgU0dYIFFFIGltcGxlbWVudGF0aW9uIGdlbmVyYWxseSB1c2VzIFF1b3RlIHNpemUgbGVzc1xcbiAxNjE6XFx0ICogdGhhbiA4SyAoMksgUXVvdGUgZGF0YSArIH41SyBvZiBjZXJ0aWZpY2F0ZSBibG9iKS5cXG4gMTYyOlxcdCAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXNcXG4gMTYzOlxcdCAqIGxhcmdlciBRdW90ZSBzaXplICh+MTAwSykuXFxuIDE2NDpcXHQgKi9cXG4gMTY1OlxcdCNkZWZpbmUgR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkVcXHRTWl8xMjhLXFxuIDE2NjpcXHRcXG4gMTY3OlxcdCNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVJcXHRcXHQxXFxuIDE2ODpcXHRcXG4gMTY5OlxcdC8qIFREWCBHZXRRdW90ZSBzdGF0dXMgY29kZXMgKi9cXG4gMTcwOlxcdCNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1NcXHRcXHQwXFxuIDE3MTpcXHQjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcXHRcXHQweGZmZmZmZmZmZmZmZmZmZmZcXG4gMTcyOlxcdFxcbiAxNzM6XFx0I2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVxcdFxcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXFxuIDE3NDpcXHRcXG4gMTc1OlxcdC8qIHN0cnVjdCB0ZHhfcXVvdGVfYnVmOiBGb3JtYXQgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIuXFxuIDE3NjpcXHQgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cXG4gMTc3OlxcdCAqIEBzdGF0dXM6IFN0YXR1cyBjb2RlIG9mIFF1b3RlIHJlcXVlc3QsIGZpbGxlZCBieSBWTU0uXFxuIDE3ODpcXHQgKiBAaW5fbGVuOiBMZW5ndGggb2YgVERSRVBPUlQsIGZpbGxlZCBieSBURC5cXG4gMTc5OlxcdCAqIEBvdXRfbGVuOiBMZW5ndGggb2YgUXVvdGUgZGF0YSwgZmlsbGVkIGJ5IFZNTS5cXG4gMTgwOlxcdCAqIEBkYXRhOiBRdW90ZSBkYXRhIG9uIG91dHB1dCBvciBURFJFUE9SVCBvbiBpbnB1dC5cXG4gMTgxOlxcdCAqXFxuIDE4MjpcXHQgKiBNb3JlIGRldGFpbHMgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIgY2FuIGJlIGZvdW5kIGluIFREWFxcbiAxODM6XFx0ICogR3Vlc3QtSG9zdCBDb21tdW5pY2F0aW9uIEludGVyZmFjZSAoR0hDSSkgZm9yIEludGVsIFREWCAxLjAsXFxuIDE4NDpcXHQgKiBzZWN0aW9uIHRpdGxlZCBcXFwiVERHLlZQLlZNQ0FMTFxcdTAwM2NHZXRRdW90ZVxcdTAwM2VcXFwiXFxuIDE4NTpcXHQgKi9cXG4gMTg2OlxcdHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcXG4gMTg3OlxcdFxcdHU2NCB2ZXJzaW9uO1xcbiAxODg6XFx0XFx0dTY0IHN0YXR1cztcXG4gMTg5OlxcdFxcdHUzMiBpbl9sZW47XFxuIDE5MDpcXHRcXHR1MzIgb3V0X2xlbjtcXG4gMTkxOlxcdFxcdHU4IGRhdGFbXTtcXG4gMTkyOlxcdH07XFxuIDE5MzpcXHRcXG4gMTk0OlxcdC8qIFF1b3RlIGRhdGEgYnVmZmVyIGFuZCBsZW5ndGggKi9cXG4gMTk1OlxcdHN0YXRpYyB2b2lkICpxdW90ZV9kYXRhO1xcbiAxOTY6XFx0c3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0LyogTG9jayB0byBzdHJlYW1saW5lIHF1b3RlIHJlcXVlc3RzICovXFxuIDE5OTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xcbiAyMDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjU2LjM0MDgyMDQ3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDA3MDI4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFREWCBHdWVzdCBDb2RlJ3MgUmVhY2hhYmlsaXR5IGluIEZ1enppbmcgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gYHRkeC1ndWVzdC5jYCwgc3BlY2lmaWNhbGx5IGhvdyBpdHMgZnVuY3Rpb25zIGFyZSBjb250aW5nZW50IG9uIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBzdWNjZWVkaW5nLiBgdGR4X2d1ZXN0X2luaXQoKWAgY2hlY2tzIGZvciB0aGUgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgQ1BVIGZlYXR1cmUuIFRoaXMgZmVhdHVyZSBpcyBvbmx5IHNldCBpZiB0aGUga2VybmVsIGJvb3RzIHdpdGhpbiBhbiBJbnRlbCBURFggVHJ1c3QgRG9tYWluLCB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgYSBzcGVjaWZpYyBDUFVJRCBsZWFmIGNoZWNrIGZvciBcIkludGVsVERYICAgIFwiIGR1cmluZyBib290LCBhbmQgaW4gYHRkeF9lYXJseV9pbml0KClgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHBvaW50OiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgYmUgaXQgUUVNVSBvciBHQ0UgaW5zdGFuY2VzLCAqZG9uJ3QqIHN1cHBvcnQgb3IgZW11bGF0ZSBJbnRlbCBURFggaGFyZHdhcmUuIFRoaXMgbWVhbnMgdGhlIHJlcXVpcmVkIENQVUlEIGxlYWYgd29uJ3QgYmUgcHJlc2VudCwgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgd29uJ3QgYmUgc2V0LCBhbmQgYHRkeF9ndWVzdF9pbml0KClgIHdpbGwgZmFpbCwgcmV0dXJuaW5nIGAtRU5PREVWYC4gVGhhdCBtZWFucyB0aGUgbmV3IGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGZ1bmN0aW9uIGFuZCB0aGUgdXBkYXRlZCBxdW90ZSBidWZmZXIgYWxsb2NhdGlvbiBpbiBgdGR4LWd1ZXN0LmNgIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG5cbkJhc2VkIG9uIHRoZSBjcml0ZXJpYSBvdXRsaW5lZCBmb3IgZGV0ZXJtaW5pbmcgYFdvcnRoRnV6emluZ2AsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBvbiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiB0aGUgY29kZSBjbGVhcmx5IGZhbGxzIGludG8gdGhpcyBjYXRlZ29yeS4gVERYIHJlcXVpcmVzIHNwZWNpYWxpemVkIEludGVsIFhlb24gaGFyZHdhcmUgYW5kIFREWCBmaXJtd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQsIHdoaWNoIGFyZW4ndCBhdmFpbGFibGUgaW4gb3VyIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGlzIGZlYXR1cmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBObyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVjZXNzYXJ5IGFzIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudCBmb3IgcnVubmluZyB0aGlzIGNvZGUgcGF0aCBpcyBvdXRzaWRlIG9mIHRoZSByZWFsbSBvZiBwb3NzaWJpbGl0aWVzIGZvciBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIHNvbGlkOlxuKiAgIFdvcnRoRnV6emluZyA9IGZhbHNlXG4qICAgRm9jdXNTeW1ib2xzID0gXFxbIF1cbiogICBFbmFibGVDb25maWdzID0gXFxbIF1cbiogICBSZWFzb25pbmcgPSBjb25jaXNlIGV4cGxhbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY3NCwiT3V0cHV0VG9rZW5zIjoyMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDg6MDQuNzQ3ODUyODY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgYW5kIHVwZGF0ZXMgdGhlIFREWCBndWVzdCBkcml2ZXIgKGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYykgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGUgcXVvdGUgYnVmZmVyIGJhc2VkIG9uIFREWCBtZXRhZGF0YS4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBhcyBhbiBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgbGFjayB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFREWC4gRHVyaW5nIGJvb3QsIHRkeF9lYXJseV9pbml0KCkgdmVyaWZpZXMgQ1BVSUQgbGVhZiAweDIxIGZvciB0aGUgVERYIHNpZ25hdHVyZSwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzbyBYODZfRkVBVFVSRV9URFhfR1VFU1QgaXMgbmV2ZXIgc2V0LiBDb25zZXF1ZW50bHksIHRkeF9ndWVzdF9pbml0KCkgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aCAtRU5PREVWIGFuZCB0aGUgZHJpdmVyIG5ldmVyIHJlZ2lzdGVycyBvciBleGVjdXRlcy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUgYW5kIGNhbm5vdCBydW4gaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSBhbmQgdXBkYXRlcyB0aGUgVERYIGd1ZXN0IGRyaXZlciAoZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jKSB0byBkeW5hbWljYWxseSBzaXplIHRoZSBxdW90ZSBidWZmZXIgYmFzZWQgb24gVERYIG1ldGFkYXRhLiBUaGlzIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBydW5uaW5nIGFzIGFuIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBsYWNrIHRoZSBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgc3VwcG9ydCByZXF1aXJlZCBmb3IgVERYLiBEdXJpbmcgYm9vdCwgdGR4X2Vhcmx5X2luaXQoKSB2ZXJpZmllcyBDUFVJRCBsZWFmIDB4MjEgZm9yIHRoZSBURFggc2lnbmF0dXJlLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNvIFg4Nl9GRUFUVVJFX1REWF9HVUVTVCBpcyBuZXZlciBzZXQuIENvbnNlcXVlbnRseSwgdGR4X2d1ZXN0X2luaXQoKSBpbW1lZGlhdGVseSBmYWlscyB3aXRoIC1FTk9ERVYgYW5kIHRoZSBkcml2ZXIgbmV2ZXIgcmVnaXN0ZXJzIG9yIGV4ZWN1dGVzLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSBhbmQgY2Fubm90IHJ1biBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA4OjA0Ljc0Nzg4NDk0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nqzl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 11:02:51 +0000 UTC FinishedAt: 2026-09-15 11:08:06 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgYW5kIHVwZGF0ZXMgdGhlIFREWCBndWVzdCBkcml2ZXIgKGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYykgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGUgcXVvdGUgYnVmZmVyIGJhc2VkIG9uIFREWCBtZXRhZGF0YS4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBhcyBhbiBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgbGFjayB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFREWC4gRHVyaW5nIGJvb3QsIHRkeF9lYXJseV9pbml0KCkgdmVyaWZpZXMgQ1BVSUQgbGVhZiAweDIxIGZvciB0aGUgVERYIHNpZ25hdHVyZSwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzbyBYODZfRkVBVFVSRV9URFhfR1VFU1QgaXMgbmV2ZXIgc2V0LiBDb25zZXF1ZW50bHksIHRkeF9ndWVzdF9pbml0KCkgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aCAtRU5PREVWIGFuZCB0aGUgZHJpdmVyIG5ldmVyIHJlZ2lzdGVycyBvciBleGVjdXRlcy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUgYW5kIGNhbm5vdCBydW4gaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWExMmM2NDE2ZjRiOWNhZTE0ZDU0Njc5ZDNhMzE5MzcwZGNkZGJjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IGY5MDRhNjM2ZDQ0OWIuLmI5ODA1OGQ3ZDI0NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbkBAIC0xOTgsNiAmIzQzOzE5OCwzMCBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgLSBHZXQgdGhlIG1heGltdW0gVEQgUXVvdGUgc2l6ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBURCBRdW90ZSBmcm9tIGEgNC1ieXRlIFREIG1ldGFkYXRhIGZpZWxkLiBUaGUgVERYXG4mIzQzOyAqIGd1ZXN0IGRyaXZlciB1c2VzIGl0IHRvIHNpemUgdGhlIGJ1ZmZlciBmb3IgUXVvdGVzLiBPbGRlciBURFggbW9kdWxlcyBkbyBub3RcbiYjNDM7ICogc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXBvcnRlZCBzaXplIGNvdmVycyBldmVyeSBRdW90ZSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sXG4mIzQzOyAqIGluY2x1ZGluZyBTR1gtYmFzZWQgUXVvdGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBBIHJ1bnRpbWUgVERYIG1vZHVsZSB1cGRhdGUgZG9lcyBub3QgY2hhbmdlIHRoZSByZXBvcnRlZCBzaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE1heGltdW0gUXVvdGUgc2l6ZSBpbiBieXRlcyBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHZhbCwgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXHUwMDI2dmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA/IDAgOiAodTMyKXZhbDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0ZHhfZ2V0X21heF9xdW90ZV9zaXplKTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjZmMTA2ZDRiMWE1ODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuQEAgLTUwLDYgJiM0Mzs1MCw3IEBAXG4gLyogVERYIFRELVNjb3BlIE1ldGFkYXRhLiBUbyBiZSB1c2VkIGJ5IFRERy5WTS5XUiBhbmQgVERHLlZNLlJEICovXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1x0XHQweDExMTAwMDAzMDAwMDAwMTZcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1x0XHRcdDB4MTExMDAwMDMwMDAwMDAxN1xuJiM0MzsjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkVcdFx0MHg5MDEwMDAwMjAwMDAwMDA3XG4gI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTXHRcdDB4OTEwMDAwMDAwMDAwMDAxMFxuICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRURcdDB4OTEwMDAwMDAwMDAwMDAxOVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODkuLmE3NWRiYmUwMDRiZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbkBAIC04Myw2ICYjNDM7ODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XG4gXG4gdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpO1xuIFxuJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcbiYjNDM7XG4gdm9pZCBfX2luaXQgdGR4X2R1bXBfYXR0cmlidXRlcyh1NjQgdGRfYXR0cik7XG4gdm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXG5pbmRleCBkMDMwM2UzMWU4MTYxLi43MjI0YTY2YjY1ZDE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuICAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXNcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxuICAqL1xuLSNkZWZpbmUgR0VUX1FVT1RFX0JVRl9TSVpFXHRcdFNaXzEyOEtcbiYjNDM7I2RlZmluZSBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRVx0U1pfMTI4S1xuIFxuICNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVJcdFx0MVxuIFxuQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgdGR4X21yX2RlaW5pdChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptcl9ncnApXG4gI2RlZmluZSBHRVRfUVVPVEVfU1VDQ0VTU1x0XHQwXG4gI2RlZmluZSBHRVRfUVVPVEVfSU5fRkxJR0hUXHRcdDB4ZmZmZmZmZmZmZmZmZmZmZlxuIFxuLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU5cdFx0KEdFVF9RVU9URV9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgdGR4X3F1b3RlX2J1ZikpXG4mIzQzOyNkZWZpbmUgVERYX1FVT1RFX0JVRl9MRU4obilcdFx0c3RydWN0X3NpemVfdChzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiwgZGF0YSwgbilcbiBcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxuICAqIEB2ZXJzaW9uOiBRdW90ZSBmb3JtYXQgdmVyc2lvbiwgZmlsbGVkIGJ5IFRELlxuQEAgLTE5MSw4ICYjNDM7MTkxLDkgQEAgc3RydWN0IHRkeF9xdW90ZV9idWYge1xuIFx0dTggZGF0YVtdO1xuIH07XG4gXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cbiYjNDM7LyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqL1xuIHN0YXRpYyB2b2lkICpxdW90ZV9kYXRhO1xuJiM0MztzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuO1xuIFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7XG5AQCAtMjA5LDkgJiM0MzsyMTAsOCBAQCBzdGF0aWMgbG9uZyB0ZHhfZ2V0X3JlcG9ydDAoc3RydWN0IHRkeF9yZXBvcnRfcmVxIF9fdXNlciAqcmVxKVxuIFx0XHRcdCAgICAgVVNFUl9TT0NLUFRSKHJlcS1cdTAwM2V0ZHJlcG9ydCkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4tXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xuIFx0dW5zaWduZWQgaW50IGNvdW50ID0gbGVuIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQpKSB7XG5AQCAtMjIyLDEyICYjNDM7MjIyLDM0IEBAIHN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbiBcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCBmb3IgYSBRdW90ZS4gVGhpcyBjb3ZlcnMgYWxsIFF1b3RlXG4mIzQzOyAqIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKHF1b3RlX3NpemUpXG4mIzQzO1x0XHQvKiBUaGUgcmVwb3J0ZWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBidWZmZXIgaGVhZGVyICovXG4mIzQzO1x0XHRsZW4gPSBURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHQvKiBPbGRlciBURFggbW9kdWxlcyBkb24mIzM5O3QgcmVwb3J0IHRoZSBzaXplLCB1c2UgdGhlIGRlZmF1bHQgKi9cbiYjNDM7XHRcdGxlbiA9IEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGZhaWxzIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBleGNlZWRzIHRoZSBidWRkeSBhbGxvY2F0b3ImIzM5O3NcbiYjNDM7XHQgKiBtYXhpbXVtIG9yZGVyIChvcmRlci0xMCwgNE1CKS5cbiYjNDM7XHQgKi9cbiBcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdChsZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiBcdGlmICghYWRkcilcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMjg1LDcgJiM0MzszMDcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIHF1b3RlX2RhdGFfbGVuKTtcbiBcbiBcdC8qIFVwZGF0ZSBRdW90ZSBidWZmZXIgaGVhZGVyICovXG4gXHRxdW90ZV9idWYtXHUwMDNldmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSO1xuQEAgLTI5Niw3ICYjNDM7MzE4LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRlcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcJiMzNDtHZXRRdW90ZSBoeXBlcmNhbGwgZmFpbGVkLCBzdGF0dXM6JWxseFxcblwmIzM0OywgZXJyKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5AQCAtMzE1LDcgJiM0MzszMzcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4mIzQzO1x0aWYgKFREWF9RVU9URV9CVUZfTEVOKG91dF9sZW4pIFx1MDAzZSBxdW90ZV9kYXRhX2xlbilcbiBcdFx0cmV0dXJuIC1FRkJJRztcbiBcbiBcdGJ1ZiA9IGt2bWVtZHVwKHF1b3RlX2J1Zi1cdTAwM2VkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTtcbkBAIC00MTcsNyAmIzQzOzQzOSwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWluaXRfbXI7XG4gXG4tXHRxdW90ZV9kYXRhID0gYWxsb2NfcXVvdGVfYnVmKCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgYnVmZmVyIHNpemUgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlIFRELFxuJiM0MztcdCAqIGV2ZW4gYWZ0ZXIgYSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHF1b3RlX2RhdGFfbGVuID0gUEFHRV9BTElHTihnZXRfcXVvdGVfYnVmX3NpemUoKSk7XG4mIzQzO1x0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoIXF1b3RlX2RhdGEpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTQzMSw3ICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbiBcdHJldHVybiAwO1xuIFxuIGZyZWVfcXVvdGU6XG4tXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcbiYjNDM7XHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gZnJlZV9taXNjOlxuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gZGVpbml0X21yOlxuQEAgLTQ0NCw3ICYjNDM7NDcxLDcgQEAgbW9kdWxlX2luaXQodGR4X2d1ZXN0X2luaXQpO1xuIHN0YXRpYyB2b2lkIF9fZXhpdCB0ZHhfZ3Vlc3RfZXhpdCh2b2lkKVxuIHtcbiBcdHRzbV9yZXBvcnRfdW5yZWdpc3RlcihcdTAwMjZ0ZHhfdHNtX29wcyk7XG4tXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcbiYjNDM7XHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiBcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgYW5kIHVwZGF0ZXMgdGhlIFREWCBndWVzdCBkcml2ZXIgKGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYykgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGUgcXVvdGUgYnVmZmVyIGJhc2VkIG9uIFREWCBtZXRhZGF0YS4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBhcyBhbiBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgbGFjayB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFREWC4gRHVyaW5nIGJvb3QsIHRkeF9lYXJseV9pbml0KCkgdmVyaWZpZXMgQ1BVSUQgbGVhZiAweDIxIGZvciB0aGUgVERYIHNpZ25hdHVyZSwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzbyBYODZfRkVBVFVSRV9URFhfR1VFU1QgaXMgbmV2ZXIgc2V0LiBDb25zZXF1ZW50bHksIHRkeF9ndWVzdF9pbml0KCkgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aCAtRU5PREVWIGFuZCB0aGUgZHJpdmVyIG5ldmVyIHJlZ2lzdGVycyBvciBleGVjdXRlcy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUgYW5kIGNhbm5vdCBydW4gaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWExMmM2NDE2ZjRiOWNhZTE0ZDU0Njc5ZDNhMzE5MzcwZGNkZGJjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwppbmRleCBmOTA0YTYzNmQ0NDliLi5iOTgwNThkN2QyNDRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwpAQCAtMTk4LDYgJiM0MzsxOTgsMzAgQEAgdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0ZHhfaGNhbGxfZ2V0X3F1b3RlKTsKIAomIzQzOy8qKgomIzQzOyAqIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSAtIEdldCB0aGUgbWF4aW11bSBURCBRdW90ZSBzaXplCiYjNDM7ICoKJiM0MzsgKiBSZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBURCBRdW90ZSBmcm9tIGEgNC1ieXRlIFREIG1ldGFkYXRhIGZpZWxkLiBUaGUgVERYCiYjNDM7ICogZ3Vlc3QgZHJpdmVyIHVzZXMgaXQgdG8gc2l6ZSB0aGUgYnVmZmVyIGZvciBRdW90ZXMuIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdAomIzQzOyAqIHN1cHBvcnQgdGhpcyBmaWVsZCBhbmQgcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqCiYjNDM7ICogVGhlIHJlcG9ydGVkIHNpemUgY292ZXJzIGV2ZXJ5IFF1b3RlIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSwKJiM0MzsgKiBpbmNsdWRpbmcgU0dYLWJhc2VkIFF1b3Rlcy4KJiM0MzsgKgomIzQzOyAqIEEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIHJlcG9ydGVkIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE1heGltdW0gUXVvdGUgc2l6ZSBpbiBieXRlcyBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCB2YWwsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdGRnX3ZtX3JkKFREQ1NfUVVPVEVfTUFYX1NJWkUsICZhbXA7dmFsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCA/IDAgOiAodTMyKXZhbDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodGR4X2dldF9tYXhfcXVvdGVfc2l6ZSk7CiYjNDM7CiBzdGF0aWMgdm9pZCBfX25vcmV0dXJuIHRkeF9wYW5pYyhjb25zdCBjaGFyICptc2cpCiB7CiAJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oCmluZGV4IGYyMGU5MWQ3YWMzNWIuLjZmMTA2ZDRiMWE1ODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmgKQEAgLTUwLDYgJiM0Mzs1MCw3IEBACiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi8KICNkZWZpbmUgVERDU19DT05GSUdfRkxBR1MJCTB4MTExMDAwMDMwMDAwMDAxNgogI2RlZmluZSBURENTX1REX0NUTFMJCQkweDExMTAwMDAzMDAwMDAwMTcKJiM0MzsjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkUJCTB4OTAxMDAwMDIwMDAwMDAwNwogI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTCQkweDkxMDAwMDAwMDAwMDAwMTAKICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRUQJMHg5MTAwMDAwMDAwMDAwMDE5CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKaW5kZXggODllOTdkNTc2MWQ4OS4uYTc1ZGJiZTAwNGJkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKQEAgLTgzLDYgJiM0Mzs4Myw4IEBAIGludCB0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIodTggaW5kZXgsIHU4ICpkYXRhKTsKIAogdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpOwogCiYjNDM7dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZCk7CiYjNDM7CiB2b2lkIF9faW5pdCB0ZHhfZHVtcF9hdHRyaWJ1dGVzKHU2NCB0ZF9hdHRyKTsKIHZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMKaW5kZXggZDAzMDNlMzFlODE2MS4uNzIyNGE2NmI2NWQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYwpAQCAtMTYyLDcgJiM0MzsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycCkKICAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXMKICAqIGxhcmdlciBRdW90ZSBzaXplICh+MTAwSykuCiAgKi8KLSNkZWZpbmUgR0VUX1FVT1RFX0JVRl9TSVpFCQlTWl8xMjhLCiYjNDM7I2RlZmluZSBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRQlTWl8xMjhLCiAKICNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVIJCTEKIApAQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycCkKICNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1MJCTAKICNkZWZpbmUgR0VUX1FVT1RFX0lOX0ZMSUdIVAkJMHhmZmZmZmZmZmZmZmZmZmZmCiAKLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU4JCShHRVRfUVVPVEVfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IHRkeF9xdW90ZV9idWYpKQomIzQzOyNkZWZpbmUgVERYX1FVT1RFX0JVRl9MRU4obikJCXN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pCiAKIC8qIHN0cnVjdCB0ZHhfcXVvdGVfYnVmOiBGb3JtYXQgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIuCiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC4KQEAgLTE5MSw4ICYjNDM7MTkxLDkgQEAgc3RydWN0IHRkeF9xdW90ZV9idWYgewogCXU4IGRhdGFbXTsKIH07CiAKLS8qIFF1b3RlIGRhdGEgYnVmZmVyICovCiYjNDM7LyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqLwogc3RhdGljIHZvaWQgKnF1b3RlX2RhdGE7CiYjNDM7c3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjsKIAogLyogTG9jayB0byBzdHJlYW1saW5lIHF1b3RlIHJlcXVlc3RzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spOwpAQCAtMjA5LDkgJiM0MzsyMTAsOCBAQCBzdGF0aWMgbG9uZyB0ZHhfZ2V0X3JlcG9ydDAoc3RydWN0IHRkeF9yZXBvcnRfcmVxIF9fdXNlciAqcmVxKQogCQkJICAgICBVU0VSX1NPQ0tQVFIocmVxLSZndDt0ZHJlcG9ydCkpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewotCXNpemVfdCBsZW4gPSBQQUdFX0FMSUdOKEdFVF9RVU9URV9CVUZfU0laRSk7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gbGVuICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAKIAlpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCkpIHsKQEAgLTIyMiwxMiAmIzQzOzIyMiwzNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpCiAJZnJlZV9wYWdlc19leGFjdChidWYsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYodm9pZCkKJiM0MzsvKgomIzQzOyAqIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCBmb3IgYSBRdW90ZS4gVGhpcyBjb3ZlcnMgYWxsIFF1b3RlCiYjNDM7ICogdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJdTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CiYjNDM7CWlmIChxdW90ZV9zaXplKQomIzQzOwkJLyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqLwomIzQzOwkJbGVuID0gVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSk7CiYjNDM7CWVsc2UKJiM0MzsJCS8qIE9sZGVyIFREWCBtb2R1bGVzIGRvbiYjMzk7dCByZXBvcnQgdGhlIHNpemUsIHVzZSB0aGUgZGVmYXVsdCAqLwomIzQzOwkJbGVuID0gR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkU7CiYjNDM7CiYjNDM7CXJldHVybiBsZW47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYoc2l6ZV90IGxlbikKIHsKLQlzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpOwogCXVuc2lnbmVkIGludCBjb3VudCA9IGxlbiAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXZvaWQgKmFkZHI7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJiMzOTtzCiYjNDM7CSAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLgomIzQzOwkgKi8KIAlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI4NSw3ICYjNDM7MzA3LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAlpZiAoZGVzYy0mZ3Q7aW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CW1lbXNldChxdW90ZV9kYXRhLCAwLCBxdW90ZV9kYXRhX2xlbik7CiAKIAkvKiBVcGRhdGUgUXVvdGUgYnVmZmVyIGhlYWRlciAqLwogCXF1b3RlX2J1Zi0mZ3Q7dmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSOwpAQCAtMjk2LDcgJiM0MzszMTgsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQllcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CWVyciA9IHRkeF9oY2FsbF9nZXRfcXVvdGUocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7R2V0UXVvdGUgaHlwZXJjYWxsIGZhaWxlZCwgc3RhdHVzOiVsbHhcbiYjMzQ7LCBlcnIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMxNSw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAogCW91dF9sZW4gPSBSRUFEX09OQ0UocXVvdGVfYnVmLSZndDtvdXRfbGVuKTsKIAotCWlmIChvdXRfbGVuICZndDsgVERYX1FVT1RFX01BWF9MRU4pCiYjNDM7CWlmIChURFhfUVVPVEVfQlVGX0xFTihvdXRfbGVuKSAmZ3Q7IHF1b3RlX2RhdGFfbGVuKQogCQlyZXR1cm4gLUVGQklHOwogCiAJYnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLSZndDtkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTQxNyw3ICYjNDM7NDM5LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpCiAJaWYgKHJldCkKIAkJZ290byBkZWluaXRfbXI7CiAKLQlxdW90ZV9kYXRhID0gYWxsb2NfcXVvdGVfYnVmKCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBidWZmZXIgc2l6ZSByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVEQsCiYjNDM7CSAqIGV2ZW4gYWZ0ZXIgYSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlLgomIzQzOwkgKi8KJiM0MzsJcXVvdGVfZGF0YV9sZW4gPSBQQUdFX0FMSUdOKGdldF9xdW90ZV9idWZfc2l6ZSgpKTsKJiM0MzsJcXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7CiAJaWYgKCFxdW90ZV9kYXRhKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcbiYjMzQ7KTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQzMSw3ICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZCkKIAlyZXR1cm4gMDsKIAogZnJlZV9xdW90ZToKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogZnJlZV9taXNjOgogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiBkZWluaXRfbXI6CkBAIC00NDQsNyAmIzQzOzQ3MSw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTsKIHN0YXRpYyB2b2lkIF9fZXhpdCB0ZHhfZ3Vlc3RfZXhpdCh2b2lkKQogewogCXRzbV9yZXBvcnRfdW5yZWdpc3RlcigmYW1wO3RkeF90c21fb3BzKTsKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiAJdGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcXVvdGUgc2l6ZS4gSSBzZWUgY2hhbmdlcyBpbiBgdGR4LmNgLCBhZGRpbmcgYSBmdW5jdGlvbiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCB0aGF0IGNhbGxzIGB0ZGdfdm1fcmQoKWAgd2l0aCBhIG5ldyBjb25zdGFudCBgVERDU19RVU9URV9NQVhfU0laRWAuIFRoZXJlIGFyZSBhbHNvIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgdXBkYXRlcyBkZWZpbmluZyB0aGUgY29uc3RhbnQgYW5kIGRlY2xhcmluZyB0aGUgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCB0aGUgYHRkeC1ndWVzdC5jYCBkcml2ZXIgaXMgdXNpbmcgdGhpcyBuZXcgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgc2l6ZSBhIHF1b3RlIGJ1ZmZlciBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIGNvbnRhaW5zIHNvbWUgc2l6ZSBjaGVja3MgdGhhdCB1c2UgdGhpcyBpbmZvcm1hdGlvbi4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgKmFjdHVhbGx5KiBydW4gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBJIGhhdmUgdG8gYmUgdmVyeSBjYXJlZnVsIGhlcmUuIE15IHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUsIGl0JiMzOTtzIGEgbm8tZ28sIGV2ZW4gaWYgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgpMZXQgbWUgdGhpbmvigKYgV2hhdCBleGFjdGx5IGlzIEludGVsIFREWD8gSSByZWNhbGwgaXQmIzM5O3MgcmVsYXRlZCB0byBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgd2hpY2ggaXMgYSBjb25maWRlbnRpYWwgY29tcHV0aW5nIHRlY2hub2xvZ3kuIE9rYXksIGJ1dCBjYW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZXZlbiAqcnVuKiBURFggZ3Vlc3RzPyBJcyB0aGlzIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBwYXRoLCBgdGR4X2d1ZXN0X2luaXRgLCBldmVyIGFjdHVhbGx5IGhpdCBpbiB0aG9zZSBlbnZpcm9ubWVudHM/IE9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyB0aGUgaW1wb3J0YW5jZSBvZiBvbmx5IGZ1enppbmcgY29kZSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGNvdWxkIGJlIGEgZGVhbGJyZWFrZXIuCgpJIG5lZWQgdG8gYmUgdmVyeSBwcmVjaXNlIGhlcmUuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG9ubHkgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgY2hhbmdlcyBmYWxsIGludG8gY2VydGFpbiBjYXRlZ29yaWVzLiBUaGUga2V5IG9uZSBoZXJlIGlzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsg4oCTIERvZXMgVERYIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5PyBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHRkeC1ndWVzdGAgZHJpdmVyIGluaXRpYWxpemVzIHByb3Blcmx5IGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gaG93IGB0ZHhfZ3Vlc3RfaW5pdGAgYWN0dWFsbHkgd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZHJpdmVyIHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGFuZCB3aGVuIHRoYXQgY29kZSBpcyBhY3R1YWxseSBoaXQuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGRlY2lzaW9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5NTpcdH1cbiAzOTY6XHRcbiAzOTc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0ZHhfZ3Vlc3RfZm9wcyA9IHtcbiAzOTg6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIDM5OTpcdFx0LnVubG9ja2VkX2lvY3RsID0gdGR4X2d1ZXN0X2lvY3RsLFxuIDQwMDpcdH07XG4gNDAxOlx0XG4gNDAyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRkeF9hdHRyX2dyb3Vwc1tdID0ge1xuIDQwMzpcdFx0TlVMTCwgLyogbWVhc3VyZW1lbnRzICovXG4gNDA0Olx0XHROVUxMXG4gNDA1Olx0fTtcbiA0MDY6XHRcbiA0MDc6XHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdGR4X21pc2NfZGV2ID0ge1xuIDQwODpcdFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbiA0MDk6XHRcdC5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUixcbiA0MTA6XHRcdC5mb3BzID0gXHUwMDI2dGR4X2d1ZXN0X2ZvcHMsXG4gNDExOlx0XHQuZ3JvdXBzID0gdGR4X2F0dHJfZ3JvdXBzLFxuIDQxMjpcdH07XG4gNDEzOlx0XG4gNDE0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcbiA0MTU6XHRcdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXG4gNDE2Olx0XHR7fVxuIDQxNzpcdH07XG4gNDE4Olx0TU9EVUxFX0RFVklDRV9UQUJMRSh4ODZjcHUsIHRkeF9ndWVzdF9pZHMpO1xuIDQxOTpcdFxuIDQyMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHNtX3JlcG9ydF9vcHMgdGR4X3RzbV9vcHMgPSB7XG4gNDIxOlx0XHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuIDQyMjpcdFx0LnJlcG9ydF9uZXcgPSB0ZHhfcmVwb3J0X25ldyxcbiA0MjM6XHRcdC5yZXBvcnRfYXR0cl92aXNpYmxlID0gdGR4X3JlcG9ydF9hdHRyX3Zpc2libGUsXG4gNDI0Olx0XHQucmVwb3J0X2Jpbl9hdHRyX3Zpc2libGUgPSB0ZHhfcmVwb3J0X2Jpbl9hdHRyX3Zpc2libGUsXG4gNDI1Olx0fTtcbiA0MjY6XHRcbiA0Mjc6XHRzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxuIDQyODpcdHtcbiA0Mjk6XHRcdGludCByZXQ7XG4gNDMwOlx0XG4gNDMxOlx0XHRpZiAoIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcykpXG4gNDMyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQzMzpcdFxuIDQzNDpcdFx0dGR4X2F0dHJfZ3JvdXBzWzBdID0gdGR4X21yX2luaXQoKTtcbiA0MzU6XHRcdGlmIChJU19FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKSlcbiA0MzY6XHRcdFx0cmV0dXJuIFBUUl9FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKTtcbiA0Mzc6XHRcbiA0Mzg6XHRcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiA0Mzk6XHRcdGlmIChyZXQpXG4gNDQwOlx0XHRcdGdvdG8gZGVpbml0X21yO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0LypcbiA0NDM6XHRcdCAqIFRoZSBidWZmZXIgc2l6ZSByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVEQsXG4gNDQ0Olx0XHQgKiBldmVuIGFmdGVyIGEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIHByZXNlbnRlZCBhcyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgVERYIEd1ZXN0IEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdGR4X2d1ZXN0X2luaXQoKWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBjaGVjazogYGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSkgcmV0dXJuIC1FTk9ERVY7YC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyB2ZXJpZnlpbmcgc29tZXRoaW5nIGFib3V0IHRoZSBDUFUgYmVmb3JlIHByb2NlZWRpbmcuIEl0JiMzOTtzIHVzaW5nIGB4ODZfbWF0Y2hfY3B1KClgIHdpdGggYHRkeF9ndWVzdF9pZHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGB0ZHhfZ3Vlc3RfaWRzYCBhcmUsIHNwZWNpZmljYWxseSBob3cgdGhleSBhcmUgYmVpbmcgdXNlZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQgaXMgcmV0dXJuaW5nIGEgZGV2aWNlIG5vdCBmb3VuZCBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBndWVzdCBoYXMgbm90IHJlcG9ydGVkIGl0c2VsZiBhcyBjYXBhYmxlLgoKSXQgbG9va3MgbGlrZSB0aGUgYHg4Nl9tYXRjaF9jcHUoKWAgZnVuY3Rpb24gaXMgY2FsbGluZyBgWDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKWAuICBBaCwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGNoZWNrIGZvciB0aGUgVERYIGd1ZXN0IGZlYXR1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXM6IHdoZXJlIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGFjdHVhbGx5ICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBmZWF0dXJlIGZsYWcgaXMgc2V0LiBJdCB3aWxsIGxpa2VseSBiZSBpbiBzb21lIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXIgZmlsZSBvciBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZ28gaHVudCB0aGF0IGRvd24gdG8gdW5kZXJzdGFuZCB3aGF0IGNyaXRlcmlhIG11c3QgYmUgbWV0IGZvciB0aGlzIGluaXRpYWxpemF0aW9uIHRvIHN1Y2NlZWQgYW5kIHdoeSB0aGlzIC1FTk9ERVYgZXJyb3IgbWlnaHQgYmUgaGFwcGVuaW5nLiBJcyB0aGlzIGEgQ1BVSUQgYml0PyBBbiBNU1IgdmFsdWU/IEdvdHRhIGZpbmQgdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfRkVBVFVSRV9URFhfR1VFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEzNj12b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDUtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTQ2Olx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfR1VFU1QpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE0Ny1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzOS0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXHRcdCggOCozMiYjNDM7MjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjI0MDojZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFx0XHQoIDgqMzImIzQzOzIyKSAvKiBcJiMzNDt0ZHhfZ3Vlc3RcJiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjQxLVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9MzQ9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwwKHVuc2lnbmVkIGludCBucilcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDozODpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM5LVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIDAsIDAsIDAsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9NDg9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwxKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUxLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo1MjpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUzLVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCAwLCAwLCAwKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTYyPXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMih1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02Ni1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6Njc6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02OC1cdFx0cmV0dXJuIHRkeF9rdm1faHlwZXJjYWxsKG5yLCBwMSwgcDIsIDAsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9Nzc9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwzKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgxLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo4MjpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgzLVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9OTI9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGw0KHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo5ODpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk5LVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIHA0KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oPTg9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfYWNjZXB0X21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5LmgtMTAtXHQvKiBQbGF0Zm9ybS1zcGVjaWZpYyBtZW1vcnktYWNjZXB0YW5jZSBjYWxsIGdvZXMgaGVyZSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaDoxMTpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpIHtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5LmgtMTItXHRcdGlmICghdGR4X2FjY2VwdF9tZW1vcnkoc3RhcnQsIGVuZCkpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9OTk9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTAyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTAzOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEwNC1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTEyMz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwzKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMjctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMjg6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTI5LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTQ4PXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDQodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE1Mi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjE1MzpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNTQtXHRcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNzM9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTc4LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTc5Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE4MC1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIwMT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw2KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMDYtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMDc6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjA4LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgMCwgMCxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0yMjg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNyh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjM0LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MjM1Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIzNi1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9NDQwPXZvaWQgZ3Vlc3RfZm9yY2VfbXRycl9zdGF0ZShzdHJ1Y3QgbXRycl92YXJfcmFuZ2UgKnZhciwgdW5zaWduZWQgaW50IG51bV92YXIsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy00NjItXHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWEVOUFYpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYzo0NjM6XHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtNDY0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYz05Mzg9dm9pZCBfX2luaXQgc2VsZWN0X2lkbGVfcm91dGluZSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMtOTUyLVx0XHRzdGF0aWNfY2FsbF91cGRhdGUoeDg2X2lkbGUsIG13YWl0X2lkbGUpO1xuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYzo5NTM6XHR9IGVsc2UgaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkge1xuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTQtXHRcdHByX2luZm8oXCYjMzQ7dXNpbmcgVERYIGF3YXJlIGlkbGUgcm91dGluZVxcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TPTEyOT1TWU1fQ09ERV9TVEFSVF9MT0NBTF9OT0FMSUdOKGlkZW50aXR5X21hcHBlZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMtMjA0LVx0YW5kbFx0JChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfTEE1NyksICVyMTNkXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlM6MjA1Olx0QUxURVJOQVRJVkUgXCYjMzQ7XCYjMzQ7LCBfX3N0cmluZ2lmeShvcmwgJFg4Nl9DUjRfTUNFLCAlcjEzZCksIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TLTIwNi1cdG1vdnFcdCVyMTMsICVjcjRcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB0ZHhfZ3Vlc3RfaWRzW10gPSB7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDE1Olx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTYtXHR7fVxuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMiYjNDM7MjIpIC8qIFwmIzM0O3RkeF9ndWVzdFwmIzM0OyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBURFggRWFybHkgSW5pdGlhbGl6YXRpb24gYW5kIEd1ZXN0IERldGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IG9mIGB0ZHhfZWFybHlfaW5pdGAgYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIFREWCBndWVzdCBlbnZpcm9ubWVudCBpcyBpbml0aWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9tZW50IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBpdCYjMzk7cyBvcGVyYXRpbmcgd2l0aGluIGEgVERYIGNvbnRleHQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIFREWCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgZWFybHktc3RhZ2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8ga25vdyAqcHJlY2lzZWx5KiB3aGF0IHRoZSBkZXRlY3Rpb24gbWVjaGFuaXNtcyBhcmUsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3N1bXB0aW9ucyB0aGV5IG1ha2UgYWJvdXQgdGhlIGhhcmR3YXJlIG9yIGZpcm13YXJlIGVudmlyb25tZW50LiBBcmUgd2UgcmVseWluZyBzb2xlbHkgb24gQ1BVSUQgZmVhdHVyZXMsIG1lbW9yeSBtYXAgaW5zcGVjdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZD8gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbG93LWxldmVsIGRldGFpbHMuIFRoaXMgYW5hbHlzaXMgd2lsbCBndWlkZSBteSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIFREWCBndWVzdCBicmluZy11cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZWFybHlfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDAyPXN0YXRpYyBpbnQgdGR4X2VuY19zdGF0dXNfY2hhbmdlX3ByZXBhcmUodW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMDYtXHQgKiBPbmx5IGhhbmRsZSBzaGFyZWQtXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uIGhlcmUuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDA3Olx0ICogU2VlIHRoZSBjb21tZW50IGluIHRkeF9lYXJseV9pbml0KCkuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDA4LVx0ICovXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTAxNT1zdGF0aWMgaW50IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMTktXHQgKiBPbmx5IGhhbmRsZSBwcml2YXRlLVx1MDAzZXNoYXJlZCBjb252ZXJzaW9uIGhlcmUuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDIwOlx0ICogU2VlIHRoZSBjb21tZW50IGluIHRkeF9lYXJseV9pbml0KCkuXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDIxLVx0ICovXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEyMj1zdGF0aWMgX19pbml0IHZvaWQgdGR4X2Fubm91bmNlKHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTEzNS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExMzY6dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzcte1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTU3PXN0cnVjdCB2ZV9pbmZvIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC02OS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjcwOnZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNzEtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9ODk9dm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtOTItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Vhcmx5X2luaXQodm9pZCkgeyB9O1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtOTQtc3RhdGljIGlubGluZSB2b2lkIHRkeF9oYWx0KHZvaWQpIHsgfTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmM9MjIyPWFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgX19pbml0IF9fbm9yZXR1cm4geDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcmVhbF9tb2RlX2RhdGEpXG4tLVxuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jLTI3OC1cdC8qIE5lZWRlZCBiZWZvcmUgY2NfcGxhdGZvcm1faGFzKCkgY2FuIGJlIHVzZWQgZm9yIFREWCAqL1xuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jOjI3OTpcdHRkeF9lYXJseV9pbml0KCk7XG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMtMjgwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFREWCBFYXJseSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYHRkeF9lYXJseV9pbml0YCBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSB3b3JrcyBvbiB4ODYsIGVzcGVjaWFsbHkgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIGFuZCBib290LWxldmVsIHBlcnNwZWN0aXZlLiBTbywgSSBrbm93IHRoaXMgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBURFggZW52aXJvbm1lbnQuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG93LWxldmVsIHN0dWZmIOKAkyB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3IgVERYIGNhcGFiaWxpdGllcywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgYW5kIHBlcmhhcHMgZXZlbiBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgVERYIG1vZHVsZSBpdHNlbGYuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2lsaWNvbiwgdGhlIGJvb3Rsb2FkZXIsIGFuZCBvdGhlciBlYXJseS1zdGFnZSBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0uIEkgYW50aWNpcGF0ZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSYjMzk7cyBURFgtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGFuZCByZWdpc3RlcnMuIEl0JiMzOTtzIGdvaW5nIHRvIGJlIGtleSB0byB2ZXJpZnkgaG93IHRoZXNlIGVhcmx5IGludGVyYWN0aW9ucyBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGV4cGVjdGF0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBhbmQgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW1wbGVtZW50YXRpb24gYWxpZ25zIHdpdGggY3VycmVudCBzZWN1cml0eSBiZXN0IHByYWN0aWNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGZ1bmN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTMwOlx0XHR0ZHhfZHVtcF9hdHRyaWJ1dGVzKGFyZ3MucmR4KTtcbjExMzE6XHRcbjExMzI6XHRcdHRkZ192bV9yZChURENTX1REX0NUTFMsIFx1MDAyNmNvbnRyb2xzKTtcbjExMzM6XHRcdHRkeF9kdW1wX3RkX2N0bHMoY29udHJvbHMpO1xuMTEzNDpcdH1cbjExMzU6XHRcbjExMzY6XHR2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuMTEzNzpcdHtcbjExMzg6XHRcdHU2NCBjY19tYXNrO1xuMTEzOTpcdFx0dTMyIGVheCwgc2lnWzNdO1xuMTE0MDpcdFxuMTE0MTpcdFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFx1MDAyNmVheCwgXHUwMDI2c2lnWzBdLCBcdTAwMjZzaWdbMl0sICBcdTAwMjZzaWdbMV0pO1xuMTE0MjpcdFxuMTE0MzpcdFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxuMTE0NDpcdFx0XHRyZXR1cm47XG4xMTQ1Olx0XG4xMTQ2Olx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHQvKiBUU0MgaXMgdGhlIG9ubHkgcmVsaWFibGUgY2xvY2sgaW4gVERYIGd1ZXN0ICovXG4xMTQ5Olx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfSU5URUw7XG4xMTUyOlx0XG4xMTUzOlx0XHQvKiBDb25maWd1cmUgdGhlIFREICovXG4xMTU0Olx0XHR0ZHhfc2V0dXAoXHUwMDI2Y2NfbWFzayk7XG4xMTU1Olx0XG4xMTU2Olx0XHRjY19zZXRfbWFzayhjY19tYXNrKTtcbjExNTc6XHRcbjExNTg6XHRcdC8qXG4xMTU5Olx0XHQgKiBBbGwgYml0cyBhYm92ZSBHUEEgd2lkdGggYXJlIHJlc2VydmVkIGFuZCBrZXJuZWwgdHJlYXRzIHNoYXJlZCBiaXRcbjExNjA6XHRcdCAqIGFzIGZsYWcsIG5vdCBhcyBwYXJ0IG9mIHBoeXNpY2FsIGFkZHJlc3MuXG4xMTYxOlx0XHQgKlxuMTE2MjpcdFx0ICogQWRqdXN0IHBoeXNpY2FsIG1hc2sgdG8gb25seSBjb3ZlciB2YWxpZCBHUEEgYml0cy5cbjExNjM6XHRcdCAqL1xuMTE2NDpcdFx0cGh5c2ljYWxfbWFzayBcdTAwMjY9IGNjX21hc2sgLSAxO1xuMTE2NTpcdFxuMTE2NjpcdFx0LypcbjExNjc6XHRcdCAqIFRoZSBrZXJuZWwgbWFwcGluZyBzaG91bGQgbWF0Y2ggdGhlIFREWCBtZXRhZGF0YSBmb3IgdGhlIHBhZ2UuXG4xMTY4Olx0XHQgKiBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKCkgY2FuIHRvdWNoIG1lbW9yeSAqYWRqYWNlbnQqIHRvIHRoYXQgd2hpY2ggaXNcbjExNjk6XHRcdCAqIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGNhbiBjYXRjaCBldmVuIF9tb21lbnRhcnlfIG1pc21hdGNoZXMuICBCYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFREWCBHdWVzdCBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIExldCBtZSBkaWcgaW50byB0aGlzIGB0ZHhfZWFybHlfaW5pdGAgY29kZSBzbmlwcGV0LiBJIHNlZSBhIGBjcHVpZF9jb3VudGAgY2FsbCB3aXRoIGBURFhfQ1BVSURfTEVBRl9JRGAgYW5kIGEgY29tcGFyaXNvbiBhZ2FpbnN0IGBURFhfSURFTlRgLiBSaWdodCwgdGhhdCYjMzk7cyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgaGFyZHdhcmUgY29uZmlkZW50aWFsIGNvbXB1dGluZy4gQnV0LCBjYW4gUUVNVSBldmVuIGVtdWxhdGUgVERYPyBBbmQgbW9yZSBzcGVjaWZpY2FsbHksIGRvZXMgc3RhbmRhcmQgUUVNVSBvciBzb21ldGhpbmcgbGlrZSBhIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpbnN0YW5jZSAqcnVuKiBhIFREWCBndWVzdD8KCldhaXQsIFREWCBkZW1hbmRzIFREWCBoYXJkd2FyZSDigJMgU2FwcGhpcmUgUmFwaWRzIG9yIGxhdGVyIFhlb24sIHJpZ2h0PyBQbHVzIGhvc3Qgc3VwcG9ydCBsaWtlIE1DSEVDSywgU0VBTSwgYSBURFggbW9kdWxlIGluIFNFQU0gZmlybXdhcmUsIGFuZCBLVk0gVERYIHBhdGNoZXMuIFNvLCBpcyBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUgcmVhbGx5IGNvbXBhdGlibGUgd2l0aCBydW5uaW5nIFREWD8KCkFoLCBva2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBwcm9qZWN0JiMzOTtzIGluc3RydWN0aW9ucy4gU2VjdGlvbnMgMSBhbmQgMiBhcmUga2V5LiAmIzM0O1JlYWNoYWJsZSBjb2RlJiMzNDsgaXMgdGhlIGdhdGUuIEZ1enppbmcgaXMgKm9ubHkqIHVzZWZ1bCBmb3IgY29kZSB0aGF0ICpleGVjdXRlcyogaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0Ugd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzLiBBbmQgdGhlbiBzZWN0aW9uIDIgdGFsa3MgYWJvdXQgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyDigJMgdGhpbmdzIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIGEgVERYIGd1ZXN0IGVmZmVjdGl2ZWx5ICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgaW4gdGhpcyBjb250ZXh0PyBEb2VzIGl0IGZhbGwgdW5kZXIgdGhhdCBjYXRlZ29yeSwgZ2l2ZW4gdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cz8KCkkgbmVlZCB0byBmaWd1cmUgdGhpcyBvdXQgYmVmb3JlIEkgcHJvY2VlZC4gTGV0JiMzOTtzIHNlZSBob3cgc3l6a2FsbGVyIGhhbmRsZXMgY29uZmlkZW50aWFsIGNvbXB1dGluZyBlbnZpcm9ubWVudHMgZ2VuZXJhbGx5LCBhbmQgaWYgaXQgKmFjdHVhbGx5KiBmdXp6ZXMgVERYLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBzeXprYWxsZXIgZXZlbiBjb25zaWRlcnMgVERYLiBMZXQgbWUgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgdHJlZSwgR2l0IGhpc3RvcnksIG9yIGFueSBkb2N1bWVudGF0aW9uIG9uIHRoZSBgdGR4LWd1ZXN0YCBjb25jZXB0LiBQZXJoYXBzIEkgY2FuIHNlYXJjaCB0aGUgc3l6a2FsbGVyIGNvZGViYXNlIGl0c2VsZiBmb3IgbWVudGlvbnMgb2YgJiMzNDtzeXprYWxsZXImIzM0OyBvciAmIzM0O3ZpcnQvY29jbyYjMzQ7IChjb25maWRlbnRpYWwgY29tcHV0aW5nKS4KCkkmIzM5O2xsIHRyeSBhIGZldyBzZWFyY2ggdGVybXMgYW5kIGxvb2sgYXQgb3RoZXIgY29uZmlkZW50aWFsIGNvbXB1dGluZyBkcml2ZXJzLCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYFREWF9HVUVTVGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBMaW51eCBrZXJuZWwgaGFuZGxlcyBpdCBhbmQgd2hlcmUgaXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTg5Mj1jb25maWcgQkhZVkVfR1VFU1Rcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTkwMC1cbmFyY2gveDg2L0tjb25maWc6OTAxOmNvbmZpZyBJTlRFTF9URFhfR1VFU1RcbmFyY2gveDg2L0tjb25maWctOTAyLVx0Ym9vbCBcJiMzNDtJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSAtIEd1ZXN0IFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gQ29uZmxpY3RzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IG9yIGEgcG90ZW50aWFsIGNvbmZsaWN0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGFyY2gveDg2L0tjb25maWdgIGFyb3VuZCBsaW5lIDkwMS4gSSBrbm93IHRoYXQgYXJlYSBkZWFscyB3aXRoIGEgY29yZSB4ODYgYXJjaGl0ZWN0dXJlIGZlYXR1cmVzLCBzbyB0aGF0JiMzOTtzIGEgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlIGFuZCBpZiBhbnl0aGluZyByZWxldmFudCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gZnVuY3Rpb25hbGl0eS4KClRoZW4sIEkmIzM5O2xsIHBpdm90IGFuZCBjaGVjayBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBUaGlzIGFyZWEgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFREWCBndWVzdCBkcml2ZXIuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGJldHRpbmcgdGhlcmUgY291bGQgYmUgc29tZSBpbnRlcmFjdGlvbiBvciBwb3RlbnRpYWwgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBhcmNoaXRlY3R1cmUtbGV2ZWwgY29uZmlndXJhdGlvbnMgYW5kIHRoZSB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLiBIb3BlZnVsbHksIHRoaXMgY3Jvc3MtcmVmZXJlbmNlIHdpbGwgcHJvdmlkZSBzb21lIGNsYXJpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3bywgZm9jdXNpbmcgb24gYW55IHN5bWJvbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgYXQgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdFxuIDkwMTpcdGNvbmZpZyBJTlRFTF9URFhfR1VFU1RcbiA5MDI6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgLSBHdWVzdCBTdXBwb3J0XCYjMzQ7XG4gOTAzOlx0XHRkZXBlbmRzIG9uIFg4Nl82NCBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9JTlRFTFxuIDkwNDpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4gOTA1Olx0XHRkZXBlbmRzIG9uIEVGSV9TVFVCXG4gOTA2Olx0XHRkZXBlbmRzIG9uIFBBUkFWSVJUXG4gOTA3Olx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiA5MDg6XHRcdHNlbGVjdCBYODZfTUVNX0VOQ1JZUFRcbiA5MDk6XHRcdHNlbGVjdCBYODZfTUNFXG4gOTEwOlx0XHRzZWxlY3QgVU5BQ0NFUFRFRF9NRU1PUllcbiA5MTE6XHRcdGhlbHBcbiA5MTI6XHRcdCAgU3VwcG9ydCBydW5uaW5nIGFzIGEgZ3Vlc3QgdW5kZXIgSW50ZWwgVERYLiAgV2l0aG91dCB0aGlzIHN1cHBvcnQsXG4gOTEzOlx0XHQgIHRoZSBndWVzdCBrZXJuZWwgY2FuIG5vdCBib290IG9yIHJ1biB1bmRlciBURFguXG4gOTE0Olx0XHQgIFREWCBpbmNsdWRlcyBtZW1vcnkgZW5jcnlwdGlvbiBhbmQgaW50ZWdyaXR5IGNhcGFiaWxpdGllc1xuIDkxNTpcdFx0ICB3aGljaCBwcm90ZWN0IHRoZSBjb25maWRlbnRpYWxpdHkgYW5kIGludGVncml0eSBvZiBndWVzdFxuIDkxNjpcdFx0ICBtZW1vcnkgY29udGVudHMgYW5kIENQVSBzdGF0ZS4gVERYIGd1ZXN0cyBhcmUgcHJvdGVjdGVkIGZyb21cbiA5MTc6XHRcdCAgc29tZSBhdHRhY2tzIGZyb20gdGhlIFZNTS5cbiA5MTg6XHRcbiA5MTk6XHRlbmRpZiAjIEhZUEVSVklTT1JfR1VFU1RcbiA5MjA6XHRcbiA5MjE6XHRzb3VyY2UgXCYjMzQ7YXJjaC94ODYvS2NvbmZpZy5jcHVcJiMzNDtcbiA5MjI6XHRcbiA5MjM6XHRjb25maWcgSFBFVF9USU1FUlxuIDkyNDpcdFx0ZGVmX2Jvb2wgWDg2XzY0XG4gOTI1Olx0XHRwcm9tcHQgXCYjMzQ7SFBFVCBUaW1lciBTdXBwb3J0XCYjMzQ7IGlmIFg4Nl8zMlxuIDkyNjpcdFx0aGVscFxuIDkyNzpcdFx0ICBVc2UgdGhlIElBLVBDIEhQRVQgKEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyKSB0byBtYW5hZ2VcbiA5Mjg6XHRcdCAgdGltZSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBQSVQgYW5kIFJUQywgaWYgYSBIUEVUIGlzXG4gOTI5Olx0XHQgIHByZXNlbnQuXG4gOTMwOlx0XHQgIEhQRVQgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiB0aW1lciByZXBsYWNpbmcgbGVnYWN5IDgyNTRzLlxuIDkzMTpcdFx0ICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QXG4gOTMyOlx0XHQgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLFxuIDkzMzpcdFx0ICBhcyBpdCBpcyBvZmYtY2hpcC4gIFRoZSBpbnRlcmZhY2UgdXNlZCBpcyBkb2N1bWVudGVkXG4gOTM0Olx0XHQgIGluIHRoZSBIUEVUIHNwZWMsIHJldmlzaW9uIDEuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzg0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZToKCioqQ2hlY2tpbmcgdGhlIFREWCBHdWVzdCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBJbnRlbCYjMzk7cyBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBndWVzdCBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGtlcm5lbCB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzdHJ1Y3R1cmUsIGxpa2VseSB3aXRoIGEgbWFpbiBgQ09ORklHX1REWF9HVUVTVGAgb3B0aW9uIGFzIHRoZSB0b3AtbGV2ZWwgY29udHJvbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW50IG9wdGlvbnMsIHRvbyDigJMgbWF5YmUgdGhpbmdzIHRoYXQgZW5hYmxlIHNwZWNpZmljIGZlYXR1cmVzIGxpa2UgbWVtb3J5IGVuY3J5cHRpb24sIGF0dGVzdGF0aW9uIHN1cHBvcnQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgdmlydHVhbGl6YXRpb24gZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyBsaWtlIEtWTS4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBvcHRpb25zIGZvciBkZWJ1ZyBvciBsb2dnaW5nLCBhbmQgd2hhdCBsZXZlbCBvZiBncmFudWxhcml0eSB0aGV5IG9mZmVyLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgaGVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gY29uZmlndXJlIGEgVERYIGd1ZXN0IHByb3Blcmx5IGFuZCB3aGF0IGxldmVycyBJIGNhbiBwdWxsIHRvIG9wdGltaXplIGl0cyBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBwb3N0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtURFhfR1VFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfU0VWX0dVRVNUKVx0XHQmIzQzOz0gc2V2LWd1ZXN0L1xuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfSU5URUxfVERYX0dVRVNUKVx0JiM0Mzs9IHRkeC1ndWVzdC9cbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVx0JiM0Mzs9IHRkeC1ob3N0L1xuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnOjE6Y29uZmlnIFREWF9HVUVTVF9EUklWRVJcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtURFggR3Vlc3QgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZzozOlx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfR1VFU1RcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTQtXHRzZWxlY3QgVFNNX1JFUE9SVFNcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfVERYX0dVRVNUX0RSSVZFUikgJiM0Mzs9IHRkeC1ndWVzdC5vXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpcdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE2LVx0e31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIFREWCBHdWVzdCBEcml2ZXIgS2NvbmZpZyBFbnRyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgVERYIEd1ZXN0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgYFREWF9HVUVTVF9EUklWRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZS4gSXQmIzM5O3MgYSB0cmlzdGF0ZSwgc28gaXQgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBidWlsdC1pbiwgb3IgZGlzYWJsZWQuIFRoZSBkZXBlbmRlbmN5IG9uIGBJTlRFTF9URFhfR1VFU1RgIGlzIGV4cGVjdGVkLCBvZiBjb3Vyc2UuIFdlIG9ubHkgd2FudCB0aGlzIGRyaXZlciBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEludGVsIFREWCBndWVzdCBlbnZpcm9ubWVudC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSBpcyB0aGUgYHNlbGVjdCBUU01fUkVQT1JUU2AuIFRoYXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gd2hhdCB0aGF0IGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHB1bGxlZCBpbi4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyByZWxhdGVkIHRvIFRydXN0ZWQgU3lzdGVtIE1lbW9yeSByZXBvcnRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciBpdC4gU28gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBhdCBgZHJpdmVycy92aXJ0L2NvY28vdHNtLmNgLCBvciBtYXliZSBzb21lIHJlbGF0ZWQgZmlsZSwgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGF0IGBUU01fUkVQT1JUU2Agc3ltYm9sLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RTTV9SRVBPUlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydC9jb2NvL2FybS1jY2EtZ3Vlc3QvS2NvbmZpZz0xPWNvbmZpZyBBUk1fQ0NBX0dVRVNUXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vYXJtLWNjYS1ndWVzdC9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIEFSTTY0XG5kcml2ZXJzL3ZpcnQvY29jby9hcm0tY2NhLWd1ZXN0L0tjb25maWc6NDpcdHNlbGVjdCBUU01fUkVQT1JUU1xuZHJpdmVycy92aXJ0L2NvY28vYXJtLWNjYS1ndWVzdC9LY29uZmlnLTUtXHRoZWxwXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvS2NvbmZpZz01PWNvbmZpZyBUU01fR1VFU1Rcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnLTctXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnOjg6Y29uZmlnIFRTTV9SRVBPUlRTXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnLTktXHRzZWxlY3QgVFNNX0dVRVNUXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19UU01fUkVQT1JUUylcdCYjNDM7PSB0c21fcmVwb3J0Lm9cbmRyaXZlcnMvdmlydC9jb2NvL2d1ZXN0L01ha2VmaWxlLTMtdHNtX3JlcG9ydC15IDo9IHJlcG9ydC5vXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWc9MT1jb25maWcgU0VWX0dVRVNUXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWctNC1cdGRlcGVuZHMgb24gQU1EX01FTV9FTkNSWVBUXG5kcml2ZXJzL3ZpcnQvY29jby9zZXYtZ3Vlc3QvS2NvbmZpZzo1Olx0c2VsZWN0IFRTTV9SRVBPUlRTXG5kcml2ZXJzL3ZpcnQvY29jby9zZXYtZ3Vlc3QvS2NvbmZpZy02LVx0aGVscFxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnPTE9Y29uZmlnIFREWF9HVUVTVF9EUklWRVJcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfR1VFU1RcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnOjQ6XHRzZWxlY3QgVFNNX1JFUE9SVFNcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTUtXHRzZWxlY3QgVFNNX01FQVNVUkVNRU5UU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgdGR4LWd1ZXN0LmNgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBpbiBgdGR4LWd1ZXN0LmNgLCB0aGlzIGRyaXZlciBpcyByZWdpc3RlcmluZyBhIG1pc2MgZGV2aWNlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHVzaW5nIGB0ZHhfZ3Vlc3RfZm9wc2AgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIGEgYG1pc2NkZXZpY2VgIG5hbWVkIGBLQlVJTERfTU9ETkFNRWAgd2l0aCBkeW5hbWljIG1pbm9yIG51bWJlciDigJMgd2hpY2gsIEkgY2FuIGd1ZXNzIGlzIHByb2JhYmx5IGp1c3QgYHRkeC1ndWVzdGAsIGFuZCB0aGUgZGV2aWNlIG5vZGUgd291bGQgYmUgYC9kZXYvdGR4LWd1ZXN0YCBvciBgL2Rldi90ZHhfZ3Vlc3RgIGJhc2VkIG9uIHRoZSBuYW1lLiBJdCBhbHNvIHJlZ2lzdGVycyBpbiBzeXNmcyB1bmRlciBgL3N5cy9rZXJuZWwvY29uZmlnL3RzbS9yZXBvcnRgIGFzIGEgVFNNIHJlcG9ydHMgY29uZmlnZnMuIFRoYXQmIzM5O3MgdGhlIGRldmljZSByZWdpc3RyYXRpb24gc2lkZSBvZiB0aGluZ3MuCgpCdXQgSSYjMzk7bSB3b25kZXJpbmcsIHdoYXQgdHJpZ2dlcnMgdGhpcyBkZXZpY2UgdG8gYWN0dWFsbHkgbG9hZD8gTGV0IG1lIHNlZS4gTG9va2luZyBhdCBgdGR4X2d1ZXN0X2luaXRgLCB0aGVyZSYjMzk7cyBhIGNoZWNrOiBgIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcylgLiBJZiB0aGF0IGNoZWNrIGZhaWxzLCB3ZSBiYWlsIHdpdGggYC1FTk9ERVZgLiBSaWdodCwgc28gdGhpcyBzdWdnZXN0cyB0aGUgc3lzdGVtIG5lZWRzIHRvIG1hdGNoIGEgY2VydGFpbiBDUFUgY2FwYWJpbGl0eS4gV2hhdCBpcyBgdGR4X2d1ZXN0X2lkc2A/IE9oLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGxpbmtlZCB0byBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4KClNvLCB3aGVuIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIHNldD8gQWhhLCBpdCYjMzk7cyBpbiBgdGR4X2Vhcmx5X2luaXRgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgYGNwdWlkX2NvdW50YCBjYWxsIHdpdGggYFREWF9DUFVJRF9MRUFGX0lEYCwgYW5kIGEgc2lnbmF0dXJlIGNoZWNrIHdpdGggYFREWF9JREVOVGAuIElmIHRoZSBzaWduYXR1cmVzIG1hdGNoLCBgc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfR1VFU1QpYCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgdGhhdCB0aGUgQ1BVJiMzOTtzIGNhcGFiaWxpdGllcywgYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ1BVSUQsIGFyZSBhIGtleSBmYWN0b3IgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hhdCBgVERYX0NQVUlEX0xFQUZfSURgIGFuZCBgVERYX0lERU5UYCBhY3R1YWxseSBhcmU7IHRoZXkmIzM5O3JlIHByb2JhYmx5IHNvbWUgc3BlY2lmaWMgQ1BVSUQgbGVhZiBhbmQgc2lnbmF0dXJlIHZhbHVlcyByZWxhdGVkIHRvIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9uKSBzdXBwb3J0LiBJJiMzOTttIGd1ZXNzaW5nIHRoZXNlIGFyZSBjaGVja2VkICp2ZXJ5KiBlYXJseSB0byBlbnN1cmUgdGhlIHN5c3RlbSBoYXMgdGhlIHByb3BlciBoYXJkd2FyZSB0byBldmVuIGNvbnNpZGVyIHJ1bm5pbmcgdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1REWF9DUFVJRF9MRUFGX0lEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9tZW0uYz0xNT1zdGF0aWMgYm9vbCBlYXJseV9pc190ZHhfZ3Vlc3Qodm9pZClcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmMtMjUtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmM6MjY6XHRcdGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAwLCBcdTAwMjZlYXgsXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmMtMjctXHRcdFx0ICAgIFx1MDAyNnNpZ1swXSwgXHUwMDI2c2lnWzJdLCAgXHUwMDI2c2lnWzFdKTtcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmM9NjQ9dm9pZCBlYXJseV90ZHhfZGV0ZWN0KHZvaWQpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jLTY3LVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jOjY4Olx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFx1MDAyNmVheCwgXHUwMDI2c2lnWzBdLCBcdTAwMjZzaWdbMl0sICBcdTAwMjZzaWdbMV0pO1xuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jLTY5LVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMzY9dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQwLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTE0MTpcdGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAwLCBcdTAwMjZlYXgsIFx1MDAyNnNpZ1swXSwgXHUwMDI2c2lnWzJdLCAgXHUwMDI2c2lnWzFdKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDItXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oLTEwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oOjExOiNkZWZpbmUgVERYX0NQVUlEX0xFQUZfSURcdDB4MjFcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaC0xMi0jZGVmaW5lIFREWF9JREVOVFx0XHRcJiMzNDtJbnRlbFREWCAgICBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgSW50ZWwgVERYIERldGVjdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBDUFVJRCBsZWFmIDB4MjEgaXMgcmV0dXJuaW5nICYjMzQ7SW50ZWxURFggICAgJiMzNDsuIE9rYXksIHNvIFREWCBpcyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIExldCYjMzk7cyBkaWcgaW50byBgdGR4X3NldHVwYCwgd2hpY2ggSSBrbm93IGlzIGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIEkmIzM5O2xsIHdhbnQgdG8gcmV2aWV3IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHNldHVwIG9mIFREWCwgaW5jbHVkaW5nIGFueSBjaGVja3Mgb24gdGhlIEJJT1Mgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgdm9pZCBfX2luaXQgdGR4X3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYHRkeF9zZXR1cGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgVERYIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIHdvdWxkIHRoaXMgY3J1Y2lhbCBmdW5jdGlvbiwgYHRkeF9zZXR1cGAsIHJlc2lkZT8mIzM0OyBHaXZlbiB0aGUgY29udGV4dCDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSBhbmQgdGhlIHg4NiBhcmNoaXRlY3R1cmUg4oCTIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG9idmlvdXM6IGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoYXQgcGF0aCAqc2NyZWFtcyogcmVsZXZhbnQgY29kZS4gSXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4gdGhhdCBgdGR4X3NldHVwYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IGNhbGxlZCwgd2l0aGluIHRoYXQgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGggdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jPTM0MD1zdGF0aWMgdm9pZCByZWR1Y2VfdW5uZWNlc3NhcnlfdmUodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0zNTMtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzozNTQ6c3RhdGljIHZvaWQgdGR4X3NldHVwKHU2NCAqY2NfbWFzaylcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTM1NS17XG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEzNj12b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNTMtXHQvKiBDb25maWd1cmUgdGhlIFREICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTU0Olx0dGR4X3NldHVwKFx1MDAyNmNjX21hc2spO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFREWCBTZXR1cCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAgc2VxdWVuY2UgZm9yIFREWCB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbnRvIGB0ZHhfc2V0dXBgIHdpdGhpbiBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIFREWCBpbml0aWFsaXphdGlvbiBsb2dpYyBzaG91bGQgcmVzaWRlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgY2FsbHMgdGhhdCBlc3RhYmxpc2ggdGhlIFREWCBjb250ZXh0LCBjb25maWd1cmUgdGhlIG1lbW9yeSBtYXAgZm9yIHRoZSBndWVzdCwgYW5kIHNldCB1cCBhbnkgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIHNlY3VyZSBndWVzdCBvcGVyYXRpb25zLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIFREWCBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBoYW5kbGVzIHRoZSBURFggZ3Vlc3Qtc3BlY2lmaWMgbWVtb3J5IG1hcCBhbmQgcHJvdGVjdGlvbiBrZXlzLCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgY29yZSBrZXJuZWwgYm9vdCBwcm9jZXNzLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NDpcdHN0YXRpYyB2b2lkIHRkeF9zZXR1cCh1NjQgKmNjX21hc2spXG4gMzU1Olx0e1xuIDM1NjpcdFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XG4gMzU3Olx0XHR1bnNpZ25lZCBpbnQgZ3BhX3dpZHRoO1xuIDM1ODpcdFx0dTY0IHRkX2F0dHI7XG4gMzU5Olx0XG4gMzYwOlx0XHQvKlxuIDM2MTpcdFx0ICogVERJTkZPIFREWCBtb2R1bGUgY2FsbCBpcyB1c2VkIHRvIGdldCB0aGUgVEQgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gMzYyOlx0XHQgKiBpbmZvcm1hdGlvbiBsaWtlIEdQQSB3aWR0aCwgbnVtYmVyIG9mIGF2YWlsYWJsZSB2Y3B1cywgZGVidWcgbW9kZVxuIDM2MzpcdFx0ICogaW5mb3JtYXRpb24sIGV0Yy4gTW9yZSBkZXRhaWxzIGFib3V0IHRoZSBBQkkgY2FuIGJlIGZvdW5kIGluIFREWFxuIDM2NDpcdFx0ICogR3Vlc3QtSG9zdC1Db21tdW5pY2F0aW9uIEludGVyZmFjZSAoR0hDSSksIHNlY3Rpb24gMi40LjIgVERDQUxMXG4gMzY1Olx0XHQgKiBbVERHLlZQLklORk9dLlxuIDM2NjpcdFx0ICovXG4gMzY3Olx0XHR0ZGNhbGwoVERHX1ZQX0lORk8sIFx1MDAyNmFyZ3MpO1xuIDM2ODpcdFxuIDM2OTpcdFx0LypcbiAzNzA6XHRcdCAqIFRoZSBoaWdoZXN0IGJpdCBvZiBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgdGhlIFwmIzM0O3NoYXJpbmdcJiMzNDsgYml0LlxuIDM3MTpcdFx0ICogU2V0IGl0IGZvciBzaGFyZWQgcGFnZXMgYW5kIGNsZWFyIGl0IGZvciBwcml2YXRlIHBhZ2VzLlxuIDM3MjpcdFx0ICpcbiAzNzM6XHRcdCAqIFRoZSBHUEEgd2lkdGggdGhhdCBjb21lcyBvdXQgb2YgdGhpcyBjYWxsIGlzIGNyaXRpY2FsLiBURFggZ3Vlc3RzXG4gMzc0Olx0XHQgKiBjYW4gbm90IG1lYW5pbmdmdWxseSBydW4gd2l0aG91dCBpdC5cbiAzNzU6XHRcdCAqL1xuIDM3NjpcdFx0Z3BhX3dpZHRoID0gYXJncy5yY3ggXHUwMDI2IEdFTk1BU0soNSwgMCk7XG4gMzc3Olx0XHQqY2NfbWFzayA9IEJJVF9VTEwoZ3BhX3dpZHRoIC0gMSk7XG4gMzc4Olx0XG4gMzc5Olx0XHR0ZF9hdHRyID0gYXJncy5yZHg7XG4gMzgwOlx0XG4gMzgxOlx0XHQvKiBLZXJuZWwgZG9lcyBub3QgdXNlIE5PVElGWV9FTkFCTEVTIGFuZCBkb2VzIG5vdCBuZWVkIHJhbmRvbSAjVkVzICovXG4gMzgyOlx0XHR0ZGdfdm1fd3IoVERDU19OT1RJRllfRU5BQkxFUywgMCwgLTFVTEwpO1xuIDM4MzpcdFxuIDM4NDpcdFx0ZGlzYWJsZV9zZXB0X3ZlKHRkX2F0dHIpO1xuIDM4NTpcdFxuIDM4NjpcdFx0cmVkdWNlX3VubmVjZXNzYXJ5X3ZlKCk7XG4gMzg3Olx0fVxuIDM4ODpcdFxuIDM4OTpcdC8qXG4gMzkwOlx0ICogVGhlIFREWCBtb2R1bGUgc3BlYyBzdGF0ZXMgdGhhdCAjVkUgbWF5IGJlIGluamVjdGVkIGZvciBhIGxpbWl0ZWQgc2V0IG9mXG4gMzkxOlx0ICogcmVhc29uczpcbiAzOTI6XHQgKlxuIDM5MzpcdCAqICAtIEVtdWxhdGlvbiBvZiB0aGUgYXJjaGl0ZWN0dXJhbCAjVkUgaW5qZWN0aW9uIG9uIEVQVCB2aW9sYXRpb247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVERYIFJlYWNoYWJpbGl0eSBpbiBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHRkY2FsbChUREdfVlBfSU5GTywgJmFtcDthcmdzKTtgIGNhbGwgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQmIzM5O3MgZXhlY3V0aW5nIHRoZSBgdGRjYWxsYCBpbnN0cnVjdGlvbiDigJMgdGhlIG9uZSB0aGF0JiMzOTtzIHR5cGljYWxseSBgMHgwZiAweDAxIDB4Y2NgIG9yIHNpbWlsYXIuICBPbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNLCB3aXRob3V0IEludGVsIFREWCBoYXJkd2FyZSwgdGhpcyB3aWxsIGxpa2VseSBjYXVzZSBhICNVRCBvciAjVkUsIGJhc2ljYWxseSBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBkb2VzIGEgc3RhbmRhcmQgUUVNVSAvIEdDRSBldmVuICpydW4qIEludGVsIFREWD8gIEFic29sdXRlbHkgbm90ISBURFggbmVlZHMgc3BlY2lmaWMgSW50ZWwgNHRoIEdlbiBvciBuZXdlciBYZW9uIHNlcnZlciBDUFVzIHdpdGggaGFyZHdhcmUgVERYIGVuYWJsZWQgaW4gdGhlIEJJT1MsIGFuZCBURFggaG9zdCBzdXBwb3J0LCByaWdodD8gU3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zIGFyZSAqbm90KiBydW5uaW5nIGFzIFREWCBndWVzdHMuCgpTbywgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgc3l6a2FsbGVyIGV2ZW4gY29uc2lkZXIgVERYIGd1ZXN0cyBpbiBpdHMgcmVhY2hhYmlsaXR5IGFuYWx5c2lzPyAgTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgc3l6a2FsbGVyIGRlY2lkZXMgd2hhdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNyaXRlcmlhIGluIGRldGFpbCBhbmQgcmV2aWV3IHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LgoKVGhlIGdvYWwgaXMgdG8gZmluZCBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBidWdzLCBhbmQgbmV3IGFzc2VydGlvbnMgY2F1c2VkIGJ5IHRoZSBwYXRjaC4KCiogICAqKlJlYWNoYWJpbGl0eSBpcyBrZXk6KiogU3l6a2FsbGVyIGNhbiBvbmx5IGZpbmQgYnVncyBpbiBjb2RlIHRoYXQgYWN0dWFsbHkgcnVucyBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGl0IHVzZXMgKEdDRSBvciBRRU1VLCBsZXZlcmFnaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4gSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgc3RydWN0dXJhbGx5LCB3ZSBkb24mIzM5O3QgZnV6eiBpdC4KCiogICAqKk5lZ2F0aXZlIGNyaXRlcmlhOioqIFdlIHNheSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIHRoZSBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgY2F0ZWdvcmllczoKICAgICogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzIChkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZXRjLikuCiAgICAqICAgVXNlci1zcGFjZSB0aGluZ3MgdGhhdCBkb24mIzM5O3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuCiAgICAqICAgUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4KICAgICogICBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIHRoZSBjb2RlLgogICAgKiAgICoqU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOioqIFNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIHJlYWwgaGFyZHdhcmUuCgpIb2xkIG9uLCB0aGF0IGxhc3Qgb25lIGlzIHRoZSBjcnVjaWFsIGJpdC4gVGhlICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY2F0ZWdvcnkgaGFzIG1lIHRoaW5raW5nLiBJcyBhIFREWCBndWVzdCAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSYjMzQ7PyBPciwgaXMgaXQgcmVhY2hhYmxlIG9yIHVucmVhY2hhYmxlPyBXaGF0JiMzOTtzIHRoZSB3b3JkaW5nPyBUaGUgZXhhbXBsZSBpcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgc3VjaCB0aGF0IGRlbWFuZCBwaHlzaWNhbCBjYXJkcy4gIERvZXMgdGhpcyBleHRlbmQgdG8gY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLCBURFgpPyBHQ0UgaGFzIEMzIG1hY2hpbmVzIChJbnRlbCA0dGggR2VuIFhlb24pIHRoYXQgcHJvdmlkZSBDb25maWRlbnRpYWwgVk1zIHVzaW5nIEludGVsIFREWCwgc28gdGhleSBjbGVhcmx5IHN1cHBvcnQgVERYLiBCdXQsIGlzIHRoYXQgYSAmIzM0O3N0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50JiMzNDs/ICBJIG1lYW4sIHRoZSBkZWZpbml0aW9uIHN0YXRlcyAmIzM0O3N0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkmIzM0Oy4gRG9lcyBzeXprYWxsZXIgd29yayB3aXRoIHRoaXMgc3RhbmRhcmQgZW52aXJvbm1lbnQ/CgpTeXprYWxsZXIgcnVucyBzdGFuZGFyZCBRRU1VIChsaWtlIGBxZW11LXN5c3RlbS14ODZfNjQgLWVuYWJsZS1rdm0gLi4uYCkgb3Igc3RhbmRhcmQgR0NFIGluc3RhbmNlcyAoYGUyLXN0YW5kYXJkLTRgLCBldGMuKS4gU28sIHRoZSBjb3JlIHF1ZXN0aW9uIGJlY29tZXM6IGRvZXMgdGhlIGd1ZXN0ICpoYXZlKiBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBpbiB0aGVzZSBzZXR1cHM/IE5PLCBhYnNvbHV0ZWx5IG5vdCEgV2hlbiBib290aW5nIGEgKnN0YW5kYXJkKiBRRU1VIG9yIEdDRSBWTSwgYGNwdWlkX2NvdW50KDB4MjEsIDApYCAqZG9lc24mIzM5O3QqIHJldHVybiAmIzM0O0ludGVsVERYICYjMzQ7LgoKVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGB0ZHgtZ3Vlc3RgIGlzIG5ldmVyIGluaXRpYWxpemVkISBgL2Rldi90ZHgtZ3Vlc3RgIGlzIG5ldmVyIGNyZWF0ZWQuICBgdGR4X3RzbV9vcHNgIGlzIG5ldmVyIHJlZ2lzdGVyZWQuICBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyAqbmV2ZXIqIGNhbGxlZC4KCldhaXQgYSBzZWNvbmQuIExldCYjMzk7cyByZWFsbHkgc29saWRpZnkgdGhpcy4gQ2FuIFFFTVUgZW11bGF0ZSBURFg/IE5vLCB0aGF0JiMzOTtzIGltcG9zc2libGUuIFREWCByZXF1aXJlcyBJbnRlbCBoYXJkd2FyZSB3aXRoIE1DSEVDSy9TRUFNIGZpcm13YXJlLiAgV2hhdCBhYm91dCBUU00gcmVwb3J0cz8gTmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9yZXBvcnQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvcmVwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qIENvcHlyaWdodChjKSAyMDIzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuICAgMzpcdFxuICAgNDpcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHNtLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J3c2VtLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29uZmlnZnMuaFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdHN0YXRpYyBzdHJ1Y3QgdHNtX3Byb3ZpZGVyIHtcbiAgMTY6XHRcdGNvbnN0IHN0cnVjdCB0c21fcmVwb3J0X29wcyAqb3BzO1xuICAxNzpcdFx0dm9pZCAqZGF0YTtcbiAgMTg6XHRcdGF0b21pY190IGNvdW50O1xuICAxOTpcdH0gcHJvdmlkZXI7XG4gIDIwOlx0c3RhdGljIERFQ0xBUkVfUldTRU0odHNtX3J3c2VtKTtcbiAgMjE6XHRcbiAgMjI6XHQvKipcbiAgMjM6XHQgKiBET0M6IFRydXN0ZWQgU2VjdXJpdHkgTW9kdWxlIChUU00pIEF0dGVzdGF0aW9uIFJlcG9ydCBJbnRlcmZhY2VcbiAgMjQ6XHQgKlxuICAyNTpcdCAqIFRoZSBUU00gcmVwb3J0IGludGVyZmFjZSBpcyBhIGNvbW1vbiBwcm92aWRlciBvZiBibG9icyB0aGF0IGZhY2lsaXRhdGVcbiAgMjY6XHQgKiBhdHRlc3RhdGlvbiBvZiBhIFRWTSAoY29uZmlkZW50aWFsIGNvbXB1dGluZyBndWVzdCkgYnkgYW4gYXR0ZXN0YXRpb25cbiAgMjc6XHQgKiBzZXJ2aWNlLiBBIFRTTSByZXBvcnQgY29tYmluZXMgYSB1c2VyLWRlZmluZWQgYmxvYiAobGlrZWx5IGEgcHVibGljLWtleSB3aXRoXG4gIDI4Olx0ICogYSBub25jZSBmb3IgYSBrZXktZXhjaGFuZ2UgcHJvdG9jb2wpIHdpdGggYSBzaWduZWQgYXR0ZXN0YXRpb24gcmVwb3J0LiBUaGF0XG4gIDI5Olx0ICogY29tYmluZWQgYmxvYiBpcyB0aGVuIHVzZWQgdG8gb2J0YWluIHNlY3JldHMgcHJvdmlkZWQgYnkgYW4gYWdlbnQgdGhhdCBjYW5cbiAgMzA6XHQgKiB2YWxpZGF0ZSB0aGUgYXR0ZXN0YXRpb24gcmVwb3J0LiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGludGVyZmFjZSBpc1xuICAzMTpcdCAqIGludm9rZWQgaW5mcmVxdWVudGx5LCBob3dldmVyIGNvbmZpZ2ZzIGFsbG93cyBmb3IgbXVsdGlwbGUgYWdlbnRzIHRvXG4gIDMyOlx0ICogb3duIHRoZWlyIG93biByZXBvcnQgZ2VuZXJhdGlvbiBpbnN0YW5jZXMgdG8gZ2VuZXJhdGUgcmVwb3J0cyBhc1xuICAzMzpcdCAqIG9mdGVuIGFzIG5lZWRlZC5cbiAgMzQ6XHQgKlxuICAzNTpcdCAqIFRoZSBhdHRlc3RhdGlvbiByZXBvcnQgZm9ybWF0IGlzIFRTTSBwcm92aWRlciBzcGVjaWZpYywgd2hlbiAvIGlmIGEgc3RhbmRhcmRcbiAgMzY6XHQgKiBtYXRlcmlhbGl6ZXMgdGhhdCBjYW4gYmUgcHVibGlzaGVkIGluc3RlYWQgb2YgdGhlIHZlbmRvciBsYXlvdXQuIFVudGlsIHRoZW5cbiAgMzc6XHQgKiB0aGUgJiMzOTtwcm92aWRlciYjMzk7IGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCBvZiAmIzM5O291dGJsb2ImIzM5OywgYW5kIG9wdGlvbmFsbHlcbiAgMzg6XHQgKiAmIzM5O2F1eGJsb2ImIzM5OyBhbmQgJiMzOTttYW5pZmVzdGJsb2ImIzM5Oy5cbiAgMzk6XHQgKi9cbiAgNDA6XHRcbiAgNDE6XHRzdHJ1Y3QgdHNtX3JlcG9ydF9zdGF0ZSB7XG4gIDQyOlx0XHRzdHJ1Y3QgdHNtX3JlcG9ydCByZXBvcnQ7XG4gIDQzOlx0XHR1bnNpZ25lZCBsb25nIHdyaXRlX2dlbmVyYXRpb247XG4gIDQ0Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRfZ2VuZXJhdGlvbjtcbiAgNDU6XHRcdHN0cnVjdCBjb25maWdfaXRlbSBjZmc7XG4gIDQ2Olx0fTtcbiAgNDc6XHRcbiAgNDg6XHRlbnVtIHRzbV9kYXRhX3NlbGVjdCB7XG4gIDQ5Olx0XHRUU01fUkVQT1JULFxuICA1MDpcdFx0VFNNX0NFUlRTLFxuICA1MTpcdFx0VFNNX01BTklGRVNULFxuICA1MjpcdH07XG4gIDUzOlx0XG4gIDU0Olx0c3RhdGljIHN0cnVjdCB0c21fcmVwb3J0ICp0b190c21fcmVwb3J0KHN0cnVjdCBjb25maWdfaXRlbSAqY2ZnKVxuICA1NTpcdHtcbiAgNTY6XHRcdHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICpzdGF0ZSA9XG4gIDU3Olx0XHRcdGNvbnRhaW5lcl9vZihjZmcsIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlLCBjZmcpO1xuICA1ODpcdFxuICA1OTpcdFx0cmV0dXJuIFx1MDAyNnN0YXRlLVx1MDAzZXJlcG9ydDtcbiAgNjA6XHR9XG4gIDYxOlx0XG4gIDYyOlx0c3RhdGljIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0KVxuICA2MzpcdHtcbiAgNjQ6XHRcdHJldHVybiBjb250YWluZXJfb2YocmVwb3J0LCBzdHJ1Y3QgdHNtX3JlcG9ydF9zdGF0ZSwgcmVwb3J0KTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0c3RhdGljIGludCB0cnlfYWR2YW5jZV93cml0ZV9nZW5lcmF0aW9uKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQpXG4gIDY4Olx0e1xuICA2OTpcdFx0c3RydWN0IHRzbV9yZXBvcnRfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUocmVwb3J0KTtcbiAgNzA6XHRcbiAgNzE6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2dHNtX3J3c2VtKTtcbiAgNzI6XHRcbiAgNzM6XHRcdC8qXG4gIDc0Olx0XHQgKiBNYWxpY2lvdXMgb3IgYnJva2VuIHVzZXJzcGFjZSBoYXMgd3JpdHRlbiBlbm91Z2ggdGltZXMgZm9yXG4gIDc1Olx0XHQgKiByZWFkX2dlbmVyYXRpb24gPT0gd3JpdGVfZ2VuZXJhdGlvbiBieSBtb2R1bGFyIGFyaXRobWV0aWMgd2l0aG91dCBhblxuICA3NjpcdFx0ICogaW50ZXJpbSByZWFkLiBTdG9wIGFjY2VwdGluZyB1cGRhdGVzIHVudGlsIHRoZSBjdXJyZW50IHJlcG9ydFxuICA3NzpcdFx0ICogY29uZmlndXJhdGlvbiBpcyByZWFkLlxuICA3ODpcdFx0ICovXG4gIDc5Olx0XHRpZiAoc3RhdGUtXHUwMDNld3JpdGVfZ2VuZXJhdGlvbiA9PSBzdGF0ZS1cdTAwM2VyZWFkX2dlbmVyYXRpb24gLSAxKVxuICA4MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuICA4MTpcdFx0c3RhdGUtXHUwMDNld3JpdGVfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4gIDgyOlx0XHRyZXR1cm4gMDtcbiAgODM6XHR9XG4gIDg0Olx0XG4gIDg1Olx0c3RhdGljIHNzaXplX3QgdHNtX3JlcG9ydF9wcml2bGV2ZWxfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICpjZmcsXG4gIDg2Olx0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuICA4NzpcdHtcbiAgODg6XHRcdHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQgPSB0b190c21fcmVwb3J0KGNmZyk7XG4gIDg5Olx0XHR1bnNpZ25lZCBpbnQgdmFsO1xuICA5MDpcdFx0aW50IHJjO1xuICA5MTpcdFxuICA5MjpcdFx0cmMgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2dmFsKTtcbiAgOTM6XHRcdGlmIChyYylcbiAgOTQ6XHRcdFx0cmV0dXJuIHJjO1xuICA5NTpcdFxuICA5NjpcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnRzbV9yd3NlbSk7XG4gIDk3Olx0XHRpZiAoIXByb3ZpZGVyLm9wcylcbiAgOTg6XHRcdFx0cmV0dXJuIC1FTlhJTztcbiAgOTk6XHRcbiAxMDA6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTkwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggUmVhY2hhYmlsaXR5IEFuYWx5c2lzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZSBjb2RlIHJlbGF0ZWQgdG8gYHRzbV9yZXBvcnRfb3BzYCBpcyBldmVuIHJlYWNoYWJsZS4gSSBzZWUgdGhhdCBpdCYjMzk7cyByZWdpc3RlcmVkIHRocm91Z2ggYHRzbV9yZXBvcnRfcmVnaXN0ZXJgIGluIGB0ZHhfdHNtX29wc2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2Agb3IgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQgaW4gdGhlIHRhcmdldCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgY29kZSBnb3QgdHJpYWdlZCBpbW1lZGlhdGVseSBtYWtlcyBtZSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgcmVhc29uLCBhbmQgSSBuZWVkIHRvIGJlIGRpbGlnZW50LgoKTXkgbWluZCBxdWlja2x5IGp1bXBzIHRvIGNoZWNraW5nIHN5emthbGxlciYjMzk7cyBkZXNjcmlwdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgcmVtaW5kIG1lIG9mIHNvbWUgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIHRvb2xzIEkgKnNob3VsZCogdXNlIC0gYXZvaWRpbmcgdGhvc2Ugd2hpY2ggY2FuJiMzOTt0IGhhbmRsZSBzeXpsYW5nIGRlc2NyaXB0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHVzaW5nIHRoZSByaWdodCB0b29scyAtIG5vIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGhlcmUsIEkgbmVlZCB0byB1c2UgdGhlIGF2YWlsYWJsZSB0b29scywgd2hpY2ggYXJlIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGFuZCBgc2V0LXJlc3VsdHNgLgoKSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5OiBpcyB0aGUgY29kZSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgaW5zdHJ1Y3Rpb25zIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0IGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgb24gZXhlY3V0YWJsZSBjb2RlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBVbnJlYWNoYWJsZSBjb2RlIGlzIGEgbm9uLXN0YXJ0ZXIuCgomIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGlzIHRoZSBrZXkuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBURFguIElzIFREWCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGU/CgpJIHJlY2FsbCB0aGF0IEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlICg0dGggZ2VuIFhlb24gU2NhbGFibGUgb3IgbmV3ZXIpIGFuZCBzcGVjaWZpYyBCSU9TIGFuZCBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb25zLiBDcnVjaWFsbHksIFFFTVUgKmNhbm5vdCogZW11bGF0ZSBURFguIFlvdSBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLiBTeXprYWxsZXIgcnVucyBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgb3IgR29vZ2xlJiMzOTtzIGVxdWl2YWxlbnQgbm9uLWNvbmZpZGVudGlhbCBpbnN0YW5jZXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBib2lscyBkb3duIHRvOiBJbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgbGlrZSBzeXprYWxsZXIgdXNlcywgaXMgYHRkeF9ndWVzdF9pbml0YCBldmVyIHJlYWNoZWQ/IEkgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4sIHJlLWVtcGhhc2l6aW5nIHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlOiBJIGhhdmUgdG8gYmUgc3VyZSB0aGUgY29kZSBleGVjdXRlcyBpbiB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnQuCgpUaGUgbmV4dCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGRvZXMgR0NFIHN1cHBvcnQgVERYPyYjMzQ7IEdDRSAqZG9lcyogb2ZmZXIgQ29uZmlkZW50aWFsIFZNcyB3aXRoIFREWCBvbiBjZXJ0YWluIGluc3RhbmNlIHR5cGVzLiBCdXQgdGhlIGluc3RydWN0aW9ucyBhcmUgYWJvdXQgKnN0YW5kYXJkKiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFN0YW5kYXJkIEdDRSBpbnN0YW5jZXMgZG9uJiMzOTt0IHJ1biBpbiBURFggZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgYWxzbyBkb2VzbiYjMzk7dCBydW4gaW5zaWRlIENvbmZpZGVudGlhbCBWTXMuIEl0IG9wZXJhdGVzIGluIHRoZSBkZWZhdWx0LCBub24tY29uZmlkZW50aWFsIGVudmlyb25tZW50cy4KCk9rYXksIGxldCYjMzk7cyBleGFtaW5lIHRoZSBjb2RlLiBJbiBgdGR4X2Vhcmx5X2luaXQoKWAsIHRoZXJlJiMzOTtzIGEgQ1BVSUQgY2hlY2suIFVubGVzcyB3ZSYjMzk7cmUgb24gYWN0dWFsIFREWCBoYXJkd2FyZSwgdGhlIHNpZ25hdHVyZSBjaGVjayBmYWlscywgYW5kIGB0ZHhfZWFybHlfaW5pdGAgcmV0dXJucy4gVGhpcyByZXN1bHRzIGluIHRoZSBmbGFnIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIG5vdCBiZWluZyBzZXQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4KClRoZW4sIHRoZSBjaGVjayBpbiBgdGR4X2d1ZXN0X2luaXQoKWAgZmFpbHMgYmVjYXVzZSB0aGUgZmVhdHVyZSBpc24mIzM5O3Qgc2V0LiBgeDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKWAgcmV0dXJucyBmYWxzZSwgYW5kIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBpbW1lZGlhdGVseSByZXR1cm5zIGFuIGVycm9yLiBUaGlzIG1lYW5zIHRoYXQgYWxsIHRoZSBzdWJzZXF1ZW50IGNvZGUgcGF0aHMgaW4gYHRkeC1ndWVzdC5jYCByZWxhdGVkIHRvIHF1b3RlIG1hbmFnZW1lbnQsIGRldmljZSByZWdpc3RyYXRpb24sIGFuZCBUU00gb3BzICpuZXZlciogZ2V0IGV4ZWN1dGVkLgoKSW4gYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCwgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKWAgaXMgaW50cm9kdWNlZCwgd2hpY2ggY2FsbHMgYHRkZ192bV9yZCgpYC4gVGhhdCBmdW5jdGlvbiBleGVjdXRlcyBhIGBURENBTExgIGluc3RydWN0aW9uLiBBIGBURENBTExgIHdpbGwgdHJpZ2dlciBhICNVRCBmYXVsdCBvbiBhIENQVSB0aGF0IGRvZXNuJiMzOTt0IHN1cHBvcnQgVERYLiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyBvbmx5IGNhbGxlZCBpbiBgZ2V0X3F1b3RlX2J1Zl9zaXplKClgLiBCZWNhdXNlIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGlzbiYjMzk7dCByZWFjaGVkLCBpdCBtZWFucyBURENBTEwgaXMgbm90IGNhbGxlZC4gVGhpcyBjb2RlIGlzICp1bnJlYWNoYWJsZSouCgpUaGUgYm90dG9tIGxpbmUgaXM6IHRoZSBjb2RlIGlzIG5vdCByZWFjaGFibGUuIEkgbm93IG5lZWQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgLiBJZiBubyBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCwgdGhlbiB0aGUgcGF0Y2ggaXMgdW5yZWFjaGFibGUsIGFuZCBubyBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZ2V0X21heF9xdW90ZV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jPTE5OT1FWFBPUlRfU1lNQk9MX0dQTCh0ZHhfaGNhbGxfZ2V0X3F1b3RlKTtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMDEtLyoqXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyMDI6ICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIwMy0gKlxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxNC0gKi9cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjIxNTp1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjE2LXtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMjItfVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjIzOkVYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjI0LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTg0PXU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTg1LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6ODY6dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC04Ny1cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9MjI5PXN0YXRpYyBzaXplX3QgZ2V0X3F1b3RlX2J1Zl9zaXplKHZvaWQpXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtMjMwLXtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzoyMzE6XHR1MzIgcXVvdGVfc2l6ZSA9IHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKTtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy0yMzItXHRzaXplX3QgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgzNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVERYIEd1ZXN0IENvZGUgUmVhY2hhYmlsaXR5IEFzc2Vzc21lbnQgZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIFREWCBndWVzdCBjb2RlIGluIGBkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNgLCBzcGVjaWZpY2FsbHkgZnVuY3Rpb25zIGxpa2UgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemVgLCBpcyByZWFjaGFibGUgYnkgc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBjb2RlIGFuYWx5c2lzIHNob3dzIHRoYXQgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBnZXRfcXVvdGVfYnVmX3NpemUoKWAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBjYWxsZWQgd2l0aGluIGB0ZHhfZ3Vlc3RfaW5pdCgpYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbml0aWFsaXphdGlvbiBwYXRoIGlzIGV2ZXIgdGFrZW4gdW5kZXIgc3RhbmRhcmQgc3l6a2FsbGVyIGZ1enppbmcgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgc3l6a2FsbGVyIGd1aWRlbGluZXMgb24gcmVhY2hhYmlsaXR5LiBUaGUgZ3VpZGVsaW5lcyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFzIHRoZSBwcmltYXJ5IGZhY3Rvci4gVGhlIGdvYWwgaXMgdG8gZGlzY292ZXIgYnVncyBpbiAqZXhlY3V0YWJsZSogY29kZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBleHBsaWNpdCBuZWdhdGl2ZSBjcml0ZXJpYTogJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgU3BlY2lmaWNhbGx5LCBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUgYXJlIGV4Y2x1ZGVkLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhpcyB0byBURFguIEludGVsIFREWCBpcyBhIGhhcmR3YXJlIENQVSBzZWN1cml0eSB0ZWNobm9sb2d5IGZvciBjb25maWRlbnRpYWwgVk1zLiBUbyBleGVjdXRlLCBpdCByZXF1aXJlcyBzcGVjaWZpYyBJbnRlbCBYZW9uIGhhcmR3YXJlIGFuZCBURFggZW5hYmxlZC4gSSByZWNhbGwgdGhhdCBkdXJpbmcgZWFybHkgYm9vdCwgdGhlIGd1ZXN0IGtlcm5lbCBjaGVja3MgZm9yIFREWCBzdXBwb3J0IHZpYSBDUFVJRCBsZWFmIDB4MjEgKGBURFhfQ1BVSURfTEVBRl9JRGApLiBJbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQg4oCTIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMg4oCTIHRoaXMgbGVhZiB3aWxsICpub3QqIHJldHVybiB0aGUgVERYIHNpZ25hdHVyZS4gQ29uc2VxdWVudGx5LCB0aGUgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgZmVhdHVyZSBmbGFnIHdpbGwgbm90IGJlIGVuYWJsZWQuCgpTaW5jZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBpcyBub3QgcHJlc2VudCwgYHg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcylgIHdpbGwgZmFpbC4gIFRoaXMgbWVhbnMgdGhhdCBgdGR4X2d1ZXN0X2luaXQoKWAgd2lsbCByZXR1cm4gYC1FTk9ERVZgLCBlZmZlY3RpdmVseSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBlbnRpcmUgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyIHdvbiYjMzk7dCByZWdpc3RlciBpdHMgYC9kZXYvdGR4LWd1ZXN0YCBkZXZpY2UsIGl0IHdvbiYjMzk7dCBpbnRlcmFjdCB3aXRoIFRTTSwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBnZXRfcXVvdGVfYnVmX3NpemUoKWAsICBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCwgYGFsbG9jX3F1b3RlX2J1ZigpYCwgYGZyZWVfcXVvdGVfYnVmKClgLCBhbmQgYHRkeF9yZXBvcnRfbmV3X2xvY2tlZCgpYCB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gVGhlIGNvZGUgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AgYW5kIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBRRU1VIG9mZmVycyBhIHdvcmthcm91bmQgdGhyb3VnaCBgLWNwdWAgZmxhZ3Mgb3Igc29tZXRoaW5nLCBidXQgSSBhbSBwcmV0dHkgY2VydGFpbiBRRU1VIGRvZXMgbm90IGhhdmUgc29mdHdhcmUgZW11bGF0aW9uIGZvciBURFguIFREWCBpbiBLVk0vUUVNVSAqcmVxdWlyZXMqIHNwZWNpZmljIGhhcmR3YXJlIChTYXBwaGlyZSBSYXBpZHMgb3IgbmV3ZXIpIHdpdGggVERYIGVuYWJsZWQsIGhvc3Qgc3VwcG9ydCAoS1ZNIFREWCksIGFuZCBRRU1VIHdpdGggVERYIGd1ZXN0IHN1cHBvcnQgKHNwZWNpZmljYWxseSwgYC1vYmplY3QgdGR4LWd1ZXN0LC4uLmApLiBTeXprYWxsZXImIzM5O3Mgc3RhbmRhcmQgZnV6emluZyBzZXR1cCBkb2VzbiYjMzk7dCBtZWV0IGFueSBvZiB0aGVzZSByZXF1aXJlbWVudHMuCgpJIHJlY2FsbCB0aGF0IHJlc2VhcmNoIHByb2plY3RzIGV4aXN0IHRoYXQgaGF2ZSBleHBsb3JlZCBmdXp6aW5nIG9mIFNFVi9TTlAvVERYLCBob3dldmVyLCB0aGF0IGlzIG5vdCB0aGUgc3l6a2FsbGVyIGRlZmF1bHQgc2V0dXAuIEluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgdHJpYWdlLCBjb2RlIGlzIG5vdCBmdXp6ZWQgaWYgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgYmFja2Rvb3Igd2F5IHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLCBwZXJoYXBzIHRocm91Z2ggYSBzeXNmcyBpbnRlcmZhY2UsIGRlYnVnZnMgZW50cnksIG9yIHNvbWUga2luZCBvZiBtb2NrIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgdGhlIGB0ZHhfZ3Vlc3RfaWRzYCBvciBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB0aHJvdWdoIGEgZ3JlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2d1ZXN0X2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDA3PXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0ZHhfbWlzY19kZXYgPSB7XG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxMy1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTQ6c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTUtXHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTctfTtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTg6TU9EVUxFX0RFVklDRV9UQUJMRSh4ODZjcHUsIHRkeF9ndWVzdF9pZHMpO1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxOS1cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDI3PXN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQzMC1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MzE6XHRpZiAoIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcykpXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDMyLVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1ODgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFREWCBHdWVzdCBEcml2ZXIqKgoKT2theSwgc28gYHRkeF9ndWVzdF9pZHNgIGlzIGlzb2xhdGVkIHdpdGhpbiBgdGR4LWd1ZXN0LmNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG9idmlvdXMgZW50cnlwb2ludHMgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AuIEkgbmVlZCB0byBlbnN1cmUgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgdGhlcmUuIEFmdGVyIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gYWJzb3JiIHRoZSByZXN0IG9mIHRoZSBzb3VyY2UgZmlsZSB0byBncmFzcCB0aGUgZW50aXJldHkgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBSZWFkaW5nIHRoZSBmdWxsIGBkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNgIGZpbGUgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhY2hpZXZlIHRoaXMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgY29kZS4gSSBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggam9iLCBhZnRlciBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LypcbiAgIDM6XHQgKiBURFggZ3Vlc3QgdXNlciBpbnRlcmZhY2UgZHJpdmVyXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSW50ZWwgQ29ycG9yYXRpb25cbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQjZGVmaW5lIHByX2ZtdChmbXQpXHRcdFx0S0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gICA5Olx0XG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9taXNjZGV2aWNlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja3B0ci5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHNtLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90c20tbXIuaFx1MDAzZVxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvdGR4LWd1ZXN0LmhcdTAwM2VcbiAgMjQ6XHRcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2Nhc20vY3B1X2RldmljZV9pZC5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjYXNtL3RkeC5oXHUwMDNlXG4gIDI3Olx0XG4gIDI4Olx0LyogVERSRVBPUlQgYnVmZmVyICovXG4gIDI5Olx0c3RhdGljIHU4ICp0ZHhfcmVwb3J0X2J1ZjtcbiAgMzA6XHRcbiAgMzE6XHQvKiBMb2NrIHRvIHNlcmlhbGl6ZSBUREcuTVIuUkVQT1JUIGFuZCBUREcuTVIuUlRNUi5FWFRFTkQgVERDQUxMcyAqL1xuICAzMjpcdHN0YXRpYyBERUZJTkVfTVVURVgobXJfbG9jayk7XG4gIDMzOlx0XG4gIDM0Olx0LyogVERSRVBPUlQgZmllbGRzICovXG4gIDM1Olx0ZW51bSB7XG4gIDM2Olx0XHRURFJFUE9SVF9yZXBvcnRkYXRhID0gMTI4LFxuICAzNzpcdFx0VERSRVBPUlRfdGVlX3RjYl9pbmZvID0gMjU2LFxuICAzODpcdFx0VERSRVBPUlRfdGRpbmZvID0gVERSRVBPUlRfdGVlX3RjYl9pbmZvICYjNDM7IDI1NixcbiAgMzk6XHRcdFREUkVQT1JUX2F0dHJpYnV0ZXMgPSBURFJFUE9SVF90ZGluZm8sXG4gIDQwOlx0XHRURFJFUE9SVF94ZmFtID0gVERSRVBPUlRfYXR0cmlidXRlcyAmIzQzOyBzaXplb2YodTY0KSxcbiAgNDE6XHRcdFREUkVQT1JUX21ydGQgPSBURFJFUE9SVF94ZmFtICYjNDM7IHNpemVvZih1NjQpLFxuICA0MjpcdFx0VERSRVBPUlRfbXJjb25maWdpZCA9IFREUkVQT1JUX21ydGQgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0MzpcdFx0VERSRVBPUlRfbXJvd25lciA9IFREUkVQT1JUX21yY29uZmlnaWQgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0NDpcdFx0VERSRVBPUlRfbXJvd25lcmNvbmZpZyA9IFREUkVQT1JUX21yb3duZXIgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0NTpcdFx0VERSRVBPUlRfcnRtcjAgPSBURFJFUE9SVF9tcm93bmVyY29uZmlnICYjNDM7IFNIQTM4NF9ESUdFU1RfU0laRSxcbiAgNDY6XHRcdFREUkVQT1JUX3J0bXIxID0gVERSRVBPUlRfcnRtcjAgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA0NzpcdFx0VERSRVBPUlRfcnRtcjIgPSBURFJFUE9SVF9ydG1yMSAmIzQzOyBTSEEzODRfRElHRVNUX1NJWkUsXG4gIDQ4Olx0XHRURFJFUE9SVF9ydG1yMyA9IFREUkVQT1JUX3J0bXIyICYjNDM7IFNIQTM4NF9ESUdFU1RfU0laRSxcbiAgNDk6XHRcdFREUkVQT1JUX3NlcnZ0ZF9oYXNoID0gVERSRVBPUlRfcnRtcjMgJiM0MzsgU0hBMzg0X0RJR0VTVF9TSVpFLFxuICA1MDpcdH07XG4gIDUxOlx0XG4gIDUyOlx0c3RhdGljIGludCB0ZHhfZG9fcmVwb3J0KHNvY2twdHJfdCBkYXRhLCBzb2NrcHRyX3QgdGRyZXBvcnQpXG4gIDUzOlx0e1xuICA1NDpcdFx0c2NvcGVkX2NvbmRfZ3VhcmQobXV0ZXhfaW50ciwgcmV0dXJuIC1FSU5UUiwgXHUwMDI2bXJfbG9jaykge1xuICA1NTpcdFx0XHR1OCAqcmVwb3J0ZGF0YSA9IHRkeF9yZXBvcnRfYnVmICYjNDM7IFREUkVQT1JUX3JlcG9ydGRhdGE7XG4gIDU2Olx0XHRcdGludCByZXQ7XG4gIDU3Olx0XG4gIDU4Olx0XHRcdGlmICghc29ja3B0cl9pc19udWxsKGRhdGEpIFx1MDAyNlx1MDAyNlxuICA1OTpcdFx0XHQgICAgY29weV9mcm9tX3NvY2twdHIocmVwb3J0ZGF0YSwgZGF0YSwgVERYX1JFUE9SVERBVEFfTEVOKSlcbiAgNjA6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAgNjE6XHRcbiAgNjI6XHRcdFx0cmV0ID0gdGR4X21jYWxsX2dldF9yZXBvcnQwKHJlcG9ydGRhdGEsIHRkeF9yZXBvcnRfYnVmKTtcbiAgNjM6XHRcdFx0aWYgKFdBUk5fT05DRShyZXQsIFwmIzM0O3RkeF9tY2FsbF9nZXRfcmVwb3J0MCgpIGZhaWxlZDogJWRcJiMzNDssIHJldCkpXG4gIDY0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAgNjU6XHRcbiAgNjY6XHRcdFx0aWYgKCFzb2NrcHRyX2lzX251bGwodGRyZXBvcnQpIFx1MDAyNlx1MDAyNlxuICA2NzpcdFx0XHQgICAgY29weV90b19zb2NrcHRyKHRkcmVwb3J0LCB0ZHhfcmVwb3J0X2J1ZiwgVERYX1JFUE9SVF9MRU4pKVxuICA2ODpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA2OTpcdFx0fVxuICA3MDpcdFx0cmV0dXJuIDA7XG4gIDcxOlx0fVxuICA3MjpcdFxuICA3MzpcdHN0YXRpYyBpbnQgdGR4X2RvX2V4dGVuZCh1OCBtcl9pbmQsIGNvbnN0IHU4ICpkYXRhKVxuICA3NDpcdHtcbiAgNzU6XHRcdHNjb3BlZF9jb25kX2d1YXJkKG11dGV4X2ludHIsIHJldHVybiAtRUlOVFIsIFx1MDAyNm1yX2xvY2spIHtcbiAgNzY6XHRcdFx0LypcbiAgNzc6XHRcdFx0ICogVERYIHJlcXVpcmVzIEBleHRlbmRfYnVmIHRvIGJlIDY0LWJ5dGUgYWxpZ25lZC5cbiAgNzg6XHRcdFx0ICogSXQmIzM5O3Mgc2FmZSB0byB1c2UgUkVQT1JUREFUQSBidWZmZXIgZm9yIHRoYXQgcHVycG9zZSBiZWNhdXNlXG4gIDc5Olx0XHRcdCAqIHRkeF9tcl9yZXBvcnQvZXh0ZW5kX2xvY2soKSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICA4MDpcdFx0XHQgKi9cbiAgODE6XHRcdFx0dTggKmV4dGVuZF9idWYgPSB0ZHhfcmVwb3J0X2J1ZiAmIzQzOyBURFJFUE9SVF9yZXBvcnRkYXRhO1xuICA4MjpcdFx0XHRpbnQgcmV0O1xuICA4MzpcdFxuICA4NDpcdFx0XHRtZW1jcHkoZXh0ZW5kX2J1ZiwgZGF0YSwgU0hBMzg0X0RJR0VTVF9TSVpFKTtcbiAgODU6XHRcbiAgODY6XHRcdFx0cmV0ID0gdGR4X21jYWxsX2V4dGVuZF9ydG1yKG1yX2luZCwgZXh0ZW5kX2J1Zik7XG4gIDg3Olx0XHRcdGlmIChXQVJOX09OQ0UocmV0LCBcJiMzNDt0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIoJXUpIGZhaWxlZDogJWRcJiMzNDssIG1yX2luZCwgcmV0KSlcbiAgODg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuICA4OTpcdFx0fVxuICA5MDpcdFx0cmV0dXJuIDA7XG4gIDkxOlx0fVxuICA5MjpcdFxuICA5MzpcdCNkZWZpbmUgVERYX01SXyhyKSAubXJfdmFsdWUgPSAodm9pZCAqKVREUkVQT1JUXyMjciwgVFNNX01SXyhyLCBTSEEzODQpXG4gIDk0Olx0c3RhdGljIHN0cnVjdCB0c21fbWVhc3VyZW1lbnRfcmVnaXN0ZXIgdGR4X21yc1tdID0ge1xuICA5NTpcdFx0eyBURFhfTVJfKHJ0bXIwKSB8IFRTTV9NUl9GX1JUTVIgfSxcbiAgOTY6XHRcdHsgVERYX01SXyhydG1yMSkgfCBUU01fTVJfRl9SVE1SIH0sXG4gIDk3Olx0XHR7IFREWF9NUl8ocnRtcjIpIHwgVFNNX01SX0ZfUlRNUiB9LFxuICA5ODpcdFx0eyBURFhfTVJfKHJ0bXIzKSB8IFRTTV9NUl9GX1JUTVIgfSxcbiAgOTk6XHRcdHsgVERYX01SXyhtcnRkKSB9LFxuIDEwMDpcdFx0eyBURFhfTVJfKG1yY29uZmlnaWQpIHwgVFNNX01SX0ZfTk9IQVNIIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjI0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AgLSBMaW5lcyAxMDEtMjAwKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gbGluZXMgMTAxIHRvIDIwMCB3aXRoaW4gdGhhdCBgdGR4LWd1ZXN0LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgcGFydCBkZWFsaW5nIHdpdGggdGhlIFREWCBndWVzdCBkcml2ZXIuIEJhc2VkIG9uIHRoZSBmaWxlIHN0cnVjdHVyZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHNvbWUgY29yZSBpbml0aWFsaXphdGlvbiwgcGVyaGFwcyBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgY29tbXVuaWNhdGlvbiBwYXRoIHdpdGggdGhlIFREWCBtb2R1bGUsIG9yIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIFREWC1zcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZWl0aGVyIHRoZSBgdGR4YCBpbnRlcmZhY2UgaGVyZSBvciBhdCBsZWFzdCBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHdlbGwuIEdpdmVuIHRoZSBURFggY29udGV4dCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBzZXR0aW5nIHVwIHRoZSBHdWVzdCBBdHRlc3RhdGlvbiBSZXBvcnQsIG9yIGlmIHRoZXJlIGlzIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycyBmb3IgdGhlIFREWC1zcGVjaWZpYyBoYXJkd2FyZSBhbmQgbWVtb3J5IHJlZ2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBpcyBhbHdheXMgY3JpdGljYWwgaW4gc2VjdXJlIHN5c3RlbXM7IGEgbWlzc3RlcCBoZXJlLCBhbmQgdGhlIHdob2xlIHN5c3RlbSBiZWNvbWVzIHZ1bG5lcmFibGUuIEl0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiBlc3RhYmxpc2hpbmcgdGhlIHNlY3VyZSBtZW1vcnkgcmVnaW9ucy4KCk15IGV4cGVydGlzZSB0ZWxscyBtZSB0byBxdWlja2x5IHdhdGNoIG91dCBmb3IgdGhlIGZvbGxvd2luZzogZXJyb3IgY29uZGl0aW9uczsgYW55IGNhbGxzIHRvIGxvdyBsZXZlbCBoYXJkd2FyZSByZWdpc3RlcnM7IGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBhbnkgb2YgdGhlIHNlY3VyaXR5IG1vZHVsZXMgaW4gdGhlIHN5c3RlbS4gSSBhbHNvIHdvdWxkIG5vdCBiZSBzdXJwcmlzZWQgdG8gc2VlIHRoaXMgY29kZSBkZWFsaW5nIHdpdGggaGFuZGxpbmcgaW50ZXJydXB0cyByZWxhdGVkIHRvIFREWCBldmVudHMsIHN1Y2ggYXMgYXR0ZXN0YXRpb24gb3IgbWVtb3J5IGZhdWx0cy4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGV4cGVjdGVkIHBsYXRmb3JtIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciB0aGUgaGFuZGxpbmcgb2YgYW55IG5lY2Vzc2FyeSBwcmUtYm9vdCByb3V0aW5lcyByZWxhdGVkIHRvIHRoZSBURFggZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdHsgVERYX01SXyhtcm93bmVyKSB8IFRTTV9NUl9GX05PSEFTSCB9LFxuIDEwMjpcdFx0eyBURFhfTVJfKG1yb3duZXJjb25maWcpIHwgVFNNX01SX0ZfTk9IQVNIIH0sXG4gMTAzOlx0fTtcbiAxMDQ6XHQjdW5kZWYgVERYX01SX1xuIDEwNTpcdFxuIDEwNjpcdHN0YXRpYyBpbnQgdGR4X21yX3JlZnJlc2goY29uc3Qgc3RydWN0IHRzbV9tZWFzdXJlbWVudHMgKnRtKVxuIDEwNzpcdHtcbiAxMDg6XHRcdHJldHVybiB0ZHhfZG9fcmVwb3J0KEtFUk5FTF9TT0NLUFRSKE5VTEwpLCBLRVJORUxfU09DS1BUUihOVUxMKSk7XG4gMTA5Olx0fVxuIDExMDpcdFxuIDExMTpcdHN0YXRpYyBpbnQgdGR4X21yX2V4dGVuZChjb25zdCBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50cyAqdG0sXG4gMTEyOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCB0c21fbWVhc3VyZW1lbnRfcmVnaXN0ZXIgKm1yLFxuIDExMzpcdFx0XHRcdCBjb25zdCB1OCAqZGF0YSlcbiAxMTQ6XHR7XG4gMTE1Olx0XHRyZXR1cm4gdGR4X2RvX2V4dGVuZChtciAtIHRtLVx1MDAzZW1ycywgZGF0YSk7XG4gMTE2Olx0fVxuIDExNzpcdFxuIDExODpcdHN0YXRpYyBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50cyB0ZHhfbWVhc3VyZW1lbnRzID0ge1xuIDExOTpcdFx0Lm1ycyA9IHRkeF9tcnMsXG4gMTIwOlx0XHQubnJfbXJzID0gQVJSQVlfU0laRSh0ZHhfbXJzKSxcbiAxMjE6XHRcdC5yZWZyZXNoID0gdGR4X21yX3JlZnJlc2gsXG4gMTIyOlx0XHQud3JpdGUgPSB0ZHhfbXJfZXh0ZW5kLFxuIDEyMzpcdH07XG4gMTI0Olx0XG4gMTI1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRkeF9tcl9pbml0KHZvaWQpXG4gMTI2Olx0e1xuIDEyNzpcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZztcbiAxMjg6XHRcdGludCByYztcbiAxMjk6XHRcbiAxMzA6XHRcdHU4ICpidWYgX19mcmVlKGtmcmVlKSA9IGt6YWxsb2MoVERYX1JFUE9SVF9MRU4sIEdGUF9LRVJORUwpO1xuIDEzMTpcdFx0aWYgKCFidWYpXG4gMTMyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIDEzMzpcdFxuIDEzNDpcdFx0dGR4X3JlcG9ydF9idWYgPSBidWY7XG4gMTM1Olx0XHRyYyA9IHRkeF9tcl9yZWZyZXNoKFx1MDAyNnRkeF9tZWFzdXJlbWVudHMpO1xuIDEzNjpcdFx0aWYgKHJjKVxuIDEzNzpcdFx0XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4gMTM4Olx0XG4gMTM5Olx0XHQvKlxuIDE0MDpcdFx0ICogQG1yX3ZhbHVlIHdhcyBpbml0aWFsaXplZCB3aXRoIHRoZSBvZmZzZXQgb25seSwgd2hpbGUgdGhlIGJhc2VcbiAxNDE6XHRcdCAqIGFkZHJlc3MgaXMgYmVpbmcgYWRkZWQgaGVyZS5cbiAxNDI6XHRcdCAqL1xuIDE0MzpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGR4X21ycyk7ICYjNDM7JiM0MztpKVxuIDE0NDpcdFx0XHQqKGxvbmcgKilcdTAwMjZ0ZHhfbXJzW2ldLm1yX3ZhbHVlICYjNDM7PSAobG9uZylidWY7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRnID0gdHNtX21yX2NyZWF0ZV9hdHRyaWJ1dGVfZ3JvdXAoXHUwMDI2dGR4X21lYXN1cmVtZW50cyk7XG4gMTQ3Olx0XHRpZiAoIUlTX0VSUihnKSlcbiAxNDg6XHRcdFx0dGR4X3JlcG9ydF9idWYgPSBub19mcmVlX3B0cihidWYpO1xuIDE0OTpcdFxuIDE1MDpcdFx0cmV0dXJuIGc7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuIDE1NDpcdHtcbiAxNTU6XHRcdHRzbV9tcl9mcmVlX2F0dHJpYnV0ZV9ncm91cChtcl9ncnApO1xuIDE1NjpcdFx0a2ZyZWUodGR4X3JlcG9ydF9idWYpO1xuIDE1NzpcdH1cbiAxNTg6XHRcbiAxNTk6XHQvKlxuIDE2MDpcdCAqIEludGVsJiMzOTtzIFNHWCBRRSBpbXBsZW1lbnRhdGlvbiBnZW5lcmFsbHkgdXNlcyBRdW90ZSBzaXplIGxlc3NcbiAxNjE6XHQgKiB0aGFuIDhLICgySyBRdW90ZSBkYXRhICYjNDM7IH41SyBvZiBjZXJ0aWZpY2F0ZSBibG9iKS5cbiAxNjI6XHQgKiBESUNFLWJhc2VkIGF0dGVzdGF0aW9uIHVzZXMgbGF5ZXJlZCBldmlkZW5jZSB0aGF0IHJlcXVpcmVzXG4gMTYzOlx0ICogbGFyZ2VyIFF1b3RlIHNpemUgKH4xMDBLKS5cbiAxNjQ6XHQgKi9cbiAxNjU6XHQjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFXHRTWl8xMjhLXG4gMTY2Olx0XG4gMTY3Olx0I2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUlx0XHQxXG4gMTY4Olx0XG4gMTY5Olx0LyogVERYIEdldFF1b3RlIHN0YXR1cyBjb2RlcyAqL1xuIDE3MDpcdCNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1NcdFx0MFxuIDE3MTpcdCNkZWZpbmUgR0VUX1FVT1RFX0lOX0ZMSUdIVFx0XHQweGZmZmZmZmZmZmZmZmZmZmZcbiAxNzI6XHRcbiAxNzM6XHQjZGVmaW5lIFREWF9RVU9URV9CVUZfTEVOKG4pXHRcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXG4gMTc0Olx0XG4gMTc1Olx0Lyogc3RydWN0IHRkeF9xdW90ZV9idWY6IEZvcm1hdCBvZiBRdW90ZSByZXF1ZXN0IGJ1ZmZlci5cbiAxNzY6XHQgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cbiAxNzc6XHQgKiBAc3RhdHVzOiBTdGF0dXMgY29kZSBvZiBRdW90ZSByZXF1ZXN0LCBmaWxsZWQgYnkgVk1NLlxuIDE3ODpcdCAqIEBpbl9sZW46IExlbmd0aCBvZiBURFJFUE9SVCwgZmlsbGVkIGJ5IFRELlxuIDE3OTpcdCAqIEBvdXRfbGVuOiBMZW5ndGggb2YgUXVvdGUgZGF0YSwgZmlsbGVkIGJ5IFZNTS5cbiAxODA6XHQgKiBAZGF0YTogUXVvdGUgZGF0YSBvbiBvdXRwdXQgb3IgVERSRVBPUlQgb24gaW5wdXQuXG4gMTgxOlx0ICpcbiAxODI6XHQgKiBNb3JlIGRldGFpbHMgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIgY2FuIGJlIGZvdW5kIGluIFREWFxuIDE4MzpcdCAqIEd1ZXN0LUhvc3QgQ29tbXVuaWNhdGlvbiBJbnRlcmZhY2UgKEdIQ0kpIGZvciBJbnRlbCBURFggMS4wLFxuIDE4NDpcdCAqIHNlY3Rpb24gdGl0bGVkIFwmIzM0O1RERy5WUC5WTUNBTExcdTAwM2NHZXRRdW90ZVx1MDAzZVwmIzM0O1xuIDE4NTpcdCAqL1xuIDE4NjpcdHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcbiAxODc6XHRcdHU2NCB2ZXJzaW9uO1xuIDE4ODpcdFx0dTY0IHN0YXR1cztcbiAxODk6XHRcdHUzMiBpbl9sZW47XG4gMTkwOlx0XHR1MzIgb3V0X2xlbjtcbiAxOTE6XHRcdHU4IGRhdGFbXTtcbiAxOTI6XHR9O1xuIDE5MzpcdFxuIDE5NDpcdC8qIFF1b3RlIGRhdGEgYnVmZmVyIGFuZCBsZW5ndGggKi9cbiAxOTU6XHRzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcbiAxOTY6XHRzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuO1xuIDE5NzpcdFxuIDE5ODpcdC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xuIDE5OTpcdHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7XG4gMjAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjc0CgkJCQkJCQlvdXRwdXQ6IDIzMgoJCQkJCQkJdGhvdWdodHM6IDExMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgVERYIEd1ZXN0IENvZGUmIzM5O3MgUmVhY2hhYmlsaXR5IGluIEZ1enppbmcgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiBgdGR4LWd1ZXN0LmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0cyBmdW5jdGlvbnMgYXJlIGNvbnRpbmdlbnQgb24gYHRkeF9ndWVzdF9pbml0KClgIHN1Y2NlZWRpbmcuIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBjaGVja3MgZm9yIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBDUFUgZmVhdHVyZS4gVGhpcyBmZWF0dXJlIGlzIG9ubHkgc2V0IGlmIHRoZSBrZXJuZWwgYm9vdHMgd2l0aGluIGFuIEludGVsIFREWCBUcnVzdCBEb21haW4sIHdoaWNoIGlzIGluZGljYXRlZCBieSBhIHNwZWNpZmljIENQVUlEIGxlYWYgY2hlY2sgZm9yICYjMzQ7SW50ZWxURFggICAgJiMzNDsgZHVyaW5nIGJvb3QsIGFuZCBpbiBgdGR4X2Vhcmx5X2luaXQoKWAuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50OiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgYmUgaXQgUUVNVSBvciBHQ0UgaW5zdGFuY2VzLCAqZG9uJiMzOTt0KiBzdXBwb3J0IG9yIGVtdWxhdGUgSW50ZWwgVERYIGhhcmR3YXJlLiBUaGlzIG1lYW5zIHRoZSByZXF1aXJlZCBDUFVJRCBsZWFmIHdvbiYjMzk7dCBiZSBwcmVzZW50LCBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCB3b24mIzM5O3QgYmUgc2V0LCBhbmQgYHRkeF9ndWVzdF9pbml0KClgIHdpbGwgZmFpbCwgcmV0dXJuaW5nIGAtRU5PREVWYC4gVGhhdCBtZWFucyB0aGUgbmV3IGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGZ1bmN0aW9uIGFuZCB0aGUgdXBkYXRlZCBxdW90ZSBidWZmZXIgYWxsb2NhdGlvbiBpbiBgdGR4LWd1ZXN0LmNgIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuCgpCYXNlZCBvbiB0aGUgY3JpdGVyaWEgb3V0bGluZWQgZm9yIGRldGVybWluaW5nIGBXb3J0aEZ1enppbmdgLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gb24gJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgdGhlIGNvZGUgY2xlYXJseSBmYWxscyBpbnRvIHRoaXMgY2F0ZWdvcnkuIFREWCByZXF1aXJlcyBzcGVjaWFsaXplZCBJbnRlbCBYZW9uIGhhcmR3YXJlIGFuZCBURFggZmlybXdhcmUvaHlwZXJ2aXNvciBzdXBwb3J0LCB3aGljaCBhcmVuJiMzOTt0IGF2YWlsYWJsZSBpbiBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoaXMgZmVhdHVyZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gdGhlIHN0YW5kYXJkIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBObyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVjZXNzYXJ5IGFzIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudCBmb3IgcnVubmluZyB0aGlzIGNvZGUgcGF0aCBpcyBvdXRzaWRlIG9mIHRoZSByZWFsbSBvZiBwb3NzaWJpbGl0aWVzIGZvciBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpcyBzb2xpZDoKKiAgIFdvcnRoRnV6emluZyA9IGZhbHNlCiogICBGb2N1c1N5bWJvbHMgPSBcWyBdCiogICBFbmFibGVDb25maWdzID0gXFsgXQoqICAgUmVhc29uaW5nID0gY29uY2lzZSBleHBsYW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSBhbmQgdXBkYXRlcyB0aGUgVERYIGd1ZXN0IGRyaXZlciAoZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jKSB0byBkeW5hbWljYWxseSBzaXplIHRoZSBxdW90ZSBidWZmZXIgYmFzZWQgb24gVERYIG1ldGFkYXRhLiBUaGlzIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBydW5uaW5nIGFzIGFuIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBsYWNrIHRoZSBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgc3VwcG9ydCByZXF1aXJlZCBmb3IgVERYLiBEdXJpbmcgYm9vdCwgdGR4X2Vhcmx5X2luaXQoKSB2ZXJpZmllcyBDUFVJRCBsZWFmIDB4MjEgZm9yIHRoZSBURFggc2lnbmF0dXJlLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNvIFg4Nl9GRUFUVVJFX1REWF9HVUVTVCBpcyBuZXZlciBzZXQuIENvbnNlcXVlbnRseSwgdGR4X2d1ZXN0X2luaXQoKSBpbW1lZGlhdGVseSBmYWlscyB3aXRoIC1FTk9ERVYgYW5kIHRoZSBkcml2ZXIgbmV2ZXIgcmVnaXN0ZXJzIG9yIGV4ZWN1dGVzLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSBhbmQgY2Fubm90IHJ1biBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIGFuZCB1cGRhdGVzIHRoZSBURFggZ3Vlc3QgZHJpdmVyIChkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMpIHRvIGR5bmFtaWNhbGx5IHNpemUgdGhlIHF1b3RlIGJ1ZmZlciBiYXNlZCBvbiBURFggbWV0YWRhdGEuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGxhY2sgdGhlIHNwZWNpYWxpemVkIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBURFguIER1cmluZyBib290LCB0ZHhfZWFybHlfaW5pdCgpIHZlcmlmaWVzIENQVUlEIGxlYWYgMHgyMSBmb3IgdGhlIFREWCBzaWduYXR1cmUsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc28gWDg2X0ZFQVRVUkVfVERYX0dVRVNUIGlzIG5ldmVyIHNldC4gQ29uc2VxdWVudGx5LCB0ZHhfZ3Vlc3RfaW5pdCgpIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGggLUVOT0RFViBhbmQgdGhlIGRyaXZlciBuZXZlciByZWdpc3RlcnMgb3IgZXhlY3V0ZXMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlIGFuZCBjYW5ub3QgcnVuIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjEzLjg3NjU4NjQ3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDg3MTMwOTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIGFuZCB1cGRhdGVzIHRoZSBURFggZ3Vlc3QgZHJpdmVyIChkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMpIHRvIGR5bmFtaWNhbGx5IHNpemUgdGhlIHF1b3RlIGJ1ZmZlciBiYXNlZCBvbiBURFggbWV0YWRhdGEuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGxhY2sgdGhlIHNwZWNpYWxpemVkIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBURFguIER1cmluZyBib290LCB0ZHhfZWFybHlfaW5pdCgpIHZlcmlmaWVzIENQVUlEIGxlYWYgMHgyMSBmb3IgdGhlIFREWCBzaWduYXR1cmUsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc28gWDg2X0ZFQVRVUkVfVERYX0dVRVNUIGlzIG5ldmVyIHNldC4gQ29uc2VxdWVudGx5LCB0ZHhfZ3Vlc3RfaW5pdCgpIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGggLUVOT0RFViBhbmQgdGhlIGRyaXZlciBuZXZlciByZWdpc3RlcnMgb3IgZXhlY3V0ZXMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlIGFuZCBjYW5ub3QgcnVuIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MTMuODc2NTkzNTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMzY0OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWExMmM2NDE2ZjRiOWNhZTE0ZDU0Njc5ZDNhMzE5MzcwZGNkZGJjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTowNDoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuaW5kZXggZjkwNGE2MzZkNDQ5Yi4uYjk4MDU4ZDdkMjQ0ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuQEAgLTE5OCw2ICsxOTgsMzAgQEAgdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XFxuIFxcbisvKipcXG4rICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcXG4rICpcXG4rICogUmVhZCB0aGUgbWF4aW11bSBzaXplIG9mIGEgVEQgUXVvdGUgZnJvbSBhIDQtYnl0ZSBURCBtZXRhZGF0YSBmaWVsZC4gVGhlIFREWFxcbisgKiBndWVzdCBkcml2ZXIgdXNlcyBpdCB0byBzaXplIHRoZSBidWZmZXIgZm9yIFF1b3Rlcy4gT2xkZXIgVERYIG1vZHVsZXMgZG8gbm90XFxuKyAqIHN1cHBvcnQgdGhpcyBmaWVsZCBhbmQgcmV0dXJuIGFuIGVycm9yLlxcbisgKlxcbisgKiBUaGUgcmVwb3J0ZWQgc2l6ZSBjb3ZlcnMgZXZlcnkgUXVvdGUgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLFxcbisgKiBpbmNsdWRpbmcgU0dYLWJhc2VkIFF1b3Rlcy5cXG4rICpcXG4rICogQSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUgcmVwb3J0ZWQgc2l6ZS5cXG4rICpcXG4rICogUmV0dXJuOiBNYXhpbXVtIFF1b3RlIHNpemUgaW4gYnl0ZXMgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlLlxcbisgKi9cXG4rdTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcXG4re1xcbitcXHR1NjQgdmFsLCByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXFx1MDAyNnZhbCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xcbitcXG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuaW5kZXggZjIwZTkxZDdhYzM1Yi4uNmYxMDZkNGIxYTU4MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG5AQCAtNTAsNiArNTAsNyBAQFxcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1xcdFxcdDB4MTExMDAwMDMwMDAwMDAxNlxcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1xcdFxcdFxcdDB4MTExMDAwMDMwMDAwMDAxN1xcbisjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkVcXHRcXHQweDkwMTAwMDAyMDAwMDAwMDdcXG4gI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTXFx0XFx0MHg5MTAwMDAwMDAwMDAwMDEwXFxuICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRURcXHQweDkxMDAwMDAwMDAwMDAwMTlcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtODMsNiArODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XFxuIFxcbiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7XFxuIFxcbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcXG4rXFxuIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpO1xcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjcyMjRhNjZiNjVkMTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuKysrIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcXG4gICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlc1xcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxcbiAgKi9cXG4tI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkVcXHRcXHRTWl8xMjhLXFxuKyNkZWZpbmUgR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkVcXHRTWl8xMjhLXFxuIFxcbiAjZGVmaW5lIEdFVF9RVU9URV9DTURfVkVSXFx0XFx0MVxcbiBcXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXFx0XFx0MFxcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcXHRcXHQweGZmZmZmZmZmZmZmZmZmZmZcXG4gXFxuLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU5cXHRcXHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcXG4rI2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVxcdFxcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXFxuIFxcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxcbiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cXG5AQCAtMTkxLDggKzE5MSw5IEBAIHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcXG4gXFx0dTggZGF0YVtdO1xcbiB9O1xcbiBcXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cXG4rLyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqL1xcbiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcXG4rc3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcXG4gXFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xcbkBAIC0yMDksOSArMjEwLDggQEAgc3RhdGljIGxvbmcgdGR4X2dldF9yZXBvcnQwKHN0cnVjdCB0ZHhfcmVwb3J0X3JlcSBfX3VzZXIgKnJlcSlcXG4gXFx0XFx0XFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVxcdTAwM2V0ZHJlcG9ydCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuK3N0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkge1xcbkBAIC0yMjIsMTIgKzIyMiwzNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuIFxcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXFxuKy8qXFxuKyAqIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCBmb3IgYSBRdW90ZS4gVGhpcyBjb3ZlcnMgYWxsIFF1b3RlXFxuKyAqIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXFxuKyAqL1xcbitzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHUzMiBxdW90ZV9zaXplID0gdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXG4rXFx0aWYgKHF1b3RlX3NpemUpXFxuK1xcdFxcdC8qIFRoZSByZXBvcnRlZCBzaXplIGRvZXMgbm90IGluY2x1ZGUgdGhlIGJ1ZmZlciBoZWFkZXIgKi9cXG4rXFx0XFx0bGVuID0gVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0LyogT2xkZXIgVERYIG1vZHVsZXMgZG9uJ3QgcmVwb3J0IHRoZSBzaXplLCB1c2UgdGhlIGRlZmF1bHQgKi9cXG4rXFx0XFx0bGVuID0gR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkU7XFxuK1xcbitcXHRyZXR1cm4gbGVuO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXFxuIHtcXG4tXFx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcXG4gXFx0dW5zaWduZWQgaW50IGNvdW50ID0gbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHZvaWQgKmFkZHI7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGlzIGZhaWxzIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBleGNlZWRzIHRoZSBidWRkeSBhbGxvY2F0b3Inc1xcbitcXHQgKiBtYXhpbXVtIG9yZGVyIChvcmRlci0xMCwgNE1CKS5cXG4rXFx0ICovXFxuIFxcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdChsZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4gXFx0aWYgKCFhZGRyKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMjg1LDcgKzMwNyw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXFxuIFxcdGlmIChkZXNjLVxcdTAwM2VpbmJsb2JfbGVuICE9IFREWF9SRVBPUlREQVRBX0xFTilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgR0VUX1FVT1RFX0JVRl9TSVpFKTtcXG4rXFx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIHF1b3RlX2RhdGFfbGVuKTtcXG4gXFxuIFxcdC8qIFVwZGF0ZSBRdW90ZSBidWZmZXIgaGVhZGVyICovXFxuIFxcdHF1b3RlX2J1Zi1cXHUwMDNldmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSO1xcbkBAIC0yOTYsNyArMzE4LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGVyciA9IHRkeF9oY2FsbF9nZXRfcXVvdGUocXVvdGVfZGF0YSwgR0VUX1FVT1RFX0JVRl9TSVpFKTtcXG4rXFx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJHZXRRdW90ZSBoeXBlcmNhbGwgZmFpbGVkLCBzdGF0dXM6JWxseFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuQEAgLTMxNSw3ICszMzcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxcbiBcXG4gXFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXFx1MDAzZW91dF9sZW4pO1xcbiBcXG4tXFx0aWYgKG91dF9sZW4gXFx1MDAzZSBURFhfUVVPVEVfTUFYX0xFTilcXG4rXFx0aWYgKFREWF9RVU9URV9CVUZfTEVOKG91dF9sZW4pIFxcdTAwM2UgcXVvdGVfZGF0YV9sZW4pXFxuIFxcdFxcdHJldHVybiAtRUZCSUc7XFxuIFxcbiBcXHRidWYgPSBrdm1lbWR1cChxdW90ZV9idWYtXFx1MDAzZWRhdGEsIG91dF9sZW4sIEdGUF9LRVJORUwpO1xcbkBAIC00MTcsNyArNDM5LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZGVpbml0X21yO1xcbiBcXG4tXFx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZigpO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgYnVmZmVyIHNpemUgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlIFRELFxcbitcXHQgKiBldmVuIGFmdGVyIGEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZS5cXG4rXFx0ICovXFxuK1xcdHF1b3RlX2RhdGFfbGVuID0gUEFHRV9BTElHTihnZXRfcXVvdGVfYnVmX3NpemUoKSk7XFxuK1xcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xcbiBcXHRpZiAoIXF1b3RlX2RhdGEpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUXVvdGUgYnVmZmVyXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtNDMxLDcgKzQ1OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZnJlZV9xdW90ZTpcXG4tXFx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XFxuK1xcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gZnJlZV9taXNjOlxcbiBcXHRtaXNjX2RlcmVnaXN0ZXIoXFx1MDAyNnRkeF9taXNjX2Rldik7XFxuIGRlaW5pdF9tcjpcXG5AQCAtNDQ0LDcgKzQ3MSw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcXG4gc3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXFxuIHtcXG4gXFx0dHNtX3JlcG9ydF91bnJlZ2lzdGVyKFxcdTAwMjZ0ZHhfdHNtX29wcyk7XFxuLVxcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEpO1xcbitcXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XFxuIFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gXFx0dGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjE1LjUwOTk3MDk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjkyMzc5MTE0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIGFuZCB1cGRhdGVzIHRoZSBURFggZ3Vlc3QgZHJpdmVyIChkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMpIHRvIGR5bmFtaWNhbGx5IHNpemUgdGhlIHF1b3RlIGJ1ZmZlciBiYXNlZCBvbiBURFggbWV0YWRhdGEuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGxhY2sgdGhlIHNwZWNpYWxpemVkIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBURFguIER1cmluZyBib290LCB0ZHhfZWFybHlfaW5pdCgpIHZlcmlmaWVzIENQVUlEIGxlYWYgMHgyMSBmb3IgdGhlIFREWCBzaWduYXR1cmUsIHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc28gWDg2X0ZFQVRVUkVfVERYX0dVRVNUIGlzIG5ldmVyIHNldC4gQ29uc2VxdWVudGx5LCB0ZHhfZ3Vlc3RfaW5pdCgpIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGggLUVOT0RFViBhbmQgdGhlIGRyaXZlciBuZXZlciByZWdpc3RlcnMgb3IgZXhlY3V0ZXMuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlIGFuZCBjYW5ub3QgcnVuIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YTEyYzY0MTZmNGI5Y2FlMTRkNTQ2NzlkM2EzMTkzNzBkY2RkYmM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MDQ6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5pbmRleCBmOTA0YTYzNmQ0NDliLi5iOTgwNThkN2QyNDRkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5AQCAtMTk4LDYgKzE5OCwzMCBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4rLyoqXG4rICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcbisgKlxuKyAqIFJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIFREIFF1b3RlIGZyb20gYSA0LWJ5dGUgVEQgbWV0YWRhdGEgZmllbGQuIFRoZSBURFhcbisgKiBndWVzdCBkcml2ZXIgdXNlcyBpdCB0byBzaXplIHRoZSBidWZmZXIgZm9yIFF1b3Rlcy4gT2xkZXIgVERYIG1vZHVsZXMgZG8gbm90XG4rICogc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4rICpcbisgKiBUaGUgcmVwb3J0ZWQgc2l6ZSBjb3ZlcnMgZXZlcnkgUXVvdGUgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLFxuKyAqIGluY2x1ZGluZyBTR1gtYmFzZWQgUXVvdGVzLlxuKyAqXG4rICogQSBydW50aW1lIFREWCBtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUgcmVwb3J0ZWQgc2l6ZS5cbisgKlxuKyAqIFJldHVybjogTWF4aW11bSBRdW90ZSBzaXplIGluIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZS5cbisgKi9cbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKVxuK3tcbitcdHU2NCB2YWwsIHJldDtcbitcbitcdHJldCA9IHRkZ192bV9yZChURENTX1FVT1RFX01BWF9TSVpFLCBcdTAwMjZ2YWwpO1xuK1xuK1x0cmV0dXJuIHJldCA/IDAgOiAodTMyKXZhbDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodGR4X2dldF9tYXhfcXVvdGVfc2l6ZSk7XG4rXG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjZmMTA2ZDRiMWE1ODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuQEAgLTUwLDYgKzUwLDcgQEBcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cbiAjZGVmaW5lIFREQ1NfQ09ORklHX0ZMQUdTXHRcdDB4MTExMDAwMDMwMDAwMDAxNlxuICNkZWZpbmUgVERDU19URF9DVExTXHRcdFx0MHgxMTEwMDAwMzAwMDAwMDE3XG4rI2RlZmluZSBURENTX1FVT1RFX01BWF9TSVpFXHRcdDB4OTAxMDAwMDIwMDAwMDAwN1xuICNkZWZpbmUgVERDU19OT1RJRllfRU5BQkxFU1x0XHQweDkxMDAwMDAwMDAwMDAwMTBcbiAjZGVmaW5lIFREQ1NfVE9QT0xPR1lfRU5VTV9DT05GSUdVUkVEXHQweDkxMDAwMDAwMDAwMDAwMTlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5AQCAtODMsNiArODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XG4gXG4gdTY0IHRkeF9oY2FsbF9nZXRfcXVvdGUodTggKmJ1Ziwgc2l6ZV90IHNpemUpO1xuIFxuK3UzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpO1xuK1xuIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpO1xuIHZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuaW5kZXggZDAzMDNlMzFlODE2MS4uNzIyNGE2NmI2NWQxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuKysrIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXG5AQCAtMTYyLDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuICAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXNcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxuICAqL1xuLSNkZWZpbmUgR0VUX1FVT1RFX0JVRl9TSVpFXHRcdFNaXzEyOEtcbisjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFXHRTWl8xMjhLXG4gXG4gI2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUlx0XHQxXG4gXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxuICNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1NcdFx0MFxuICNkZWZpbmUgR0VUX1FVT1RFX0lOX0ZMSUdIVFx0XHQweGZmZmZmZmZmZmZmZmZmZmZcbiBcbi0jZGVmaW5lIFREWF9RVU9URV9NQVhfTEVOXHRcdChHRVRfUVVPVEVfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IHRkeF9xdW90ZV9idWYpKVxuKyNkZWZpbmUgVERYX1FVT1RFX0JVRl9MRU4obilcdFx0c3RydWN0X3NpemVfdChzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiwgZGF0YSwgbilcbiBcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxuICAqIEB2ZXJzaW9uOiBRdW90ZSBmb3JtYXQgdmVyc2lvbiwgZmlsbGVkIGJ5IFRELlxuQEAgLTE5MSw4ICsxOTEsOSBAQCBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiB7XG4gXHR1OCBkYXRhW107XG4gfTtcbiBcbi0vKiBRdW90ZSBkYXRhIGJ1ZmZlciAqL1xuKy8qIFF1b3RlIGRhdGEgYnVmZmVyIGFuZCBsZW5ndGggKi9cbiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcbitzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuO1xuIFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7XG5AQCAtMjA5LDkgKzIxMCw4IEBAIHN0YXRpYyBsb25nIHRkeF9nZXRfcmVwb3J0MChzdHJ1Y3QgdGR4X3JlcG9ydF9yZXEgX191c2VyICpyZXEpXG4gXHRcdFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVx1MDAzZXRkcmVwb3J0KSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbitzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYsIHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkge1xuQEAgLTIyMiwxMiArMjIyLDM0IEBAIHN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbiBcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXG4rLypcbisgKiBSZXR1cm4gYSBidWZmZXIgc2l6ZSBsYXJnZSBlbm91Z2ggZm9yIGEgUXVvdGUuIFRoaXMgY292ZXJzIGFsbCBRdW90ZVxuKyAqIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXG4rICovXG4rc3RhdGljIHNpemVfdCBnZXRfcXVvdGVfYnVmX3NpemUodm9pZClcbit7XG4rXHR1MzIgcXVvdGVfc2l6ZSA9IHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKTtcbitcdHNpemVfdCBsZW47XG4rXG4rXHRpZiAocXVvdGVfc2l6ZSlcbitcdFx0LyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqL1xuK1x0XHRsZW4gPSBURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKTtcbitcdGVsc2VcbitcdFx0LyogT2xkZXIgVERYIG1vZHVsZXMgZG9uJ3QgcmVwb3J0IHRoZSBzaXplLCB1c2UgdGhlIGRlZmF1bHQgKi9cbitcdFx0bGVuID0gR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkU7XG4rXG4rXHRyZXR1cm4gbGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4rXHQvKlxuK1x0ICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJ3NcbitcdCAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLlxuK1x0ICovXG4gXHRhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIWFkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTI4NSw3ICszMDcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4rXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgcXVvdGVfZGF0YV9sZW4pO1xuIFxuIFx0LyogVXBkYXRlIFF1b3RlIGJ1ZmZlciBoZWFkZXIgKi9cbiBcdHF1b3RlX2J1Zi1cdTAwM2V2ZXJzaW9uID0gR0VUX1FVT1RFX0NNRF9WRVI7XG5AQCAtMjk2LDcgKzMxOCw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xuK1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIkdldFF1b3RlIGh5cGVyY2FsbCBmYWlsZWQsIHN0YXR1czolbGx4XFxuXCIsIGVycik7XG4gXHRcdHJldHVybiAtRUlPO1xuQEAgLTMxNSw3ICszMzcsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4rXHRpZiAoVERYX1FVT1RFX0JVRl9MRU4ob3V0X2xlbikgXHUwMDNlIHF1b3RlX2RhdGFfbGVuKVxuIFx0XHRyZXR1cm4gLUVGQklHO1xuIFxuIFx0YnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLVx1MDAzZWRhdGEsIG91dF9sZW4sIEdGUF9LRVJORUwpO1xuQEAgLTQxNyw3ICs0MzksMTIgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZGVpbml0X21yO1xuIFxuLVx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZigpO1xuK1x0LypcbitcdCAqIFRoZSBidWZmZXIgc2l6ZSByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgVEQsXG4rXHQgKiBldmVuIGFmdGVyIGEgcnVudGltZSBURFggbW9kdWxlIHVwZGF0ZS5cbitcdCAqL1xuK1x0cXVvdGVfZGF0YV9sZW4gPSBQQUdFX0FMSUdOKGdldF9xdW90ZV9idWZfc2l6ZSgpKTtcbitcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xuIFx0aWYgKCFxdW90ZV9kYXRhKSB7XG4gXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXG5cIik7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNDMxLDcgKzQ1OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX3F1b3RlOlxuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4rXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gZnJlZV9taXNjOlxuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gZGVpbml0X21yOlxuQEAgLTQ0NCw3ICs0NzEsNyBAQCBtb2R1bGVfaW5pdCh0ZHhfZ3Vlc3RfaW5pdCk7XG4gc3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXG4ge1xuIFx0dHNtX3JlcG9ydF91bnJlZ2lzdGVyKFx1MDAyNnRkeF90c21fb3BzKTtcbi1cdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEpO1xuK1x0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gXHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MTUuNTA5OTczODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTU2ODEyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcXVvdGUgc2l6ZS4gSSBzZWUgY2hhbmdlcyBpbiBgdGR4LmNgLCBhZGRpbmcgYSBmdW5jdGlvbiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCB0aGF0IGNhbGxzIGB0ZGdfdm1fcmQoKWAgd2l0aCBhIG5ldyBjb25zdGFudCBgVERDU19RVU9URV9NQVhfU0laRWAuIFRoZXJlIGFyZSBhbHNvIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgdXBkYXRlcyBkZWZpbmluZyB0aGUgY29uc3RhbnQgYW5kIGRlY2xhcmluZyB0aGUgZnVuY3Rpb24uIEFuZCBmaW5hbGx5LCB0aGUgYHRkeC1ndWVzdC5jYCBkcml2ZXIgaXMgdXNpbmcgdGhpcyBuZXcgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgc2l6ZSBhIHF1b3RlIGJ1ZmZlciBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIGNvbnRhaW5zIHNvbWUgc2l6ZSBjaGVja3MgdGhhdCB1c2UgdGhpcyBpbmZvcm1hdGlvbi5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyBjb2RlICphY3R1YWxseSogcnVuIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gSSBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1bCBoZXJlLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCBpdCdzIGEgbm8tZ28sIGV2ZW4gaWYgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbkxldCBtZSB0aGlua+KApiBXaGF0IGV4YWN0bHkgaXMgSW50ZWwgVERYPyBJIHJlY2FsbCBpdCdzIHJlbGF0ZWQgdG8gVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIHdoaWNoIGlzIGEgY29uZmlkZW50aWFsIGNvbXB1dGluZyB0ZWNobm9sb2d5LiBPa2F5LCBidXQgY2FuIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGV2ZW4gKnJ1biogVERYIGd1ZXN0cz8gSXMgdGhpcyBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBwYXRoLCBgdGR4X2d1ZXN0X2luaXRgLCBldmVyIGFjdHVhbGx5IGhpdCBpbiB0aG9zZSBlbnZpcm9ubWVudHM/IE9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyB0aGUgaW1wb3J0YW5jZSBvZiBvbmx5IGZ1enppbmcgY29kZSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGNvdWxkIGJlIGEgZGVhbGJyZWFrZXIuXG5cbkkgbmVlZCB0byBiZSB2ZXJ5IHByZWNpc2UgaGVyZS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gb25seSByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjaGFuZ2VzIGZhbGwgaW50byBjZXJ0YWluIGNhdGVnb3JpZXMuIFRoZSBrZXkgb25lIGhlcmUgaXMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiDigJMgRG9lcyBURFggZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnk/IEkgbmVlZCB0byBrbm93IGlmIHRoZSBgdGR4LWd1ZXN0YCBkcml2ZXIgaW5pdGlhbGl6ZXMgcHJvcGVybHkgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIGhvdyBgdGR4X2d1ZXN0X2luaXRgIGFjdHVhbGx5IHdvcmtzIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRyaXZlciB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBhbmQgd2hlbiB0aGF0IGNvZGUgaXMgYWN0dWFsbHkgaGl0LiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBkZWNpc2lvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MjIuNDY2NzkwMDQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5NTpcXHR9XFxuIDM5NjpcXHRcXG4gMzk3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRkeF9ndWVzdF9mb3BzID0ge1xcbiAzOTg6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDM5OTpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSB0ZHhfZ3Vlc3RfaW9jdGwsXFxuIDQwMDpcXHR9O1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdGR4X2F0dHJfZ3JvdXBzW10gPSB7XFxuIDQwMzpcXHRcXHROVUxMLCAvKiBtZWFzdXJlbWVudHMgKi9cXG4gNDA0OlxcdFxcdE5VTExcXG4gNDA1OlxcdH07XFxuIDQwNjpcXHRcXG4gNDA3OlxcdHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0ZHhfbWlzY19kZXYgPSB7XFxuIDQwODpcXHRcXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbiA0MDk6XFx0XFx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbiA0MTA6XFx0XFx0LmZvcHMgPSBcXHUwMDI2dGR4X2d1ZXN0X2ZvcHMsXFxuIDQxMTpcXHRcXHQuZ3JvdXBzID0gdGR4X2F0dHJfZ3JvdXBzLFxcbiA0MTI6XFx0fTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcXG4gNDE1OlxcdFxcdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXFxuIDQxNjpcXHRcXHR7fVxcbiA0MTc6XFx0fTtcXG4gNDE4OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB0ZHhfZ3Vlc3RfaWRzKTtcXG4gNDE5OlxcdFxcbiA0MjA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB0c21fcmVwb3J0X29wcyB0ZHhfdHNtX29wcyA9IHtcXG4gNDIxOlxcdFxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuIDQyMjpcXHRcXHQucmVwb3J0X25ldyA9IHRkeF9yZXBvcnRfbmV3LFxcbiA0MjM6XFx0XFx0LnJlcG9ydF9hdHRyX3Zpc2libGUgPSB0ZHhfcmVwb3J0X2F0dHJfdmlzaWJsZSxcXG4gNDI0OlxcdFxcdC5yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSA9IHRkeF9yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSxcXG4gNDI1OlxcdH07XFxuIDQyNjpcXHRcXG4gNDI3OlxcdHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuIDQyODpcXHR7XFxuIDQyOTpcXHRcXHRpbnQgcmV0O1xcbiA0MzA6XFx0XFxuIDQzMTpcXHRcXHRpZiAoIXg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcykpXFxuIDQzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0dGR4X2F0dHJfZ3JvdXBzWzBdID0gdGR4X21yX2luaXQoKTtcXG4gNDM1OlxcdFxcdGlmIChJU19FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKSlcXG4gNDM2OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHRkeF9hdHRyX2dyb3Vwc1swXSk7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnRkeF9taXNjX2Rldik7XFxuIDQzOTpcXHRcXHRpZiAocmV0KVxcbiA0NDA6XFx0XFx0XFx0Z290byBkZWluaXRfbXI7XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdC8qXFxuIDQ0MzpcXHRcXHQgKiBUaGUgYnVmZmVyIHNpemUgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlIFRELFxcbiA0NDQ6XFx0XFx0ICogZXZlbiBhZnRlciBhIHJ1bnRpbWUgVERYIG1vZHVsZSB1cGRhdGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjIyLjQ2Njg5MTIzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxMDA2NzA4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgcHJlc2VudGVkIGFzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFREWCBHdWVzdCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhlIGNoZWNrOiBgaWYgKCF4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpKSByZXR1cm4gLUVOT0RFVjtgLiBUaGlzIHN1Z2dlc3RzIGl0J3MgdmVyaWZ5aW5nIHNvbWV0aGluZyBhYm91dCB0aGUgQ1BVIGJlZm9yZSBwcm9jZWVkaW5nLiBJdCdzIHVzaW5nIGB4ODZfbWF0Y2hfY3B1KClgIHdpdGggYHRkeF9ndWVzdF9pZHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGB0ZHhfZ3Vlc3RfaWRzYCBhcmUsIHNwZWNpZmljYWxseSBob3cgdGhleSBhcmUgYmVpbmcgdXNlZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQgaXMgcmV0dXJuaW5nIGEgZGV2aWNlIG5vdCBmb3VuZCBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBndWVzdCBoYXMgbm90IHJlcG9ydGVkIGl0c2VsZiBhcyBjYXBhYmxlLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgeDg2X21hdGNoX2NwdSgpYCBmdW5jdGlvbiBpcyBjYWxsaW5nIGBYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpYC4gIEFoLCB0aGF0J3Mgd2hhdCdzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGNoZWNrIGZvciB0aGUgVERYIGd1ZXN0IGZlYXR1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXM6IHdoZXJlIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGFjdHVhbGx5ICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBmZWF0dXJlIGZsYWcgaXMgc2V0LiBJdCB3aWxsIGxpa2VseSBiZSBpbiBzb21lIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXIgZmlsZSBvciBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZ28gaHVudCB0aGF0IGRvd24gdG8gdW5kZXJzdGFuZCB3aGF0IGNyaXRlcmlhIG11c3QgYmUgbWV0IGZvciB0aGlzIGluaXRpYWxpemF0aW9uIHRvIHN1Y2NlZWQgYW5kIHdoeSB0aGlzIC1FTk9ERVYgZXJyb3IgbWlnaHQgYmUgaGFwcGVuaW5nLiBJcyB0aGlzIGEgQ1BVSUQgYml0PyBBbiBNU1IgdmFsdWU/IEdvdHRhIGZpbmQgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ2MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MzAuNTY3NTY0ODQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQxMDU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWDg2X0ZFQVRVUkVfVERYX0dVRVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMzY9dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDUtXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTE0NjpcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE0Ny1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjM5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcXHRcXHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyNDA6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcXHRcXHQoIDgqMzIrMjIpIC8qIFxcXCJ0ZHhfZ3Vlc3RcXFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yNDEtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTM0PXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMCh1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6Mzg6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTM5LVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgMCwgMCwgMCwgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTQ4PXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMSh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUxLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6NTI6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTUzLVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIDAsIDAsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD02Mj1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDIodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02Ni1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjY3OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC02OC1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgMCwgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTc3PXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgxLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6ODI6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTgzLVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTkyPXN0YXRpYyBpbmxpbmUgbG9uZyBrdm1faHlwZXJjYWxsNCh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg6OTg6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTk5LVxcdFxcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgcDQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaD04PXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FjY2VwdF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5LmgtMTAtXFx0LyogUGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5LWFjY2VwdGFuY2UgY2FsbCBnb2VzIGhlcmUgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oOjExOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpIHtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oLTEyLVxcdFxcdGlmICghdGR4X2FjY2VwdF9tZW1vcnkoc3RhcnQsIGVuZCkpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD05OT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSlcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEwMi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMDM6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMDQtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTIzPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDModW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTI3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjEyODpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEyOS1cXHRcXHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNDg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNCh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNTItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTUzOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTU0LVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTE3Mz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw1KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE3OC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxNzk6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xODAtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MjAxPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDYodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjA2LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjIwNzpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIwOC1cXHRcXHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgMCwgMCxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIyOD11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw3KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIzNC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMzU6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMzYtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIGluNCwgaW41LFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYz00NDA9dm9pZCBndWVzdF9mb3JjZV9tdHJyX3N0YXRlKHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdmFyLCB1bnNpZ25lZCBpbnQgbnVtX3ZhcixcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtNDYyLVxcdCAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9YRU5QVikgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjQ2MzpcXHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTQ2NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jPTkzOD12b2lkIF9faW5pdCBzZWxlY3RfaWRsZV9yb3V0aW5lKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTk1Mi1cXHRcXHRzdGF0aWNfY2FsbF91cGRhdGUoeDg2X2lkbGUsIG13YWl0X2lkbGUpO1xcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM6OTUzOlxcdH0gZWxzZSBpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKSB7XFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTQtXFx0XFx0cHJfaW5mbyhcXFwidXNpbmcgVERYIGF3YXJlIGlkbGUgcm91dGluZVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlM9MTI5PVNZTV9DT0RFX1NUQVJUX0xPQ0FMX05PQUxJR04oaWRlbnRpdHlfbWFwcGVkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TLTIwNC1cXHRhbmRsXFx0JChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfTEE1NyksICVyMTNkXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TOjIwNTpcXHRBTFRFUk5BVElWRSBcXFwiXFxcIiwgX19zdHJpbmdpZnkob3JsICRYODZfQ1I0X01DRSwgJXIxM2QpLCBYODZfRkVBVFVSRV9URFhfR1VFU1RcXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMtMjA2LVxcdG1vdnFcXHQlcjEzLCAlY3I0XFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB0ZHhfZ3Vlc3RfaWRzW10gPSB7XFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpcXHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTYtXFx0e31cXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcXHRcXHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMzA6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcXHRcXHQoIDgqMzIrMjIpIC8qIFxcXCJ0ZHhfZ3Vlc3RcXFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjMyLjM3MTY3NzQ1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1ODYwMTc0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFREWCBFYXJseSBJbml0aWFsaXphdGlvbiBhbmQgR3Vlc3QgRGV0ZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IG9mIGB0ZHhfZWFybHlfaW5pdGAgYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIFREWCBndWVzdCBlbnZpcm9ubWVudCBpcyBpbml0aWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9tZW50IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBpdCdzIG9wZXJhdGluZyB3aXRoaW4gYSBURFggY29udGV4dC4gVGhpcyBpcyBjcnVjaWFsIGZvciB2ZXJpZnlpbmcgdGhlIGludGVncml0eSBvZiB0aGUgVERYIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgYW55IHBvdGVudGlhbCBlYXJseS1zdGFnZSB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byBrbm93ICpwcmVjaXNlbHkqIHdoYXQgdGhlIGRldGVjdGlvbiBtZWNoYW5pc21zIGFyZSwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc3VtcHRpb25zIHRoZXkgbWFrZSBhYm91dCB0aGUgaGFyZHdhcmUgb3IgZmlybXdhcmUgZW52aXJvbm1lbnQuIEFyZSB3ZSByZWx5aW5nIHNvbGVseSBvbiBDUFVJRCBmZWF0dXJlcywgbWVtb3J5IG1hcCBpbnNwZWN0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJJ20gbG9va2luZyBmb3IgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgZGVlcGVyIGludmVzdGlnYXRpb24gaW50byBURFggZ3Vlc3QgYnJpbmctdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzMwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MzQuOTU3Njk3ODgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTcwMTM4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2Vhcmx5X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTAwMj1zdGF0aWMgaW50IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMDYtXFx0ICogT25seSBoYW5kbGUgc2hhcmVkLVxcdTAwM2Vwcml2YXRlIGNvbnZlcnNpb24gaGVyZS5cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDA3OlxcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMDgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDE1PXN0YXRpYyBpbnQgdGR4X2VuY19zdGF0dXNfY2hhbmdlX2ZpbmlzaCh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbnVtcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDE5LVxcdCAqIE9ubHkgaGFuZGxlIHByaXZhdGUtXFx1MDAzZXNoYXJlZCBjb252ZXJzaW9uIGhlcmUuXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTAyMDpcXHQgKiBTZWUgdGhlIGNvbW1lbnQgaW4gdGR4X2Vhcmx5X2luaXQoKS5cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDIxLVxcdCAqL1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEyMj1zdGF0aWMgX19pbml0IHZvaWQgdGR4X2Fubm91bmNlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTM1LVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExMzY6dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTM3LXtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTU3PXN0cnVjdCB2ZV9pbmZvIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTY5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjcwOnZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTcxLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9ODk9dm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC05Mi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Vhcmx5X2luaXQodm9pZCkgeyB9O1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTk0LXN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmM9MjIyPWFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgX19pbml0IF9fbm9yZXR1cm4geDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcmVhbF9tb2RlX2RhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMtMjc4LVxcdC8qIE5lZWRlZCBiZWZvcmUgY2NfcGxhdGZvcm1faGFzKCkgY2FuIGJlIHVzZWQgZm9yIFREWCAqL1xcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYzoyNzk6XFx0dGR4X2Vhcmx5X2luaXQoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMtMjgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDozNi42MTQ3MTY5ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODkxNDQ2OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgVERYIEVhcmx5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYHRkeF9lYXJseV9pbml0YCBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSB3b3JrcyBvbiB4ODYsIGVzcGVjaWFsbHkgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIGFuZCBib290LWxldmVsIHBlcnNwZWN0aXZlLiBTbywgSSBrbm93IHRoaXMgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBURFggZW52aXJvbm1lbnQuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG93LWxldmVsIHN0dWZmIOKAkyB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3IgVERYIGNhcGFiaWxpdGllcywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgYW5kIHBlcmhhcHMgZXZlbiBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgVERYIG1vZHVsZSBpdHNlbGYuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzaWxpY29uLCB0aGUgYm9vdGxvYWRlciwgYW5kIG90aGVyIGVhcmx5LXN0YWdlIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGhhcmR3YXJlJ3MgVERYLXNwZWNpZmljIGluc3RydWN0aW9ucyBhbmQgcmVnaXN0ZXJzLiBJdCdzIGdvaW5nIHRvIGJlIGtleSB0byB2ZXJpZnkgaG93IHRoZXNlIGVhcmx5IGludGVyYWN0aW9ucyBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGV4cGVjdGF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGFuZCB3aWxsIHRyeSB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgd2l0aCBjdXJyZW50IHNlY3VyaXR5IGJlc3QgcHJhY3RpY2VzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhpcyBmdW5jdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDozOS41MDYxNjcwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdFxcdHRkeF9kdW1wX2F0dHJpYnV0ZXMoYXJncy5yZHgpO1xcbjExMzE6XFx0XFxuMTEzMjpcXHRcXHR0ZGdfdm1fcmQoVERDU19URF9DVExTLCBcXHUwMDI2Y29udHJvbHMpO1xcbjExMzM6XFx0XFx0dGR4X2R1bXBfdGRfY3Rscyhjb250cm9scyk7XFxuMTEzNDpcXHR9XFxuMTEzNTpcXHRcXG4xMTM2OlxcdHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHR1NjQgY2NfbWFzaztcXG4xMTM5OlxcdFxcdHUzMiBlYXgsIHNpZ1szXTtcXG4xMTQwOlxcdFxcbjExNDE6XFx0XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxcbjExNDQ6XFx0XFx0XFx0cmV0dXJuO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XFxuMTE0NzpcXHRcXG4xMTQ4OlxcdFxcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cXG4xMTQ5OlxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMO1xcbjExNTI6XFx0XFxuMTE1MzpcXHRcXHQvKiBDb25maWd1cmUgdGhlIFREICovXFxuMTE1NDpcXHRcXHR0ZHhfc2V0dXAoXFx1MDAyNmNjX21hc2spO1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRjY19zZXRfbWFzayhjY19tYXNrKTtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0LypcXG4xMTU5OlxcdFxcdCAqIEFsbCBiaXRzIGFib3ZlIEdQQSB3aWR0aCBhcmUgcmVzZXJ2ZWQgYW5kIGtlcm5lbCB0cmVhdHMgc2hhcmVkIGJpdFxcbjExNjA6XFx0XFx0ICogYXMgZmxhZywgbm90IGFzIHBhcnQgb2YgcGh5c2ljYWwgYWRkcmVzcy5cXG4xMTYxOlxcdFxcdCAqXFxuMTE2MjpcXHRcXHQgKiBBZGp1c3QgcGh5c2ljYWwgbWFzayB0byBvbmx5IGNvdmVyIHZhbGlkIEdQQSBiaXRzLlxcbjExNjM6XFx0XFx0ICovXFxuMTE2NDpcXHRcXHRwaHlzaWNhbF9tYXNrIFxcdTAwMjY9IGNjX21hc2sgLSAxO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHQvKlxcbjExNjc6XFx0XFx0ICogVGhlIGtlcm5lbCBtYXBwaW5nIHNob3VsZCBtYXRjaCB0aGUgVERYIG1ldGFkYXRhIGZvciB0aGUgcGFnZS5cXG4xMTY4OlxcdFxcdCAqIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoKSBjYW4gdG91Y2ggbWVtb3J5ICphZGphY2VudCogdG8gdGhhdCB3aGljaCBpc1xcbjExNjk6XFx0XFx0ICogb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgY2FuIGNhdGNoIGV2ZW4gX21vbWVudGFyeV8gbWlzbWF0Y2hlcy4gIEJhZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDozOS41MDYyNjk2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDMxNjY4MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVERYIEd1ZXN0IEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBMZXQgbWUgZGlnIGludG8gdGhpcyBgdGR4X2Vhcmx5X2luaXRgIGNvZGUgc25pcHBldC4gSSBzZWUgYSBgY3B1aWRfY291bnRgIGNhbGwgd2l0aCBgVERYX0NQVUlEX0xFQUZfSURgIGFuZCBhIGNvbXBhcmlzb24gYWdhaW5zdCBgVERYX0lERU5UYC4gUmlnaHQsIHRoYXQncyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgaGFyZHdhcmUgY29uZmlkZW50aWFsIGNvbXB1dGluZy4gQnV0LCBjYW4gUUVNVSBldmVuIGVtdWxhdGUgVERYPyBBbmQgbW9yZSBzcGVjaWZpY2FsbHksIGRvZXMgc3RhbmRhcmQgUUVNVSBvciBzb21ldGhpbmcgbGlrZSBhIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpbnN0YW5jZSAqcnVuKiBhIFREWCBndWVzdD9cblxuV2FpdCwgVERYIGRlbWFuZHMgVERYIGhhcmR3YXJlIOKAkyBTYXBwaGlyZSBSYXBpZHMgb3IgbGF0ZXIgWGVvbiwgcmlnaHQ/IFBsdXMgaG9zdCBzdXBwb3J0IGxpa2UgTUNIRUNLLCBTRUFNLCBhIFREWCBtb2R1bGUgaW4gU0VBTSBmaXJtd2FyZSwgYW5kIEtWTSBURFggcGF0Y2hlcy4gU28sIGlzIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSByZWFsbHkgY29tcGF0aWJsZSB3aXRoIHJ1bm5pbmcgVERYP1xuXG5BaCwgb2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBwcm9qZWN0J3MgaW5zdHJ1Y3Rpb25zLiBTZWN0aW9ucyAxIGFuZCAyIGFyZSBrZXkuIFwiUmVhY2hhYmxlIGNvZGVcIiBpcyB0aGUgZ2F0ZS4gRnV6emluZyBpcyAqb25seSogdXNlZnVsIGZvciBjb2RlIHRoYXQgKmV4ZWN1dGVzKiBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMuIEFuZCB0aGVuIHNlY3Rpb24gMiB0YWxrcyBhYm91dCBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIOKAkyB0aGluZ3MgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQncyBub3QgZW11bGF0ZWQuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIGEgVERYIGd1ZXN0IGVmZmVjdGl2ZWx5IFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgaW4gdGhpcyBjb250ZXh0PyBEb2VzIGl0IGZhbGwgdW5kZXIgdGhhdCBjYXRlZ29yeSwgZ2l2ZW4gdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cz9cblxuSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBiZWZvcmUgSSBwcm9jZWVkLiBMZXQncyBzZWUgaG93IHN5emthbGxlciBoYW5kbGVzIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZW52aXJvbm1lbnRzIGdlbmVyYWxseSwgYW5kIGlmIGl0ICphY3R1YWxseSogZnV6emVzIFREWC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgc3l6a2FsbGVyIGV2ZW4gY29uc2lkZXJzIFREWC4gTGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHRyZWUsIEdpdCBoaXN0b3J5LCBvciBhbnkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgYHRkeC1ndWVzdGAgY29uY2VwdC4gUGVyaGFwcyBJIGNhbiBzZWFyY2ggdGhlIHN5emthbGxlciBjb2RlYmFzZSBpdHNlbGYgZm9yIG1lbnRpb25zIG9mIFwic3l6a2FsbGVyXCIgb3IgXCJ2aXJ0L2NvY29cIiAoY29uZmlkZW50aWFsIGNvbXB1dGluZykuXG5cbkknbGwgdHJ5IGEgZmV3IHNlYXJjaCB0ZXJtcyBhbmQgbG9vayBhdCBvdGhlciBjb25maWRlbnRpYWwgY29tcHV0aW5nIGRyaXZlcnMsIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgVERYX0dVRVNUYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIGl0IGFuZCB3aGVyZSBpdCdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MDkuODIyOTUzMjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MDU5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfR1VFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz04OTI9Y29uZmlnIEJIWVZFX0dVRVNUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTkwMC1cXG5hcmNoL3g4Ni9LY29uZmlnOjkwMTpjb25maWcgSU5URUxfVERYX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy05MDItXFx0Ym9vbCBcXFwiSW50ZWwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgLSBHdWVzdCBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToxMS4zNzkwMTk0MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ4NTQ5MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIENvbmZsaWN0cyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IG9yIGEgcG90ZW50aWFsIGNvbmZsaWN0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgYXJjaC94ODYvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgOTAxLiBJIGtub3cgdGhhdCBhcmVhIGRlYWxzIHdpdGggYSBjb3JlIHg4NiBhcmNoaXRlY3R1cmUgZmVhdHVyZXMsIHNvIHRoYXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBkZWZpbmVkIHRoZXJlIGFuZCBpZiBhbnl0aGluZyByZWxldmFudCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gZnVuY3Rpb25hbGl0eS5cblxuVGhlbiwgSSdsbCBwaXZvdCBhbmQgY2hlY2sgYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnYC4gVGhpcyBhcmVhIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBURFggZ3Vlc3QgZHJpdmVyLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGJldHRpbmcgdGhlcmUgY291bGQgYmUgc29tZSBpbnRlcmFjdGlvbiBvciBwb3RlbnRpYWwgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBhcmNoaXRlY3R1cmUtbGV2ZWwgY29uZmlndXJhdGlvbnMgYW5kIHRoZSB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLiBIb3BlZnVsbHksIHRoaXMgY3Jvc3MtcmVmZXJlbmNlIHdpbGwgcHJvdmlkZSBzb21lIGNsYXJpdHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3bywgZm9jdXNpbmcgb24gYW55IHN5bWJvbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgYXQgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkyMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjE0Ljg2NDUxMzU2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFxuIDkwMTpcXHRjb25maWcgSU5URUxfVERYX0dVRVNUXFxuIDkwMjpcXHRcXHRib29sIFxcXCJJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSAtIEd1ZXN0IFN1cHBvcnRcXFwiXFxuIDkwMzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0lOVEVMXFxuIDkwNDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4gOTA1OlxcdFxcdGRlcGVuZHMgb24gRUZJX1NUVUJcXG4gOTA2OlxcdFxcdGRlcGVuZHMgb24gUEFSQVZJUlRcXG4gOTA3OlxcdFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiA5MDg6XFx0XFx0c2VsZWN0IFg4Nl9NRU1fRU5DUllQVFxcbiA5MDk6XFx0XFx0c2VsZWN0IFg4Nl9NQ0VcXG4gOTEwOlxcdFxcdHNlbGVjdCBVTkFDQ0VQVEVEX01FTU9SWVxcbiA5MTE6XFx0XFx0aGVscFxcbiA5MTI6XFx0XFx0ICBTdXBwb3J0IHJ1bm5pbmcgYXMgYSBndWVzdCB1bmRlciBJbnRlbCBURFguICBXaXRob3V0IHRoaXMgc3VwcG9ydCxcXG4gOTEzOlxcdFxcdCAgdGhlIGd1ZXN0IGtlcm5lbCBjYW4gbm90IGJvb3Qgb3IgcnVuIHVuZGVyIFREWC5cXG4gOTE0OlxcdFxcdCAgVERYIGluY2x1ZGVzIG1lbW9yeSBlbmNyeXB0aW9uIGFuZCBpbnRlZ3JpdHkgY2FwYWJpbGl0aWVzXFxuIDkxNTpcXHRcXHQgIHdoaWNoIHByb3RlY3QgdGhlIGNvbmZpZGVudGlhbGl0eSBhbmQgaW50ZWdyaXR5IG9mIGd1ZXN0XFxuIDkxNjpcXHRcXHQgIG1lbW9yeSBjb250ZW50cyBhbmQgQ1BVIHN0YXRlLiBURFggZ3Vlc3RzIGFyZSBwcm90ZWN0ZWQgZnJvbVxcbiA5MTc6XFx0XFx0ICBzb21lIGF0dGFja3MgZnJvbSB0aGUgVk1NLlxcbiA5MTg6XFx0XFxuIDkxOTpcXHRlbmRpZiAjIEhZUEVSVklTT1JfR1VFU1RcXG4gOTIwOlxcdFxcbiA5MjE6XFx0c291cmNlIFxcXCJhcmNoL3g4Ni9LY29uZmlnLmNwdVxcXCJcXG4gOTIyOlxcdFxcbiA5MjM6XFx0Y29uZmlnIEhQRVRfVElNRVJcXG4gOTI0OlxcdFxcdGRlZl9ib29sIFg4Nl82NFxcbiA5MjU6XFx0XFx0cHJvbXB0IFxcXCJIUEVUIFRpbWVyIFN1cHBvcnRcXFwiIGlmIFg4Nl8zMlxcbiA5MjY6XFx0XFx0aGVscFxcbiA5Mjc6XFx0XFx0ICBVc2UgdGhlIElBLVBDIEhQRVQgKEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyKSB0byBtYW5hZ2VcXG4gOTI4OlxcdFxcdCAgdGltZSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBQSVQgYW5kIFJUQywgaWYgYSBIUEVUIGlzXFxuIDkyOTpcXHRcXHQgIHByZXNlbnQuXFxuIDkzMDpcXHRcXHQgIEhQRVQgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiB0aW1lciByZXBsYWNpbmcgbGVnYWN5IDgyNTRzLlxcbiA5MzE6XFx0XFx0ICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QXFxuIDkzMjpcXHRcXHQgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLFxcbiA5MzM6XFx0XFx0ICBhcyBpdCBpcyBvZmYtY2hpcC4gIFRoZSBpbnRlcmZhY2UgdXNlZCBpcyBkb2N1bWVudGVkXFxuIDkzNDpcXHRcXHQgIGluIHRoZSBIUEVUIHNwZWMsIHJldmlzaW9uIDEuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjE0Ljg2NDcxMjI4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTgyOTg2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipDaGVja2luZyB0aGUgVERYIEd1ZXN0IEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSW50ZWwncyBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBndWVzdCBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGtlcm5lbCB3aWxsIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBLY29uZmlnIHN0cnVjdHVyZSwgbGlrZWx5IHdpdGggYSBtYWluIGBDT05GSUdfVERYX0dVRVNUYCBvcHRpb24gYXMgdGhlIHRvcC1sZXZlbCBjb250cm9sLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVudCBvcHRpb25zLCB0b28g4oCTIG1heWJlIHRoaW5ncyB0aGF0IGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG1lbW9yeSBlbmNyeXB0aW9uLCBhdHRlc3RhdGlvbiBzdXBwb3J0LCBvciBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgdmlydHVhbGl6YXRpb24gZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcyBsaWtlIEtWTS4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIG9wdGlvbnMgZm9yIGRlYnVnIG9yIGxvZ2dpbmcsIGFuZCB3aGF0IGxldmVsIG9mIGdyYW51bGFyaXR5IHRoZXkgb2ZmZXIuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBoZXJlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBjb25maWd1cmUgYSBURFggZ3Vlc3QgcHJvcGVybHkgYW5kIHdoYXQgbGV2ZXJzIEkgY2FuIHB1bGwgdG8gb3B0aW1pemUgaXRzIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHBvc3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToyNC44NDc3MDU0MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjU3MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlREWF9HVUVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfU0VWX0dVRVNUKVxcdFxcdCs9IHNldi1ndWVzdC9cXG5kcml2ZXJzL3ZpcnQvY29jby9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19JTlRFTF9URFhfR1VFU1QpXFx0Kz0gdGR4LWd1ZXN0L1xcbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVxcdCs9IHRkeC1ob3N0L1xcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWc6MTpjb25maWcgVERYX0dVRVNUX0RSSVZFUlxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlREWCBHdWVzdCBkcml2ZXJcXFwiXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWc6MzpcXHRkZXBlbmRzIG9uIElOVEVMX1REWF9HVUVTVFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC9LY29uZmlnLTQtXFx0c2VsZWN0IFRTTV9SRVBPUlRTXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1REWF9HVUVTVF9EUklWRVIpICs9IHRkeC1ndWVzdC5vXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCB0ZHhfZ3Vlc3RfaWRzW10gPSB7XFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpcXHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTYtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjQuODk1OTY3ODA5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MDk4OTI5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgVERYIEd1ZXN0IERyaXZlciBLY29uZmlnIEVudHJ5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgVERYIEd1ZXN0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWdgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgYFREWF9HVUVTVF9EUklWRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZS4gSXQncyBhIHRyaXN0YXRlLCBzbyBpdCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBkaXNhYmxlZC4gVGhlIGRlcGVuZGVuY3kgb24gYElOVEVMX1REWF9HVUVTVGAgaXMgZXhwZWN0ZWQsIG9mIGNvdXJzZS4gV2Ugb25seSB3YW50IHRoaXMgZHJpdmVyIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBJbnRlbCBURFggZ3Vlc3QgZW52aXJvbm1lbnQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGhlcmUgaXMgdGhlIGBzZWxlY3QgVFNNX1JFUE9SVFNgLiBUaGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUsIHdoaWNoIG1lYW5zIEknbGwgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoYXQgYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgcHVsbGVkIGluLiBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIFRydXN0ZWQgU3lzdGVtIE1lbW9yeSByZXBvcnRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciBpdC4gU28gSSdsbCBwcm9iYWJseSBsb29rIGF0IGBkcml2ZXJzL3ZpcnQvY29jby90c20uY2AsIG9yIG1heWJlIHNvbWUgcmVsYXRlZCBmaWxlLCB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoYXQgYFRTTV9SRVBPUlRTYCBzeW1ib2wuIFRpbWUgdG8gc2VlIHdoYXQgdGhhdCBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToyNy42MDU4NjM3MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY3NjY2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFNNX1JFUE9SVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L2NvY28vYXJtLWNjYS1ndWVzdC9LY29uZmlnPTE9Y29uZmlnIEFSTV9DQ0FfR1VFU1RcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL2FybS1jY2EtZ3Vlc3QvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gQVJNNjRcXG5kcml2ZXJzL3ZpcnQvY29jby9hcm0tY2NhLWd1ZXN0L0tjb25maWc6NDpcXHRzZWxlY3QgVFNNX1JFUE9SVFNcXG5kcml2ZXJzL3ZpcnQvY29jby9hcm0tY2NhLWd1ZXN0L0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnPTU9Y29uZmlnIFRTTV9HVUVTVFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvS2NvbmZpZy03LVxcbmRyaXZlcnMvdmlydC9jb2NvL2d1ZXN0L0tjb25maWc6ODpjb25maWcgVFNNX1JFUE9SVFNcXG5kcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9LY29uZmlnLTktXFx0c2VsZWN0IFRTTV9HVUVTVFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfVFNNX1JFUE9SVFMpXFx0Kz0gdHNtX3JlcG9ydC5vXFxuZHJpdmVycy92aXJ0L2NvY28vZ3Vlc3QvTWFrZWZpbGUtMy10c21fcmVwb3J0LXkgOj0gcmVwb3J0Lm9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3Nldi1ndWVzdC9LY29uZmlnPTE9Y29uZmlnIFNFVl9HVUVTVFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEFNRF9NRU1fRU5DUllQVFxcbmRyaXZlcnMvdmlydC9jb2NvL3Nldi1ndWVzdC9LY29uZmlnOjU6XFx0c2VsZWN0IFRTTV9SRVBPUlRTXFxuZHJpdmVycy92aXJ0L2NvY28vc2V2LWd1ZXN0L0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZz0xPWNvbmZpZyBURFhfR1VFU1RfRFJJVkVSXFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gSU5URUxfVERYX0dVRVNUXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L0tjb25maWc6NDpcXHRzZWxlY3QgVFNNX1JFUE9SVFNcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvS2NvbmZpZy01LVxcdHNlbGVjdCBUU01fTUVBU1VSRU1FTlRTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjI5LjE1MjYzNzE5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDUxNTMyMjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgdGR4LWd1ZXN0LmNgIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaW4gYHRkeC1ndWVzdC5jYCwgdGhpcyBkcml2ZXIgaXMgcmVnaXN0ZXJpbmcgYSBtaXNjIGRldmljZS4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzaW5nIGB0ZHhfZ3Vlc3RfZm9wc2AgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIGEgYG1pc2NkZXZpY2VgIG5hbWVkIGBLQlVJTERfTU9ETkFNRWAgd2l0aCBkeW5hbWljIG1pbm9yIG51bWJlciDigJMgd2hpY2gsIEkgY2FuIGd1ZXNzIGlzIHByb2JhYmx5IGp1c3QgYHRkeC1ndWVzdGAsIGFuZCB0aGUgZGV2aWNlIG5vZGUgd291bGQgYmUgYC9kZXYvdGR4LWd1ZXN0YCBvciBgL2Rldi90ZHhfZ3Vlc3RgIGJhc2VkIG9uIHRoZSBuYW1lLiBJdCBhbHNvIHJlZ2lzdGVycyBpbiBzeXNmcyB1bmRlciBgL3N5cy9rZXJuZWwvY29uZmlnL3RzbS9yZXBvcnRgIGFzIGEgVFNNIHJlcG9ydHMgY29uZmlnZnMuIFRoYXQncyB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBzaWRlIG9mIHRoaW5ncy5cblxuQnV0IEknbSB3b25kZXJpbmcsIHdoYXQgdHJpZ2dlcnMgdGhpcyBkZXZpY2UgdG8gYWN0dWFsbHkgbG9hZD8gTGV0IG1lIHNlZS4gTG9va2luZyBhdCBgdGR4X2d1ZXN0X2luaXRgLCB0aGVyZSdzIGEgY2hlY2s6IGAheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKWAuIElmIHRoYXQgY2hlY2sgZmFpbHMsIHdlIGJhaWwgd2l0aCBgLUVOT0RFVmAuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoZSBzeXN0ZW0gbmVlZHMgdG8gbWF0Y2ggYSBjZXJ0YWluIENQVSBjYXBhYmlsaXR5LiBXaGF0IGlzIGB0ZHhfZ3Vlc3RfaWRzYD8gT2gsIGl0IGxvb2tzIGxpa2UgaXQncyBsaW5rZWQgdG8gYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAuXG5cblNvLCB3aGVuIGlzIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIHNldD8gQWhhLCBpdCdzIGluIGB0ZHhfZWFybHlfaW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIGBjcHVpZF9jb3VudGAgY2FsbCB3aXRoIGBURFhfQ1BVSURfTEVBRl9JRGAsIGFuZCBhIHNpZ25hdHVyZSBjaGVjayB3aXRoIGBURFhfSURFTlRgLiBJZiB0aGUgc2lnbmF0dXJlcyBtYXRjaCwgYHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKWAgaXMgY2FsbGVkLiBUaGF0IG1lYW5zIHRoYXQgdGhlIENQVSdzIGNhcGFiaWxpdGllcywgYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ1BVSUQsIGFyZSBhIGtleSBmYWN0b3IgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hhdCBgVERYX0NQVUlEX0xFQUZfSURgIGFuZCBgVERYX0lERU5UYCBhY3R1YWxseSBhcmU7IHRoZXkncmUgcHJvYmFibHkgc29tZSBzcGVjaWZpYyBDUFVJRCBsZWFmIGFuZCBzaWduYXR1cmUgdmFsdWVzIHJlbGF0ZWQgdG8gVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24pIHN1cHBvcnQuIEknbSBndWVzc2luZyB0aGVzZSBhcmUgY2hlY2tlZCAqdmVyeSogZWFybHkgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaGFzIHRoZSBwcm9wZXIgaGFyZHdhcmUgdG8gZXZlbiBjb25zaWRlciBydW5uaW5nIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNTo0My42Njc5NjM2OTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM4OTU4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVERYX0NQVUlEX0xFQUZfSURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21lbS5jPTE1PXN0YXRpYyBib29sIGVhcmx5X2lzX3RkeF9ndWVzdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21lbS5jLTI1LVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9tZW0uYzoyNjpcXHRcXHRjcHVpZF9jb3VudChURFhfQ1BVSURfTEVBRl9JRCwgMCwgXFx1MDAyNmVheCxcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWVtLmMtMjctXFx0XFx0XFx0ICAgIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYz02ND12b2lkIGVhcmx5X3RkeF9kZXRlY3Qodm9pZClcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYy02Ny1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmM6Njg6XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMtNjktXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTM2PXZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQwLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExNDE6XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQyLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oLTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaDoxMTojZGVmaW5lIFREWF9DUFVJRF9MRUFGX0lEXFx0MHgyMVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaC0xMi0jZGVmaW5lIFREWF9JREVOVFxcdFxcdFxcXCJJbnRlbFREWCAgICBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjQ1LjE3MTg2NTM1N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjc5MTIxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgSW50ZWwgVERYIERldGVjdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLiBDUFVJRCBsZWFmIDB4MjEgaXMgcmV0dXJuaW5nIFwiSW50ZWxURFggICAgXCIuIE9rYXksIHNvIFREWCBpcyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIExldCdzIGRpZyBpbnRvIGB0ZHhfc2V0dXBgLCB3aGljaCBJIGtub3cgaXMgaW4gYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYC4gSSdsbCB3YW50IHRvIHJldmlldyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzZXR1cCBvZiBURFgsIGluY2x1ZGluZyBhbnkgY2hlY2tzIG9uIHRoZSBCSU9TIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6NDguNDUwOTkwMTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODAwNjQ1MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIF9faW5pdCB0ZHhfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjUwLjIzMTA2MjAyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTk3NDY2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYHRkeF9zZXR1cGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIFREWCBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSB3b3VsZCB0aGlzIGNydWNpYWwgZnVuY3Rpb24sIGB0ZHhfc2V0dXBgLCByZXNpZGU/XCIgR2l2ZW4gdGhlIGNvbnRleHQg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zKSBhbmQgdGhlIHg4NiBhcmNoaXRlY3R1cmUg4oCTIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG9idmlvdXM6IGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoYXQgcGF0aCAqc2NyZWFtcyogcmVsZXZhbnQgY29kZS4gSXQncyBhbG1vc3QgYSBnaXZlbiB0aGF0IGB0ZHhfc2V0dXBgIHdpbGwgYmUgZGVmaW5lZCwgb3IgYXQgbGVhc3QgY2FsbGVkLCB3aXRoaW4gdGhhdCBmaWxlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiB1bmVhcnRoIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjU2LjgyODUzMTI5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MjkwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2NvY28vdGR4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTM0MD1zdGF0aWMgdm9pZCByZWR1Y2VfdW5uZWNlc3NhcnlfdmUodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTM1My1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzozNTQ6c3RhdGljIHZvaWQgdGR4X3NldHVwKHU2NCAqY2NfbWFzaylcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0zNTUte1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTEzNj12b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE1My1cXHQvKiBDb25maWd1cmUgdGhlIFREICovXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTE1NDpcXHR0ZHhfc2V0dXAoXFx1MDAyNmNjX21hc2spO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjU2Ljg3NDQ2NjIxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzAyOTI1ODY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBURFggU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cCBzZXF1ZW5jZSBmb3IgVERYIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gYHRkeF9zZXR1cGAgd2l0aGluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVERYIGluaXRpYWxpemF0aW9uIGxvZ2ljIHNob3VsZCByZXNpZGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGNhbGxzIHRoYXQgZXN0YWJsaXNoIHRoZSBURFggY29udGV4dCwgY29uZmlndXJlIHRoZSBtZW1vcnkgbWFwIGZvciB0aGUgZ3Vlc3QsIGFuZCBzZXQgdXAgYW55IG5lY2Vzc2FyeSBzdHJ1Y3R1cmVzIGZvciBzZWN1cmUgZ3Vlc3Qgb3BlcmF0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIFREWCBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBoYW5kbGVzIHRoZSBURFggZ3Vlc3Qtc3BlY2lmaWMgbWVtb3J5IG1hcCBhbmQgcHJvdGVjdGlvbiBrZXlzLCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBjb3JlIGtlcm5lbCBib290IHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjoxMy45MDM3Mjg3NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU0OlxcdHN0YXRpYyB2b2lkIHRkeF9zZXR1cCh1NjQgKmNjX21hc2spXFxuIDM1NTpcXHR7XFxuIDM1NjpcXHRcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG4gMzU3OlxcdFxcdHVuc2lnbmVkIGludCBncGFfd2lkdGg7XFxuIDM1ODpcXHRcXHR1NjQgdGRfYXR0cjtcXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0LypcXG4gMzYxOlxcdFxcdCAqIFRESU5GTyBURFggbW9kdWxlIGNhbGwgaXMgdXNlZCB0byBnZXQgdGhlIFREIGV4ZWN1dGlvbiBlbnZpcm9ubWVudFxcbiAzNjI6XFx0XFx0ICogaW5mb3JtYXRpb24gbGlrZSBHUEEgd2lkdGgsIG51bWJlciBvZiBhdmFpbGFibGUgdmNwdXMsIGRlYnVnIG1vZGVcXG4gMzYzOlxcdFxcdCAqIGluZm9ybWF0aW9uLCBldGMuIE1vcmUgZGV0YWlscyBhYm91dCB0aGUgQUJJIGNhbiBiZSBmb3VuZCBpbiBURFhcXG4gMzY0OlxcdFxcdCAqIEd1ZXN0LUhvc3QtQ29tbXVuaWNhdGlvbiBJbnRlcmZhY2UgKEdIQ0kpLCBzZWN0aW9uIDIuNC4yIFREQ0FMTFxcbiAzNjU6XFx0XFx0ICogW1RERy5WUC5JTkZPXS5cXG4gMzY2OlxcdFxcdCAqL1xcbiAzNjc6XFx0XFx0dGRjYWxsKFRER19WUF9JTkZPLCBcXHUwMDI2YXJncyk7XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdC8qXFxuIDM3MDpcXHRcXHQgKiBUaGUgaGlnaGVzdCBiaXQgb2YgYSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBcXFwic2hhcmluZ1xcXCIgYml0LlxcbiAzNzE6XFx0XFx0ICogU2V0IGl0IGZvciBzaGFyZWQgcGFnZXMgYW5kIGNsZWFyIGl0IGZvciBwcml2YXRlIHBhZ2VzLlxcbiAzNzI6XFx0XFx0ICpcXG4gMzczOlxcdFxcdCAqIFRoZSBHUEEgd2lkdGggdGhhdCBjb21lcyBvdXQgb2YgdGhpcyBjYWxsIGlzIGNyaXRpY2FsLiBURFggZ3Vlc3RzXFxuIDM3NDpcXHRcXHQgKiBjYW4gbm90IG1lYW5pbmdmdWxseSBydW4gd2l0aG91dCBpdC5cXG4gMzc1OlxcdFxcdCAqL1xcbiAzNzY6XFx0XFx0Z3BhX3dpZHRoID0gYXJncy5yY3ggXFx1MDAyNiBHRU5NQVNLKDUsIDApO1xcbiAzNzc6XFx0XFx0KmNjX21hc2sgPSBCSVRfVUxMKGdwYV93aWR0aCAtIDEpO1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHR0ZF9hdHRyID0gYXJncy5yZHg7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdC8qIEtlcm5lbCBkb2VzIG5vdCB1c2UgTk9USUZZX0VOQUJMRVMgYW5kIGRvZXMgbm90IG5lZWQgcmFuZG9tICNWRXMgKi9cXG4gMzgyOlxcdFxcdHRkZ192bV93cihURENTX05PVElGWV9FTkFCTEVTLCAwLCAtMVVMTCk7XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdGRpc2FibGVfc2VwdF92ZSh0ZF9hdHRyKTtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0cmVkdWNlX3VubmVjZXNzYXJ5X3ZlKCk7XFxuIDM4NzpcXHR9XFxuIDM4ODpcXHRcXG4gMzg5OlxcdC8qXFxuIDM5MDpcXHQgKiBUaGUgVERYIG1vZHVsZSBzcGVjIHN0YXRlcyB0aGF0ICNWRSBtYXkgYmUgaW5qZWN0ZWQgZm9yIGEgbGltaXRlZCBzZXQgb2ZcXG4gMzkxOlxcdCAqIHJlYXNvbnM6XFxuIDM5MjpcXHQgKlxcbiAzOTM6XFx0ICogIC0gRW11bGF0aW9uIG9mIHRoZSBhcmNoaXRlY3R1cmFsICNWRSBpbmplY3Rpb24gb24gRVBUIHZpb2xhdGlvbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6MTMuOTAzODI1NTU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MjgwNzg2Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggUmVhY2hhYmlsaXR5IGluIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHRkY2FsbChUREdfVlBfSU5GTywgXHUwMDI2YXJncyk7YCBjYWxsIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIEl0J3MgZXhlY3V0aW5nIHRoZSBgdGRjYWxsYCBpbnN0cnVjdGlvbiDigJMgdGhlIG9uZSB0aGF0J3MgdHlwaWNhbGx5IGAweDBmIDB4MDEgMHhjY2Agb3Igc2ltaWxhci4gIE9uIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgVk0sIHdpdGhvdXQgSW50ZWwgVERYIGhhcmR3YXJlLCB0aGlzIHdpbGwgbGlrZWx5IGNhdXNlIGEgI1VEIG9yICNWRSwgYmFzaWNhbGx5IGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGRvZXMgYSBzdGFuZGFyZCBRRU1VIC8gR0NFIGV2ZW4gKnJ1biogSW50ZWwgVERYPyAgQWJzb2x1dGVseSBub3QhIFREWCBuZWVkcyBzcGVjaWZpYyBJbnRlbCA0dGggR2VuIG9yIG5ld2VyIFhlb24gc2VydmVyIENQVXMgd2l0aCBoYXJkd2FyZSBURFggZW5hYmxlZCBpbiB0aGUgQklPUywgYW5kIFREWCBob3N0IHN1cHBvcnQsIHJpZ2h0PyBTdGFuZGFyZCBRRU1VIG9yIEdDRSBWTXMgYXJlICpub3QqIHJ1bm5pbmcgYXMgVERYIGd1ZXN0cy5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBldmVuIGNvbnNpZGVyIFREWCBndWVzdHMgaW4gaXRzIHJlYWNoYWJpbGl0eSBhbmFseXNpcz8gIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgc3l6a2FsbGVyIGRlY2lkZXMgd2hhdCdzIHdvcnRoIGZ1enppbmcuXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGNyaXRlcmlhIGluIGRldGFpbCBhbmQgcmV2aWV3IHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LlxuXG5UaGUgZ29hbCBpcyB0byBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGJ1Z3MsIGFuZCBuZXcgYXNzZXJ0aW9ucyBjYXVzZWQgYnkgdGhlIHBhdGNoLlxuXG4qICAgKipSZWFjaGFiaWxpdHkgaXMga2V5OioqIFN5emthbGxlciBjYW4gb25seSBmaW5kIGJ1Z3MgaW4gY29kZSB0aGF0IGFjdHVhbGx5IHJ1bnMgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBpdCB1c2VzIChHQ0Ugb3IgUUVNVSwgbGV2ZXJhZ2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIHN0cnVjdHVyYWxseSwgd2UgZG9uJ3QgZnV6eiBpdC5cblxuKiAgICoqTmVnYXRpdmUgY3JpdGVyaWE6KiogV2Ugc2F5IFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgdGhlIGNvZGUgZmFsbHMgaW50byBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzOlxuICAgICogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzIChkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZXRjLikuXG4gICAgKiAgIFVzZXItc3BhY2UgdGhpbmdzIHRoYXQgZG9uJ3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuXG4gICAgKiAgIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuXG4gICAgKiAgIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciB0aGUgY29kZS5cbiAgICAqICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogU3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgcmVhbCBoYXJkd2FyZS5cblxuSG9sZCBvbiwgdGhhdCBsYXN0IG9uZSBpcyB0aGUgY3J1Y2lhbCBiaXQuIFRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5IGhhcyBtZSB0aGlua2luZy4gSXMgYSBURFggZ3Vlc3QgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGVcIj8gT3IsIGlzIGl0IHJlYWNoYWJsZSBvciB1bnJlYWNoYWJsZT8gV2hhdCdzIHRoZSB3b3JkaW5nPyBUaGUgZXhhbXBsZSBpcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgc3VjaCB0aGF0IGRlbWFuZCBwaHlzaWNhbCBjYXJkcy4gIERvZXMgdGhpcyBleHRlbmQgdG8gY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLCBURFgpPyBHQ0UgaGFzIEMzIG1hY2hpbmVzIChJbnRlbCA0dGggR2VuIFhlb24pIHRoYXQgcHJvdmlkZSBDb25maWRlbnRpYWwgVk1zIHVzaW5nIEludGVsIFREWCwgc28gdGhleSBjbGVhcmx5IHN1cHBvcnQgVERYLiBCdXQsIGlzIHRoYXQgYSBcInN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50XCI/ICBJIG1lYW4sIHRoZSBkZWZpbml0aW9uIHN0YXRlcyBcInN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcClcIi4gRG9lcyBzeXprYWxsZXIgd29yayB3aXRoIHRoaXMgc3RhbmRhcmQgZW52aXJvbm1lbnQ/XG5cblN5emthbGxlciBydW5zIHN0YW5kYXJkIFFFTVUgKGxpa2UgYHFlbXUtc3lzdGVtLXg4Nl82NCAtZW5hYmxlLWt2bSAuLi5gKSBvciBzdGFuZGFyZCBHQ0UgaW5zdGFuY2VzIChgZTItc3RhbmRhcmQtNGAsIGV0Yy4pLiBTbywgdGhlIGNvcmUgcXVlc3Rpb24gYmVjb21lczogZG9lcyB0aGUgZ3Vlc3QgKmhhdmUqIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGluIHRoZXNlIHNldHVwcz8gTk8sIGFic29sdXRlbHkgbm90ISBXaGVuIGJvb3RpbmcgYSAqc3RhbmRhcmQqIFFFTVUgb3IgR0NFIFZNLCBgY3B1aWRfY291bnQoMHgyMSwgMClgICpkb2Vzbid0KiByZXR1cm4gXCJJbnRlbFREWCBcIi5cblxuVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGB0ZHgtZ3Vlc3RgIGlzIG5ldmVyIGluaXRpYWxpemVkISBgL2Rldi90ZHgtZ3Vlc3RgIGlzIG5ldmVyIGNyZWF0ZWQuICBgdGR4X3RzbV9vcHNgIGlzIG5ldmVyIHJlZ2lzdGVyZWQuICBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyAqbmV2ZXIqIGNhbGxlZC5cblxuV2FpdCBhIHNlY29uZC4gTGV0J3MgcmVhbGx5IHNvbGlkaWZ5IHRoaXMuIENhbiBRRU1VIGVtdWxhdGUgVERYPyBObywgdGhhdCdzIGltcG9zc2libGUuIFREWCByZXF1aXJlcyBJbnRlbCBoYXJkd2FyZSB3aXRoIE1DSEVDSy9TRUFNIGZpcm13YXJlLiAgV2hhdCBhYm91dCBUU00gcmVwb3J0cz8gTmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9yZXBvcnQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjMyLjE4NDYxNTA5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnQvY29jby9ndWVzdC9yZXBvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKiBDb3B5cmlnaHQoYykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHNtLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J3c2VtLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbmZpZ2ZzLmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdHN0YXRpYyBzdHJ1Y3QgdHNtX3Byb3ZpZGVyIHtcXG4gIDE2OlxcdFxcdGNvbnN0IHN0cnVjdCB0c21fcmVwb3J0X29wcyAqb3BzO1xcbiAgMTc6XFx0XFx0dm9pZCAqZGF0YTtcXG4gIDE4OlxcdFxcdGF0b21pY190IGNvdW50O1xcbiAgMTk6XFx0fSBwcm92aWRlcjtcXG4gIDIwOlxcdHN0YXRpYyBERUNMQVJFX1JXU0VNKHRzbV9yd3NlbSk7XFxuICAyMTpcXHRcXG4gIDIyOlxcdC8qKlxcbiAgMjM6XFx0ICogRE9DOiBUcnVzdGVkIFNlY3VyaXR5IE1vZHVsZSAoVFNNKSBBdHRlc3RhdGlvbiBSZXBvcnQgSW50ZXJmYWNlXFxuICAyNDpcXHQgKlxcbiAgMjU6XFx0ICogVGhlIFRTTSByZXBvcnQgaW50ZXJmYWNlIGlzIGEgY29tbW9uIHByb3ZpZGVyIG9mIGJsb2JzIHRoYXQgZmFjaWxpdGF0ZVxcbiAgMjY6XFx0ICogYXR0ZXN0YXRpb24gb2YgYSBUVk0gKGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZ3Vlc3QpIGJ5IGFuIGF0dGVzdGF0aW9uXFxuICAyNzpcXHQgKiBzZXJ2aWNlLiBBIFRTTSByZXBvcnQgY29tYmluZXMgYSB1c2VyLWRlZmluZWQgYmxvYiAobGlrZWx5IGEgcHVibGljLWtleSB3aXRoXFxuICAyODpcXHQgKiBhIG5vbmNlIGZvciBhIGtleS1leGNoYW5nZSBwcm90b2NvbCkgd2l0aCBhIHNpZ25lZCBhdHRlc3RhdGlvbiByZXBvcnQuIFRoYXRcXG4gIDI5OlxcdCAqIGNvbWJpbmVkIGJsb2IgaXMgdGhlbiB1c2VkIHRvIG9idGFpbiBzZWNyZXRzIHByb3ZpZGVkIGJ5IGFuIGFnZW50IHRoYXQgY2FuXFxuICAzMDpcXHQgKiB2YWxpZGF0ZSB0aGUgYXR0ZXN0YXRpb24gcmVwb3J0LiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGludGVyZmFjZSBpc1xcbiAgMzE6XFx0ICogaW52b2tlZCBpbmZyZXF1ZW50bHksIGhvd2V2ZXIgY29uZmlnZnMgYWxsb3dzIGZvciBtdWx0aXBsZSBhZ2VudHMgdG9cXG4gIDMyOlxcdCAqIG93biB0aGVpciBvd24gcmVwb3J0IGdlbmVyYXRpb24gaW5zdGFuY2VzIHRvIGdlbmVyYXRlIHJlcG9ydHMgYXNcXG4gIDMzOlxcdCAqIG9mdGVuIGFzIG5lZWRlZC5cXG4gIDM0OlxcdCAqXFxuICAzNTpcXHQgKiBUaGUgYXR0ZXN0YXRpb24gcmVwb3J0IGZvcm1hdCBpcyBUU00gcHJvdmlkZXIgc3BlY2lmaWMsIHdoZW4gLyBpZiBhIHN0YW5kYXJkXFxuICAzNjpcXHQgKiBtYXRlcmlhbGl6ZXMgdGhhdCBjYW4gYmUgcHVibGlzaGVkIGluc3RlYWQgb2YgdGhlIHZlbmRvciBsYXlvdXQuIFVudGlsIHRoZW5cXG4gIDM3OlxcdCAqIHRoZSAncHJvdmlkZXInIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCBvZiAnb3V0YmxvYicsIGFuZCBvcHRpb25hbGx5XFxuICAzODpcXHQgKiAnYXV4YmxvYicgYW5kICdtYW5pZmVzdGJsb2InLlxcbiAgMzk6XFx0ICovXFxuICA0MDpcXHRcXG4gIDQxOlxcdHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlIHtcXG4gIDQyOlxcdFxcdHN0cnVjdCB0c21fcmVwb3J0IHJlcG9ydDtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGxvbmcgd3JpdGVfZ2VuZXJhdGlvbjtcXG4gIDQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVhZF9nZW5lcmF0aW9uO1xcbiAgNDU6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtIGNmZztcXG4gIDQ2OlxcdH07XFxuICA0NzpcXHRcXG4gIDQ4OlxcdGVudW0gdHNtX2RhdGFfc2VsZWN0IHtcXG4gIDQ5OlxcdFxcdFRTTV9SRVBPUlQsXFxuICA1MDpcXHRcXHRUU01fQ0VSVFMsXFxuICA1MTpcXHRcXHRUU01fTUFOSUZFU1QsXFxuICA1MjpcXHR9O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgc3RydWN0IHRzbV9yZXBvcnQgKnRvX3RzbV9yZXBvcnQoc3RydWN0IGNvbmZpZ19pdGVtICpjZmcpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgdHNtX3JlcG9ydF9zdGF0ZSAqc3RhdGUgPVxcbiAgNTc6XFx0XFx0XFx0Y29udGFpbmVyX29mKGNmZywgc3RydWN0IHRzbV9yZXBvcnRfc3RhdGUsIGNmZyk7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdHJldHVybiBcXHUwMDI2c3RhdGUtXFx1MDAzZXJlcG9ydDtcXG4gIDYwOlxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0c3RhdGljIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0KVxcbiAgNjM6XFx0e1xcbiAgNjQ6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihyZXBvcnQsIHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlLCByZXBvcnQpO1xcbiAgNjU6XFx0fVxcbiAgNjY6XFx0XFxuICA2NzpcXHRzdGF0aWMgaW50IHRyeV9hZHZhbmNlX3dyaXRlX2dlbmVyYXRpb24oc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydClcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCB0c21fcmVwb3J0X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHJlcG9ydCk7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNnRzbV9yd3NlbSk7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdC8qXFxuICA3NDpcXHRcXHQgKiBNYWxpY2lvdXMgb3IgYnJva2VuIHVzZXJzcGFjZSBoYXMgd3JpdHRlbiBlbm91Z2ggdGltZXMgZm9yXFxuICA3NTpcXHRcXHQgKiByZWFkX2dlbmVyYXRpb24gPT0gd3JpdGVfZ2VuZXJhdGlvbiBieSBtb2R1bGFyIGFyaXRobWV0aWMgd2l0aG91dCBhblxcbiAgNzY6XFx0XFx0ICogaW50ZXJpbSByZWFkLiBTdG9wIGFjY2VwdGluZyB1cGRhdGVzIHVudGlsIHRoZSBjdXJyZW50IHJlcG9ydFxcbiAgNzc6XFx0XFx0ICogY29uZmlndXJhdGlvbiBpcyByZWFkLlxcbiAgNzg6XFx0XFx0ICovXFxuICA3OTpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXdyaXRlX2dlbmVyYXRpb24gPT0gc3RhdGUtXFx1MDAzZXJlYWRfZ2VuZXJhdGlvbiAtIDEpXFxuICA4MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAgODE6XFx0XFx0c3RhdGUtXFx1MDAzZXdyaXRlX2dlbmVyYXRpb24rKztcXG4gIDgyOlxcdFxcdHJldHVybiAwO1xcbiAgODM6XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgc3NpemVfdCB0c21fcmVwb3J0X3ByaXZsZXZlbF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNmZyxcXG4gIDg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0c3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCA9IHRvX3RzbV9yZXBvcnQoY2ZnKTtcXG4gIDg5OlxcdFxcdHVuc2lnbmVkIGludCB2YWw7XFxuICA5MDpcXHRcXHRpbnQgcmM7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHJjID0ga3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZ2YWwpO1xcbiAgOTM6XFx0XFx0aWYgKHJjKVxcbiAgOTQ6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnRzbV9yd3NlbSk7XFxuICA5NzpcXHRcXHRpZiAoIXByb3ZpZGVyLm9wcylcXG4gIDk4OlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjMyLjE4NDcwNzYwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjA3MzQ1OTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipURFggUmVhY2hhYmlsaXR5IEFuYWx5c2lzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgY29kZSByZWxhdGVkIHRvIGB0c21fcmVwb3J0X29wc2AgaXMgZXZlbiByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggYHRzbV9yZXBvcnRfcmVnaXN0ZXJgIGluIGB0ZHhfdHNtX29wc2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2Agb3IgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQgaW4gdGhlIHRhcmdldCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgY29kZSBnb3QgdHJpYWdlZCBpbW1lZGlhdGVseSBtYWtlcyBtZSBzdXNwZWN0IHRoZXJlJ3MgYSByZWFzb24sIGFuZCBJIG5lZWQgdG8gYmUgZGlsaWdlbnQuXG5cbk15IG1pbmQgcXVpY2tseSBqdW1wcyB0byBjaGVja2luZyBzeXprYWxsZXIncyBkZXNjcmlwdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgcmVtaW5kIG1lIG9mIHNvbWUgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIHRvb2xzIEkgKnNob3VsZCogdXNlIC0gYXZvaWRpbmcgdGhvc2Ugd2hpY2ggY2FuJ3QgaGFuZGxlIHN5emxhbmcgZGVzY3JpcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgcmlnaHQgdG9vbHMgLSBubyBgcmVhZC1zeXotc3BlY2Agb3IgYHN5ei1ncmVwcGVyYCBoZXJlLCBJIG5lZWQgdG8gdXNlIHRoZSBhdmFpbGFibGUgdG9vbHMsIHdoaWNoIGFyZSBgZ3JlcHBlcmAsIGByZWFkLWZpbGVgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBhbmQgYHNldC1yZXN1bHRzYC5cblxuSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5OiBpcyB0aGUgY29kZSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgaW5zdHJ1Y3Rpb25zIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0IGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgb24gZXhlY3V0YWJsZSBjb2RlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBVbnJlYWNoYWJsZSBjb2RlIGlzIGEgbm9uLXN0YXJ0ZXIuXG5cblwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgaXMgdGhlIGtleS4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmluZyBwaHlzaWNhbCBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIFREWC4gSXMgVERYIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZT9cblxuSSByZWNhbGwgdGhhdCBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAoNHRoIGdlbiBYZW9uIFNjYWxhYmxlIG9yIG5ld2VyKSBhbmQgc3BlY2lmaWMgQklPUyBhbmQgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9ucy4gQ3J1Y2lhbGx5LCBRRU1VICpjYW5ub3QqIGVtdWxhdGUgVERYLiBZb3UgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZS4gU3l6a2FsbGVyIHJ1bnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG9yIEdvb2dsZSdzIGVxdWl2YWxlbnQgbm9uLWNvbmZpZGVudGlhbCBpbnN0YW5jZXMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJvaWxzIGRvd24gdG86IEluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBsaWtlIHN5emthbGxlciB1c2VzLCBpcyBgdGR4X2d1ZXN0X2luaXRgIGV2ZXIgcmVhY2hlZD8gSSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBhZ2FpbiwgcmUtZW1waGFzaXppbmcgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGU6IEkgaGF2ZSB0byBiZSBzdXJlIHRoZSBjb2RlIGV4ZWN1dGVzIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudC5cblxuVGhlIG5leHQgdGhvdWdodCBpcywgXCJXYWl0LCBkb2VzIEdDRSBzdXBwb3J0IFREWD9cIiBHQ0UgKmRvZXMqIG9mZmVyIENvbmZpZGVudGlhbCBWTXMgd2l0aCBURFggb24gY2VydGFpbiBpbnN0YW5jZSB0eXBlcy4gQnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGFib3V0ICpzdGFuZGFyZCogdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTdGFuZGFyZCBHQ0UgaW5zdGFuY2VzIGRvbid0IHJ1biBpbiBURFggZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgYWxzbyBkb2Vzbid0IHJ1biBpbnNpZGUgQ29uZmlkZW50aWFsIFZNcy4gSXQgb3BlcmF0ZXMgaW4gdGhlIGRlZmF1bHQsIG5vbi1jb25maWRlbnRpYWwgZW52aXJvbm1lbnRzLlxuXG5Pa2F5LCBsZXQncyBleGFtaW5lIHRoZSBjb2RlLiBJbiBgdGR4X2Vhcmx5X2luaXQoKWAsIHRoZXJlJ3MgYSBDUFVJRCBjaGVjay4gVW5sZXNzIHdlJ3JlIG9uIGFjdHVhbCBURFggaGFyZHdhcmUsIHRoZSBzaWduYXR1cmUgY2hlY2sgZmFpbHMsIGFuZCBgdGR4X2Vhcmx5X2luaXRgIHJldHVybnMuIFRoaXMgcmVzdWx0cyBpbiB0aGUgZmxhZyBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBub3QgYmVpbmcgc2V0LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuXG5cblRoZW4sIHRoZSBjaGVjayBpbiBgdGR4X2d1ZXN0X2luaXQoKWAgZmFpbHMgYmVjYXVzZSB0aGUgZmVhdHVyZSBpc24ndCBzZXQuIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYCByZXR1cm5zIGZhbHNlLCBhbmQgYHRkeF9ndWVzdF9pbml0KClgIGltbWVkaWF0ZWx5IHJldHVybnMgYW4gZXJyb3IuIFRoaXMgbWVhbnMgdGhhdCBhbGwgdGhlIHN1YnNlcXVlbnQgY29kZSBwYXRocyBpbiBgdGR4LWd1ZXN0LmNgIHJlbGF0ZWQgdG8gcXVvdGUgbWFuYWdlbWVudCwgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgYW5kIFRTTSBvcHMgKm5ldmVyKiBnZXQgZXhlY3V0ZWQuXG5cbkluIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AsIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGlzIGludHJvZHVjZWQsIHdoaWNoIGNhbGxzIGB0ZGdfdm1fcmQoKWAuIFRoYXQgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgVERDQUxMYCBpbnN0cnVjdGlvbi4gQSBgVERDQUxMYCB3aWxsIHRyaWdnZXIgYSAjVUQgZmF1bHQgb24gYSBDUFUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgVERYLiBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBpcyBvbmx5IGNhbGxlZCBpbiBgZ2V0X3F1b3RlX2J1Zl9zaXplKClgLiBCZWNhdXNlIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGlzbid0IHJlYWNoZWQsIGl0IG1lYW5zIFREQ0FMTCBpcyBub3QgY2FsbGVkLiBUaGlzIGNvZGUgaXMgKnVucmVhY2hhYmxlKi5cblxuVGhlIGJvdHRvbSBsaW5lIGlzOiB0aGUgY29kZSBpcyBub3QgcmVhY2hhYmxlLiBJIG5vdyBuZWVkIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYC4gSWYgbm8gb3RoZXIgZnVuY3Rpb25zIGNhbGwgYHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKWAsIHRoZW4gdGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlLCBhbmQgbm8gZnV6emluZyBpcyBuZWNlc3NhcnkuIEknbGwgdXNlIGBncmVwcGVyYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjo1NC4yNTgxNzA1MTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDk0OTkxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2dldF9tYXhfcXVvdGVfc2l6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xOTk9RVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMDEtLyoqXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjAyOiAqIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSAtIEdldCB0aGUgbWF4aW11bSBURCBRdW90ZSBzaXplXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjAzLSAqXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMTQtICovXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjE1OnUzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjE2LXtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIyMi19XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MjIzOkVYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIyNC1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTg0PXU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC04NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo4Njp1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC04Ny1cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz0yMjk9c3RhdGljIHNpemVfdCBnZXRfcXVvdGVfYnVmX3NpemUodm9pZClcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtMjMwLXtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6MjMxOlxcdHUzMiBxdW90ZV9zaXplID0gdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpO1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy0yMzItXFx0c2l6ZV90IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6NTUuNzY3Njc1MjgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzNDQ4NjcxNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBHdWVzdCBDb2RlIFJlYWNoYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgVERYIGd1ZXN0IGNvZGUgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgbGlrZSBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZWAsIGlzIHJlYWNoYWJsZSBieSBzeXprYWxsZXIuIFRoZSBpbml0aWFsIGNvZGUgYW5hbHlzaXMgc2hvd3MgdGhhdCBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZWAgaXMgb25seSBjYWxsZWQgYnkgYGdldF9xdW90ZV9idWZfc2l6ZSgpYCwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCB3aXRoaW4gYHRkeF9ndWVzdF9pbml0KClgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0aCBpcyBldmVyIHRha2VuIHVuZGVyIHN0YW5kYXJkIHN5emthbGxlciBmdXp6aW5nIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIHN5emthbGxlciBndWlkZWxpbmVzIG9uIHJlYWNoYWJpbGl0eS4gVGhlIGd1aWRlbGluZXMgZW1waGFzaXplIHJlYWNoYWJpbGl0eSBhcyB0aGUgcHJpbWFyeSBmYWN0b3IuIFRoZSBnb2FsIGlzIHRvIGRpc2NvdmVyIGJ1Z3MgaW4gKmV4ZWN1dGFibGUqIGNvZGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgZXhwbGljaXQgbmVnYXRpdmUgY3JpdGVyaWE6IFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFNwZWNpZmljYWxseSwgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIGFyZSBleGNsdWRlZC5cblxuTm93LCBsZXQncyBhcHBseSB0aGlzIHRvIFREWC4gSW50ZWwgVERYIGlzIGEgaGFyZHdhcmUgQ1BVIHNlY3VyaXR5IHRlY2hub2xvZ3kgZm9yIGNvbmZpZGVudGlhbCBWTXMuIFRvIGV4ZWN1dGUsIGl0IHJlcXVpcmVzIHNwZWNpZmljIEludGVsIFhlb24gaGFyZHdhcmUgYW5kIFREWCBlbmFibGVkLiBJIHJlY2FsbCB0aGF0IGR1cmluZyBlYXJseSBib290LCB0aGUgZ3Vlc3Qga2VybmVsIGNoZWNrcyBmb3IgVERYIHN1cHBvcnQgdmlhIENQVUlEIGxlYWYgMHgyMSAoYFREWF9DUFVJRF9MRUFGX0lEYCkuIEluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCDigJMgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdXNlcyDigJMgdGhpcyBsZWFmIHdpbGwgKm5vdCogcmV0dXJuIHRoZSBURFggc2lnbmF0dXJlLiBDb25zZXF1ZW50bHksIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCBmZWF0dXJlIGZsYWcgd2lsbCBub3QgYmUgZW5hYmxlZC5cblxuU2luY2UgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgbm90IHByZXNlbnQsIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYCB3aWxsIGZhaWwuICBUaGlzIG1lYW5zIHRoYXQgYHRkeF9ndWVzdF9pbml0KClgIHdpbGwgcmV0dXJuIGAtRU5PREVWYCwgZWZmZWN0aXZlbHkgc2hvcnQtY2lyY3VpdGluZyB0aGUgZW50aXJlIGluaXRpYWxpemF0aW9uIHBhdGguIFRoZXJlZm9yZSwgdGhlIGRyaXZlciB3b24ndCByZWdpc3RlciBpdHMgYC9kZXYvdGR4LWd1ZXN0YCBkZXZpY2UsIGl0IHdvbid0IGludGVyYWN0IHdpdGggVFNNLCBhbmQgZnVuY3Rpb25zIGxpa2UgYGdldF9xdW90ZV9idWZfc2l6ZSgpYCwgIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgLCBgYWxsb2NfcXVvdGVfYnVmKClgLCBgZnJlZV9xdW90ZV9idWYoKWAsIGFuZCBgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKClgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBUaGUgY29kZSBpbiBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCBhbmQgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYCBpcyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUUVNVSBvZmZlcnMgYSB3b3JrYXJvdW5kIHRocm91Z2ggYC1jcHVgIGZsYWdzIG9yIHNvbWV0aGluZywgYnV0IEkgYW0gcHJldHR5IGNlcnRhaW4gUUVNVSBkb2VzIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgVERYLiBURFggaW4gS1ZNL1FFTVUgKnJlcXVpcmVzKiBzcGVjaWZpYyBoYXJkd2FyZSAoU2FwcGhpcmUgUmFwaWRzIG9yIG5ld2VyKSB3aXRoIFREWCBlbmFibGVkLCBob3N0IHN1cHBvcnQgKEtWTSBURFgpLCBhbmQgUUVNVSB3aXRoIFREWCBndWVzdCBzdXBwb3J0IChzcGVjaWZpY2FsbHksIGAtb2JqZWN0IHRkeC1ndWVzdCwuLi5gKS4gU3l6a2FsbGVyJ3Mgc3RhbmRhcmQgZnV6emluZyBzZXR1cCBkb2Vzbid0IG1lZXQgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cy5cblxuSSByZWNhbGwgdGhhdCByZXNlYXJjaCBwcm9qZWN0cyBleGlzdCB0aGF0IGhhdmUgZXhwbG9yZWQgZnV6emluZyBvZiBTRVYvU05QL1REWCwgaG93ZXZlciwgdGhhdCBpcyBub3QgdGhlIHN5emthbGxlciBkZWZhdWx0IHNldHVwLiBJbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIHRyaWFnZSwgY29kZSBpcyBub3QgZnV6emVkIGlmIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGlzbid0IHNvbWUgYmFja2Rvb3Igd2F5IHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLCBwZXJoYXBzIHRocm91Z2ggYSBzeXNmcyBpbnRlcmZhY2UsIGRlYnVnZnMgZW50cnksIG9yIHNvbWUga2luZCBvZiBtb2NrIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgdGhlIGB0ZHhfZ3Vlc3RfaWRzYCBvciBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB0aHJvdWdoIGEgZ3JlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjM5LjIxNjM1MTU0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODUzNzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfZ3Vlc3RfaWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MDc9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRkeF9taXNjX2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTMtXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNDpzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTUtXFx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTctfTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDE4Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB0ZHhfZ3Vlc3RfaWRzKTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE5LVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQyNz1zdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQzMC1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDMxOlxcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDMyLVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNzo0MS41NjQ4OTQ1MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE3MzI4MTg3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggR3Vlc3QgRHJpdmVyKipcblxuT2theSwgc28gYHRkeF9ndWVzdF9pZHNgIGlzIGlzb2xhdGVkIHdpdGhpbiBgdGR4LWd1ZXN0LmNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgb2J2aW91cyBlbnRyeXBvaW50cyBpbiBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0aGVyZS4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIGFic29yYiB0aGUgcmVzdCBvZiB0aGUgc291cmNlIGZpbGUgdG8gZ3Jhc3AgdGhlIGVudGlyZXR5IG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gUmVhZGluZyB0aGUgZnVsbCBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCBmaWxlIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gYWNoaWV2ZSB0aGlzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9ucyBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGNvZGUuIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIGpvYiwgYWZ0ZXIgYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjUzLjI5NzcxNjYxN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogVERYIGd1ZXN0IHVzZXIgaW50ZXJmYWNlIGRyaXZlclxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAyMiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHRcXG4gICA4OlxcdCNkZWZpbmUgcHJfZm10KGZtdClcXHRcXHRcXHRLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlzY2RldmljZS5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja3B0ci5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RzbS5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RzbS1tci5oXFx1MDAzZVxcbiAgMjI6XFx0XFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC90ZHgtZ3Vlc3QuaFxcdTAwM2VcXG4gIDI0OlxcdFxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9jcHVfZGV2aWNlX2lkLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3RkeC5oXFx1MDAzZVxcbiAgMjc6XFx0XFxuICAyODpcXHQvKiBURFJFUE9SVCBidWZmZXIgKi9cXG4gIDI5OlxcdHN0YXRpYyB1OCAqdGR4X3JlcG9ydF9idWY7XFxuICAzMDpcXHRcXG4gIDMxOlxcdC8qIExvY2sgdG8gc2VyaWFsaXplIFRERy5NUi5SRVBPUlQgYW5kIFRERy5NUi5SVE1SLkVYVEVORCBURENBTExzICovXFxuICAzMjpcXHRzdGF0aWMgREVGSU5FX01VVEVYKG1yX2xvY2spO1xcbiAgMzM6XFx0XFxuICAzNDpcXHQvKiBURFJFUE9SVCBmaWVsZHMgKi9cXG4gIDM1OlxcdGVudW0ge1xcbiAgMzY6XFx0XFx0VERSRVBPUlRfcmVwb3J0ZGF0YSA9IDEyOCxcXG4gIDM3OlxcdFxcdFREUkVQT1JUX3RlZV90Y2JfaW5mbyA9IDI1NixcXG4gIDM4OlxcdFxcdFREUkVQT1JUX3RkaW5mbyA9IFREUkVQT1JUX3RlZV90Y2JfaW5mbyArIDI1NixcXG4gIDM5OlxcdFxcdFREUkVQT1JUX2F0dHJpYnV0ZXMgPSBURFJFUE9SVF90ZGluZm8sXFxuICA0MDpcXHRcXHRURFJFUE9SVF94ZmFtID0gVERSRVBPUlRfYXR0cmlidXRlcyArIHNpemVvZih1NjQpLFxcbiAgNDE6XFx0XFx0VERSRVBPUlRfbXJ0ZCA9IFREUkVQT1JUX3hmYW0gKyBzaXplb2YodTY0KSxcXG4gIDQyOlxcdFxcdFREUkVQT1JUX21yY29uZmlnaWQgPSBURFJFUE9SVF9tcnRkICsgU0hBMzg0X0RJR0VTVF9TSVpFLFxcbiAgNDM6XFx0XFx0VERSRVBPUlRfbXJvd25lciA9IFREUkVQT1JUX21yY29uZmlnaWQgKyBTSEEzODRfRElHRVNUX1NJWkUsXFxuICA0NDpcXHRcXHRURFJFUE9SVF9tcm93bmVyY29uZmlnID0gVERSRVBPUlRfbXJvd25lciArIFNIQTM4NF9ESUdFU1RfU0laRSxcXG4gIDQ1OlxcdFxcdFREUkVQT1JUX3J0bXIwID0gVERSRVBPUlRfbXJvd25lcmNvbmZpZyArIFNIQTM4NF9ESUdFU1RfU0laRSxcXG4gIDQ2OlxcdFxcdFREUkVQT1JUX3J0bXIxID0gVERSRVBPUlRfcnRtcjAgKyBTSEEzODRfRElHRVNUX1NJWkUsXFxuICA0NzpcXHRcXHRURFJFUE9SVF9ydG1yMiA9IFREUkVQT1JUX3J0bXIxICsgU0hBMzg0X0RJR0VTVF9TSVpFLFxcbiAgNDg6XFx0XFx0VERSRVBPUlRfcnRtcjMgPSBURFJFUE9SVF9ydG1yMiArIFNIQTM4NF9ESUdFU1RfU0laRSxcXG4gIDQ5OlxcdFxcdFREUkVQT1JUX3NlcnZ0ZF9oYXNoID0gVERSRVBPUlRfcnRtcjMgKyBTSEEzODRfRElHRVNUX1NJWkUsXFxuICA1MDpcXHR9O1xcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgaW50IHRkeF9kb19yZXBvcnQoc29ja3B0cl90IGRhdGEsIHNvY2twdHJfdCB0ZHJlcG9ydClcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHNjb3BlZF9jb25kX2d1YXJkKG11dGV4X2ludHIsIHJldHVybiAtRUlOVFIsIFxcdTAwMjZtcl9sb2NrKSB7XFxuICA1NTpcXHRcXHRcXHR1OCAqcmVwb3J0ZGF0YSA9IHRkeF9yZXBvcnRfYnVmICsgVERSRVBPUlRfcmVwb3J0ZGF0YTtcXG4gIDU2OlxcdFxcdFxcdGludCByZXQ7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdFxcdGlmICghc29ja3B0cl9pc19udWxsKGRhdGEpIFxcdTAwMjZcXHUwMDI2XFxuICA1OTpcXHRcXHRcXHQgICAgY29weV9mcm9tX3NvY2twdHIocmVwb3J0ZGF0YSwgZGF0YSwgVERYX1JFUE9SVERBVEFfTEVOKSlcXG4gIDYwOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRcXHRyZXQgPSB0ZHhfbWNhbGxfZ2V0X3JlcG9ydDAocmVwb3J0ZGF0YSwgdGR4X3JlcG9ydF9idWYpO1xcbiAgNjM6XFx0XFx0XFx0aWYgKFdBUk5fT05DRShyZXQsIFxcXCJ0ZHhfbWNhbGxfZ2V0X3JlcG9ydDAoKSBmYWlsZWQ6ICVkXFxcIiwgcmV0KSlcXG4gIDY0OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdFxcdGlmICghc29ja3B0cl9pc19udWxsKHRkcmVwb3J0KSBcXHUwMDI2XFx1MDAyNlxcbiAgNjc6XFx0XFx0XFx0ICAgIGNvcHlfdG9fc29ja3B0cih0ZHJlcG9ydCwgdGR4X3JlcG9ydF9idWYsIFREWF9SRVBPUlRfTEVOKSlcXG4gIDY4OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgNjk6XFx0XFx0fVxcbiAgNzA6XFx0XFx0cmV0dXJuIDA7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdHN0YXRpYyBpbnQgdGR4X2RvX2V4dGVuZCh1OCBtcl9pbmQsIGNvbnN0IHU4ICpkYXRhKVxcbiAgNzQ6XFx0e1xcbiAgNzU6XFx0XFx0c2NvcGVkX2NvbmRfZ3VhcmQobXV0ZXhfaW50ciwgcmV0dXJuIC1FSU5UUiwgXFx1MDAyNm1yX2xvY2spIHtcXG4gIDc2OlxcdFxcdFxcdC8qXFxuICA3NzpcXHRcXHRcXHQgKiBURFggcmVxdWlyZXMgQGV4dGVuZF9idWYgdG8gYmUgNjQtYnl0ZSBhbGlnbmVkLlxcbiAgNzg6XFx0XFx0XFx0ICogSXQncyBzYWZlIHRvIHVzZSBSRVBPUlREQVRBIGJ1ZmZlciBmb3IgdGhhdCBwdXJwb3NlIGJlY2F1c2VcXG4gIDc5OlxcdFxcdFxcdCAqIHRkeF9tcl9yZXBvcnQvZXh0ZW5kX2xvY2soKSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxcbiAgODA6XFx0XFx0XFx0ICovXFxuICA4MTpcXHRcXHRcXHR1OCAqZXh0ZW5kX2J1ZiA9IHRkeF9yZXBvcnRfYnVmICsgVERSRVBPUlRfcmVwb3J0ZGF0YTtcXG4gIDgyOlxcdFxcdFxcdGludCByZXQ7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdFxcdG1lbWNweShleHRlbmRfYnVmLCBkYXRhLCBTSEEzODRfRElHRVNUX1NJWkUpO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRcXHRyZXQgPSB0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIobXJfaW5kLCBleHRlbmRfYnVmKTtcXG4gIDg3OlxcdFxcdFxcdGlmIChXQVJOX09OQ0UocmV0LCBcXFwidGR4X21jYWxsX2V4dGVuZF9ydG1yKCV1KSBmYWlsZWQ6ICVkXFxcIiwgbXJfaW5kLCByZXQpKVxcbiAgODg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDg5OlxcdFxcdH1cXG4gIDkwOlxcdFxcdHJldHVybiAwO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHQjZGVmaW5lIFREWF9NUl8ocikgLm1yX3ZhbHVlID0gKHZvaWQgKilURFJFUE9SVF8jI3IsIFRTTV9NUl8ociwgU0hBMzg0KVxcbiAgOTQ6XFx0c3RhdGljIHN0cnVjdCB0c21fbWVhc3VyZW1lbnRfcmVnaXN0ZXIgdGR4X21yc1tdID0ge1xcbiAgOTU6XFx0XFx0eyBURFhfTVJfKHJ0bXIwKSB8IFRTTV9NUl9GX1JUTVIgfSxcXG4gIDk2OlxcdFxcdHsgVERYX01SXyhydG1yMSkgfCBUU01fTVJfRl9SVE1SIH0sXFxuICA5NzpcXHRcXHR7IFREWF9NUl8ocnRtcjIpIHwgVFNNX01SX0ZfUlRNUiB9LFxcbiAgOTg6XFx0XFx0eyBURFhfTVJfKHJ0bXIzKSB8IFRTTV9NUl9GX1JUTVIgfSxcXG4gIDk5OlxcdFxcdHsgVERYX01SXyhtcnRkKSB9LFxcbiAxMDA6XFx0XFx0eyBURFhfTVJfKG1yY29uZmlnaWQpIHwgVFNNX01SX0ZfTk9IQVNIIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjUzLjI5Nzg3NjkzN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDQyNzkyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCAtIExpbmVzIDEwMS0yMDAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAxMDEgdG8gMjAwIHdpdGhpbiB0aGF0IGB0ZHgtZ3Vlc3QuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IGRlYWxpbmcgd2l0aCB0aGUgVERYIGd1ZXN0IGRyaXZlci4gQmFzZWQgb24gdGhlIGZpbGUgc3RydWN0dXJlLCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBzb21lIGNvcmUgaW5pdGlhbGl6YXRpb24sIHBlcmhhcHMgZXN0YWJsaXNoaW5nIHRoZSBpbml0aWFsIGNvbW11bmljYXRpb24gcGF0aCB3aXRoIHRoZSBURFggbW9kdWxlLCBvciBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBoYW5kbGluZyBURFgtc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBlaXRoZXIgdGhlIGB0ZHhgIGludGVyZmFjZSBoZXJlIG9yIGF0IGxlYXN0IHNvbWUgYmFzaWMgZXJyb3IgaGFuZGxpbmcgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgd2VsbC4gR2l2ZW4gdGhlIFREWCBjb250ZXh0LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIHNldHRpbmcgdXAgdGhlIEd1ZXN0IEF0dGVzdGF0aW9uIFJlcG9ydCwgb3IgaWYgdGhlcmUgaXMgdGhlIGVzdGFibGlzaG1lbnQgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGZvciB0aGUgVERYLXNwZWNpZmljIGhhcmR3YXJlIGFuZCBtZW1vcnkgcmVnaW9ucy4gVGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIGlzIGFsd2F5cyBjcml0aWNhbCBpbiBzZWN1cmUgc3lzdGVtczsgYSBtaXNzdGVwIGhlcmUsIGFuZCB0aGUgd2hvbGUgc3lzdGVtIGJlY29tZXMgdnVsbmVyYWJsZS4gSXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIGVzdGFibGlzaGluZyB0aGUgc2VjdXJlIG1lbW9yeSByZWdpb25zLlxuXG5NeSBleHBlcnRpc2UgdGVsbHMgbWUgdG8gcXVpY2tseSB3YXRjaCBvdXQgZm9yIHRoZSBmb2xsb3dpbmc6IGVycm9yIGNvbmRpdGlvbnM7IGFueSBjYWxscyB0byBsb3cgbGV2ZWwgaGFyZHdhcmUgcmVnaXN0ZXJzOyBhbmQgaW50ZXJhY3Rpb25zIHdpdGggYW55IG9mIHRoZSBzZWN1cml0eSBtb2R1bGVzIGluIHRoZSBzeXN0ZW0uIEkgYWxzbyB3b3VsZCBub3QgYmUgc3VycHJpc2VkIHRvIHNlZSB0aGlzIGNvZGUgZGVhbGluZyB3aXRoIGhhbmRsaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byBURFggZXZlbnRzLCBzdWNoIGFzIGF0dGVzdGF0aW9uIG9yIG1lbW9yeSBmYXVsdHMuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGV4cGVjdGVkIHBsYXRmb3JtIGNhcGFiaWxpdGllcy4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIHRoZSBoYW5kbGluZyBvZiBhbnkgbmVjZXNzYXJ5IHByZS1ib290IHJvdXRpbmVzIHJlbGF0ZWQgdG8gdGhlIFREWCBlbnZpcm9ubWVudC5cblxuTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgYmVpbmcgZG9uZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTYyNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDc6NTYuMzQwNjczMDY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXHR7IFREWF9NUl8obXJvd25lcikgfCBUU01fTVJfRl9OT0hBU0ggfSxcXG4gMTAyOlxcdFxcdHsgVERYX01SXyhtcm93bmVyY29uZmlnKSB8IFRTTV9NUl9GX05PSEFTSCB9LFxcbiAxMDM6XFx0fTtcXG4gMTA0OlxcdCN1bmRlZiBURFhfTVJfXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyBpbnQgdGR4X21yX3JlZnJlc2goY29uc3Qgc3RydWN0IHRzbV9tZWFzdXJlbWVudHMgKnRtKVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0cmV0dXJuIHRkeF9kb19yZXBvcnQoS0VSTkVMX1NPQ0tQVFIoTlVMTCksIEtFUk5FTF9TT0NLUFRSKE5VTEwpKTtcXG4gMTA5OlxcdH1cXG4gMTEwOlxcdFxcbiAxMTE6XFx0c3RhdGljIGludCB0ZHhfbXJfZXh0ZW5kKGNvbnN0IHN0cnVjdCB0c21fbWVhc3VyZW1lbnRzICp0bSxcXG4gMTEyOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50X3JlZ2lzdGVyICptcixcXG4gMTEzOlxcdFxcdFxcdFxcdCBjb25zdCB1OCAqZGF0YSlcXG4gMTE0OlxcdHtcXG4gMTE1OlxcdFxcdHJldHVybiB0ZHhfZG9fZXh0ZW5kKG1yIC0gdG0tXFx1MDAzZW1ycywgZGF0YSk7XFxuIDExNjpcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdHN0YXRpYyBzdHJ1Y3QgdHNtX21lYXN1cmVtZW50cyB0ZHhfbWVhc3VyZW1lbnRzID0ge1xcbiAxMTk6XFx0XFx0Lm1ycyA9IHRkeF9tcnMsXFxuIDEyMDpcXHRcXHQubnJfbXJzID0gQVJSQVlfU0laRSh0ZHhfbXJzKSxcXG4gMTIxOlxcdFxcdC5yZWZyZXNoID0gdGR4X21yX3JlZnJlc2gsXFxuIDEyMjpcXHRcXHQud3JpdGUgPSB0ZHhfbXJfZXh0ZW5kLFxcbiAxMjM6XFx0fTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRkeF9tcl9pbml0KHZvaWQpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpnO1xcbiAxMjg6XFx0XFx0aW50IHJjO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHR1OCAqYnVmIF9fZnJlZShrZnJlZSkgPSBremFsbG9jKFREWF9SRVBPUlRfTEVOLCBHRlBfS0VSTkVMKTtcXG4gMTMxOlxcdFxcdGlmICghYnVmKVxcbiAxMzI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdHRkeF9yZXBvcnRfYnVmID0gYnVmO1xcbiAxMzU6XFx0XFx0cmMgPSB0ZHhfbXJfcmVmcmVzaChcXHUwMDI2dGR4X21lYXN1cmVtZW50cyk7XFxuIDEzNjpcXHRcXHRpZiAocmMpXFxuIDEzNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdC8qXFxuIDE0MDpcXHRcXHQgKiBAbXJfdmFsdWUgd2FzIGluaXRpYWxpemVkIHdpdGggdGhlIG9mZnNldCBvbmx5LCB3aGlsZSB0aGUgYmFzZVxcbiAxNDE6XFx0XFx0ICogYWRkcmVzcyBpcyBiZWluZyBhZGRlZCBoZXJlLlxcbiAxNDI6XFx0XFx0ICovXFxuIDE0MzpcXHRcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGR4X21ycyk7ICsraSlcXG4gMTQ0OlxcdFxcdFxcdCoobG9uZyAqKVxcdTAwMjZ0ZHhfbXJzW2ldLm1yX3ZhbHVlICs9IChsb25nKWJ1ZjtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0ZyA9IHRzbV9tcl9jcmVhdGVfYXR0cmlidXRlX2dyb3VwKFxcdTAwMjZ0ZHhfbWVhc3VyZW1lbnRzKTtcXG4gMTQ3OlxcdFxcdGlmICghSVNfRVJSKGcpKVxcbiAxNDg6XFx0XFx0XFx0dGR4X3JlcG9ydF9idWYgPSBub19mcmVlX3B0cihidWYpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRyZXR1cm4gZztcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIHZvaWQgdGR4X21yX2RlaW5pdChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptcl9ncnApXFxuIDE1NDpcXHR7XFxuIDE1NTpcXHRcXHR0c21fbXJfZnJlZV9hdHRyaWJ1dGVfZ3JvdXAobXJfZ3JwKTtcXG4gMTU2OlxcdFxcdGtmcmVlKHRkeF9yZXBvcnRfYnVmKTtcXG4gMTU3OlxcdH1cXG4gMTU4OlxcdFxcbiAxNTk6XFx0LypcXG4gMTYwOlxcdCAqIEludGVsJ3MgU0dYIFFFIGltcGxlbWVudGF0aW9uIGdlbmVyYWxseSB1c2VzIFF1b3RlIHNpemUgbGVzc1xcbiAxNjE6XFx0ICogdGhhbiA4SyAoMksgUXVvdGUgZGF0YSArIH41SyBvZiBjZXJ0aWZpY2F0ZSBibG9iKS5cXG4gMTYyOlxcdCAqIERJQ0UtYmFzZWQgYXR0ZXN0YXRpb24gdXNlcyBsYXllcmVkIGV2aWRlbmNlIHRoYXQgcmVxdWlyZXNcXG4gMTYzOlxcdCAqIGxhcmdlciBRdW90ZSBzaXplICh+MTAwSykuXFxuIDE2NDpcXHQgKi9cXG4gMTY1OlxcdCNkZWZpbmUgR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkVcXHRTWl8xMjhLXFxuIDE2NjpcXHRcXG4gMTY3OlxcdCNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVJcXHRcXHQxXFxuIDE2ODpcXHRcXG4gMTY5OlxcdC8qIFREWCBHZXRRdW90ZSBzdGF0dXMgY29kZXMgKi9cXG4gMTcwOlxcdCNkZWZpbmUgR0VUX1FVT1RFX1NVQ0NFU1NcXHRcXHQwXFxuIDE3MTpcXHQjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcXHRcXHQweGZmZmZmZmZmZmZmZmZmZmZcXG4gMTcyOlxcdFxcbiAxNzM6XFx0I2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVxcdFxcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXFxuIDE3NDpcXHRcXG4gMTc1OlxcdC8qIHN0cnVjdCB0ZHhfcXVvdGVfYnVmOiBGb3JtYXQgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIuXFxuIDE3NjpcXHQgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cXG4gMTc3OlxcdCAqIEBzdGF0dXM6IFN0YXR1cyBjb2RlIG9mIFF1b3RlIHJlcXVlc3QsIGZpbGxlZCBieSBWTU0uXFxuIDE3ODpcXHQgKiBAaW5fbGVuOiBMZW5ndGggb2YgVERSRVBPUlQsIGZpbGxlZCBieSBURC5cXG4gMTc5OlxcdCAqIEBvdXRfbGVuOiBMZW5ndGggb2YgUXVvdGUgZGF0YSwgZmlsbGVkIGJ5IFZNTS5cXG4gMTgwOlxcdCAqIEBkYXRhOiBRdW90ZSBkYXRhIG9uIG91dHB1dCBvciBURFJFUE9SVCBvbiBpbnB1dC5cXG4gMTgxOlxcdCAqXFxuIDE4MjpcXHQgKiBNb3JlIGRldGFpbHMgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIgY2FuIGJlIGZvdW5kIGluIFREWFxcbiAxODM6XFx0ICogR3Vlc3QtSG9zdCBDb21tdW5pY2F0aW9uIEludGVyZmFjZSAoR0hDSSkgZm9yIEludGVsIFREWCAxLjAsXFxuIDE4NDpcXHQgKiBzZWN0aW9uIHRpdGxlZCBcXFwiVERHLlZQLlZNQ0FMTFxcdTAwM2NHZXRRdW90ZVxcdTAwM2VcXFwiXFxuIDE4NTpcXHQgKi9cXG4gMTg2OlxcdHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcXG4gMTg3OlxcdFxcdHU2NCB2ZXJzaW9uO1xcbiAxODg6XFx0XFx0dTY0IHN0YXR1cztcXG4gMTg5OlxcdFxcdHUzMiBpbl9sZW47XFxuIDE5MDpcXHRcXHR1MzIgb3V0X2xlbjtcXG4gMTkxOlxcdFxcdHU4IGRhdGFbXTtcXG4gMTkyOlxcdH07XFxuIDE5MzpcXHRcXG4gMTk0OlxcdC8qIFF1b3RlIGRhdGEgYnVmZmVyIGFuZCBsZW5ndGggKi9cXG4gMTk1OlxcdHN0YXRpYyB2b2lkICpxdW90ZV9kYXRhO1xcbiAxOTY6XFx0c3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0LyogTG9jayB0byBzdHJlYW1saW5lIHF1b3RlIHJlcXVlc3RzICovXFxuIDE5OTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xcbiAyMDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA3OjU2LjM0MDgyMDQ3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDA3MDI4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFREWCBHdWVzdCBDb2RlJ3MgUmVhY2hhYmlsaXR5IGluIEZ1enppbmcgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gYHRkeC1ndWVzdC5jYCwgc3BlY2lmaWNhbGx5IGhvdyBpdHMgZnVuY3Rpb25zIGFyZSBjb250aW5nZW50IG9uIGB0ZHhfZ3Vlc3RfaW5pdCgpYCBzdWNjZWVkaW5nLiBgdGR4X2d1ZXN0X2luaXQoKWAgY2hlY2tzIGZvciB0aGUgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgQ1BVIGZlYXR1cmUuIFRoaXMgZmVhdHVyZSBpcyBvbmx5IHNldCBpZiB0aGUga2VybmVsIGJvb3RzIHdpdGhpbiBhbiBJbnRlbCBURFggVHJ1c3QgRG9tYWluLCB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgYSBzcGVjaWZpYyBDUFVJRCBsZWFmIGNoZWNrIGZvciBcIkludGVsVERYICAgIFwiIGR1cmluZyBib290LCBhbmQgaW4gYHRkeF9lYXJseV9pbml0KClgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHBvaW50OiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgYmUgaXQgUUVNVSBvciBHQ0UgaW5zdGFuY2VzLCAqZG9uJ3QqIHN1cHBvcnQgb3IgZW11bGF0ZSBJbnRlbCBURFggaGFyZHdhcmUuIFRoaXMgbWVhbnMgdGhlIHJlcXVpcmVkIENQVUlEIGxlYWYgd29uJ3QgYmUgcHJlc2VudCwgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgd29uJ3QgYmUgc2V0LCBhbmQgYHRkeF9ndWVzdF9pbml0KClgIHdpbGwgZmFpbCwgcmV0dXJuaW5nIGAtRU5PREVWYC4gVGhhdCBtZWFucyB0aGUgbmV3IGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGZ1bmN0aW9uIGFuZCB0aGUgdXBkYXRlZCBxdW90ZSBidWZmZXIgYWxsb2NhdGlvbiBpbiBgdGR4LWd1ZXN0LmNgIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG5cbkJhc2VkIG9uIHRoZSBjcml0ZXJpYSBvdXRsaW5lZCBmb3IgZGV0ZXJtaW5pbmcgYFdvcnRoRnV6emluZ2AsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBvbiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiB0aGUgY29kZSBjbGVhcmx5IGZhbGxzIGludG8gdGhpcyBjYXRlZ29yeS4gVERYIHJlcXVpcmVzIHNwZWNpYWxpemVkIEludGVsIFhlb24gaGFyZHdhcmUgYW5kIFREWCBmaXJtd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQsIHdoaWNoIGFyZW4ndCBhdmFpbGFibGUgaW4gb3VyIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGlzIGZlYXR1cmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBObyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVjZXNzYXJ5IGFzIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudCBmb3IgcnVubmluZyB0aGlzIGNvZGUgcGF0aCBpcyBvdXRzaWRlIG9mIHRoZSByZWFsbSBvZiBwb3NzaWJpbGl0aWVzIGZvciBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIHNvbGlkOlxuKiAgIFdvcnRoRnV6emluZyA9IGZhbHNlXG4qICAgRm9jdXNTeW1ib2xzID0gXFxbIF1cbiogICBFbmFibGVDb25maWdzID0gXFxbIF1cbiogICBSZWFzb25pbmcgPSBjb25jaXNlIGV4cGxhbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY3NCwiT3V0cHV0VG9rZW5zIjoyMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDg6MDQuNzQ3ODUyODY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgYW5kIHVwZGF0ZXMgdGhlIFREWCBndWVzdCBkcml2ZXIgKGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYykgdG8gZHluYW1pY2FsbHkgc2l6ZSB0aGUgcXVvdGUgYnVmZmVyIGJhc2VkIG9uIFREWCBtZXRhZGF0YS4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBhcyBhbiBJbnRlbCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgbGFjayB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFREWC4gRHVyaW5nIGJvb3QsIHRkeF9lYXJseV9pbml0KCkgdmVyaWZpZXMgQ1BVSUQgbGVhZiAweDIxIGZvciB0aGUgVERYIHNpZ25hdHVyZSwgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzbyBYODZfRkVBVFVSRV9URFhfR1VFU1QgaXMgbmV2ZXIgc2V0LiBDb25zZXF1ZW50bHksIHRkeF9ndWVzdF9pbml0KCkgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aCAtRU5PREVWIGFuZCB0aGUgZHJpdmVyIG5ldmVyIHJlZ2lzdGVycyBvciBleGVjdXRlcy4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUgYW5kIGNhbm5vdCBydW4gaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSBhbmQgdXBkYXRlcyB0aGUgVERYIGd1ZXN0IGRyaXZlciAoZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jKSB0byBkeW5hbWljYWxseSBzaXplIHRoZSBxdW90ZSBidWZmZXIgYmFzZWQgb24gVERYIG1ldGFkYXRhLiBUaGlzIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBydW5uaW5nIGFzIGFuIEludGVsIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBsYWNrIHRoZSBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgc3VwcG9ydCByZXF1aXJlZCBmb3IgVERYLiBEdXJpbmcgYm9vdCwgdGR4X2Vhcmx5X2luaXQoKSB2ZXJpZmllcyBDUFVJRCBsZWFmIDB4MjEgZm9yIHRoZSBURFggc2lnbmF0dXJlLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNvIFg4Nl9GRUFUVVJFX1REWF9HVUVTVCBpcyBuZXZlciBzZXQuIENvbnNlcXVlbnRseSwgdGR4X2d1ZXN0X2luaXQoKSBpbW1lZGlhdGVseSBmYWlscyB3aXRoIC1FTk9ERVYgYW5kIHRoZSBkcml2ZXIgbmV2ZXIgcmVnaXN0ZXJzIG9yIGV4ZWN1dGVzLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSBhbmQgY2Fubm90IHJ1biBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA4OjA0Ljc0Nzg4NDk0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9nqzl[1] Phase: Running StartedAt: 2026-09-15 11:08:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9nqzl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 11:08:16 +0000 UTC FinishedAt: 2026-09-15 11:08:26 +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,}