Name: series-workflowglcd8 Phase: Failed StartedAt: 2026-07-29 23:16:01 +0000 UTC FinishedAt: 2026-07-29 23:53:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglcd8[0] Phase: Succeeded StartedAt: 2026-07-29 23:16:01 +0000 UTC FinishedAt: 2026-07-29 23:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglcd8[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 23:16:01 +0000 UTC FinishedAt: 2026-07-29 23:52:50 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNThiN2FiYmRhMzY1NGU1NDhkNmI3NzE3YmE0YTVlZjVkM2VhNzEwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDIzOjUxOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uYjBhMDM4ZmFhOTNhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMSwyNiAmIzQzOzE4MjEsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiBcdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XG4tXG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRha2luZyB0aGUga3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlXG4mIzQzO1x0XHQgKiBob2xkaW5nIHRoZSB1cGRhdGUgbG9ja3MgKGJlbG93KSBjb3VsZCByZXN1bHQgaW4gYVxuJiM0MztcdFx0ICogZGVhZGxvY2sgY29uZGl0aW9uLCBzbyBsZXQmIzM5O3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZVxuJiM0MztcdFx0ICogY2hlY2sgYW5kIHVwZGF0ZSB0aGUgcHFhcF9ob29rLlxuJiM0MztcdFx0ICovXG4gXHRcdGRvd25fd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4mIzQzO1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuJiM0MztcdFx0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbiBcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdFx0aWYgKG0gIT0gbWF0cml4X21kZXYgXHUwMDI2XHUwMDI2IG0tXHUwMDNla3ZtID09IGt2bSkge1xuLVx0XHRcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuLVxuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNThiN2FiYmRhMzY1NGU1NDhkNmI3NzE3YmE0YTVlZjVkM2VhNzEwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDIzOjUxOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLmIwYTAzOGZhYTkzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTE4MjEsMjYgJiM0MzsxODIxLDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp2ZmlvX2FwX21kZXZfYXR0cl9ncm91cHNbXSA9IHsKIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJCQlzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0Jc3RydWN0IGFwX21hdHJpeF9tZGV2ICptOwotCiAJaWYgKGt2bS0mZ3Q7YXJjaC5jcnlwdG8uY3J5Y2JkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGFraW5nIHRoZSBrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlCiYjNDM7CQkgKiBob2xkaW5nIHRoZSB1cGRhdGUgbG9ja3MgKGJlbG93KSBjb3VsZCByZXN1bHQgaW4gYQomIzQzOwkJICogZGVhZGxvY2sgY29uZGl0aW9uLCBzbyBsZXQmIzM5O3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZQomIzQzOwkJICogY2hlY2sgYW5kIHVwZGF0ZSB0aGUgcHFhcF9ob29rLgomIzQzOwkJICovCiAJCWRvd25fd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiYjNDM7CQlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2spIHsKJiM0MzsJCQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKJiM0MzsJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwkJfQogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9ICZhbXA7bWF0cml4X21kZXYtJmd0O3BxYXBfaG9vazsKIAkJdXBfd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiAKIAkJZ2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewotCQkJaWYgKG0gIT0gbWF0cml4X21kZXYgJmFtcDsmYW1wOyBtLSZndDtrdm0gPT0ga3ZtKSB7Ci0JCQkJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCX0KLQogCQlrdm1fZ2V0X2t2bShrdm0pOwogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0ga3ZtOwogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwotCiAJCXJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcnlwdG8gRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgd2l0aGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiAgSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQmIzM5O3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRvIHMzOTAsIHNwZWNpZmljYWxseSBmb3IgdGhlIFZGSU8gQVAgKGNyeXB0bykgbWRldi4gIE15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cD8gSSBrbm93IHMzOTB4IGNhbiBiZSBlbXVsYXRlZCwgYnV0IGRvZXMgUUVNVSBoYXZlIHRoZSBmdWxsIFZGSU8gQVAgc3Rvcnk/CgpSaWdodCwgVkZJTyBBUCB1c3VhbGx5IGRlcGVuZHMgb24gZWl0aGVyIGFjdHVhbCBwaHlzaWNhbCBBUCBoYXJkd2FyZSBvciBzb21lIHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiAgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgczM5MHggVkZJTyBBUCBpcyBhICpkcml2ZXIqIGZvciBBUCBtYXRyaXggZGV2aWNlcy4gIFNvLCB0aGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzOiBpcyB0aGlzIGV2ZW4gcmVtb3RlbHkgZnV6emFibGU/ICBHZW5lcmFsbHksIHRoZXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkcml2ZXJzIGFyZSBhIHBhaW4gdG8gZnV6eiB1bmxlc3Mgd2UmIzM5O3JlIGFjdHVhbGx5IG9uIHMzOTB4LgoKQnV0Li4uc3l6a2FsbGVyICpkb2VzKiBmdXp6IHMzOTB4LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gTm93LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IHNheXMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gQWgsIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBBUCBtYXRyaXggZGV2aWNlcz8KCkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgVkZJT19BUGAgY2FuIGJlIGVuYWJsZWQuIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGluIEtjb25maWcgZm9yIGBWRklPX0FQYC4gVGhhdCBzaG91bGQgbGVhZCBtZSB0byB0aGUgYW5zd2VyLCBhbmQgd2hldGhlciBvciBub3QgSSBzaG91bGQgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlZGSU9fQVAgS2NvbmZpZyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciB0aGUganVndWxhciDigJMgZmluZCBldmVyeSBpbnN0YW5jZSBvZiBgVkZJT19BUGAgYWNyb3NzIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkLCB3aGF0IGl0IGRlcGVuZHMgb24sIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gVGhpcyBtZWFucyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBLY29uZmlnIGVudHJpZXMgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWw7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBvcHRpb25zIEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yPyBUaGUgZ29hbHMgaGVyZSBhcmUgdG8gZmluZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgYWxzbyB0aGUgbG9jYXRpb24gaW4gdGhlIGNvZGUgYmFzZSBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIHNlYXJjaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWc9ODIzPWNvbmZpZyBWRklPX0NDV1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxuYXJjaC9zMzkwL0tjb25maWctODM1LVx0ZGVmX3RyaXN0YXRlIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBWRklPX0FQYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIHN1cHBvcnQgZWNvc3lzdGVtIGZvciBgVkZJT19BUGA/JiMzNDsuIEkga25vdyB0aGUgYmFzaWMgVkZJTyBpbmZyYXN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgdG8gcHJvcGVybHkgZ3Jhc3AgaXRzIGltcGxpY2F0aW9ucy4gVGhpcyBtZWFucyBJJiMzOTttIG5vdCBqdXN0IGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBtb2R1bGVzOyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1c2VyLXNwYWNlIGxpYnJhcmllcywgZmlybXdhcmUgaW50ZXJhY3Rpb25zLCBhbmQgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBpZiBhbnksIHRoYXQgY29tZSBhbG9uZyBmb3IgdGhlIHJpZGUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBXaGVyZSBkb2VzIGBWRklPX0FQYCBmaXQgaW4sIGZyb20gYSBob2xpc3RpYyBwZXJzcGVjdGl2ZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzA6XHRcbiA4MzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cbiA4MzM6XHRcbiA4MzQ6XHRjb25maWcgVkZJT19BUFxuIDgzNTpcdFx0ZGVmX3RyaXN0YXRlIG5cbiA4MzY6XHRcdHByb21wdCBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcJiMzNDtcbiA4Mzc6XHRcdGRlcGVuZHMgb24gS1ZNXG4gODM4Olx0XHRkZXBlbmRzIG9uIFZGSU9cbiA4Mzk6XHRcdGRlcGVuZHMgb24gQVBcbiA4NDA6XHRcdHNlbGVjdCBWRklPX01ERVZcbiA4NDE6XHRcdGhlbHBcbiA4NDI6XHRcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcbiA4NDM6XHRcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXG4gODQ0Olx0XG4gODQ1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA4NDY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cbiA4NDc6XHRcbiA4NDg6XHRlbmRtZW51XG4gODQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0JiMzOTtzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQmIzM5O3MgdW5wYWNrIHRoaXMuIFRoZSBjb3JlIG9mIHRoaXMgaXNzdWUgaGluZ2VzIG9uIHRoaXMgdmFyaWFibGUsIGBBUGAuIFRoZSBiZWhhdmlvciwgdGhlIG91dGNvbWUsIHRoZSAqd2hvbGUgZGFtbiB0aGluZyogaXMgY29udGluZ2VudCBvbiBpdHMgc3RhdGUuIFNvLCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGNsYXJpZnkgcHJlY2lzZWx5IHdoYXQgYEFQYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gV2hhdCBhcmUgaXRzIHBvdGVudGlhbCB2YWx1ZXM/IElzIGl0IGEgc2luZ2xlIHZhbHVlLCBhIHJhbmdlLCBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZT8gVW5kZXJzdGFuZGluZyBgQVBgIGlzIGFic29sdXRlbHkgcGFyYW1vdW50LiBObyBvdGhlciBhbmFseXNpcyBjYW4gcHJvY2VlZCB1bnRpbCBJIGhhdmUgYSBmaXJtIGdyYXNwIG9mIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHRoZSBkb21haW4gb2YgYEFQYCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gc3RhcnQgbXkgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdD0yODc9dG8gaW5pdHJkIGltYWdlLCB1c2VyIGNhbiBub3RpY2UgaXQgYmVmb3JlIGJvb3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0OjI5MDpCb290Y29uZmlnIEFQSXNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QtMjkxLT09PT09PT09PT09PT09PVxuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmU9Mjk9Y29uZmlnIE1BQ1xuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lOjQxOmNvbmZpZyBBUE9MTE9cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDItXHRib29sIFwmIzM0O0Fwb2xsbyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZz0yOTE9Y29uZmlnIDQ3NkZQRVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZzoyOTU6Y29uZmlnIEFQTTgyMXh4XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnLTI5Ni1cdGJvb2xcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03ODU9Y29uZmlnIEVBRE1fU0NIXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNzk1LVxuYXJjaC9zMzkwL0tjb25maWc6Nzk2OmNvbmZpZyBBUFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MDk6Y29uZmlnIEFQX0RFQlVHXG5hcmNoL3MzOTAvS2NvbmZpZy04MTAtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9ODg1PWNvbmZpZyBDTU1fSVVDVlxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTg5Mi1cbmFyY2gvczM5MC9LY29uZmlnOjg5Mzpjb25maWcgQVBQTERBVEFfQkFTRVxuYXJjaC9zMzkwL0tjb25maWctODk0LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cbmFyY2gvczM5MC9LY29uZmlnOjkwOTpjb25maWcgQVBQTERBVEFfTUVNXG5hcmNoL3MzOTAvS2NvbmZpZy05MTAtXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkyNS1cbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcbmFyY2gvczM5MC9LY29uZmlnLTkyNy1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTQwLVxuYXJjaC9zMzkwL0tjb25maWc6OTQxOmNvbmZpZyBBUFBMREFUQV9ORVRfU1VNXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNzQ0LVxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDYtXHR0cmlzdGF0ZSBcJiMzNDtBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cbmFyY2gveDg2L0tjb25maWctMjgwMC1cbmFyY2gveDg2L0tjb25maWc6MjgwMTpjb25maWcgQVBNX0lHTk9SRV9VU0VSX1NVU1BFTkRcbmFyY2gveDg2L0tjb25maWctMjgwMi1cdGJvb2wgXCYjMzQ7SWdub3JlIFVTRVIgU1VTUEVORFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjgwNy1cbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxuYXJjaC94ODYvS2NvbmZpZy0yODA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgUE0gYXQgYm9vdCB0aW1lXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxuYXJjaC94ODYvS2NvbmZpZzoyODI1OmNvbmZpZyBBUE1fQ1BVX0lETEVcbmFyY2gveDg2L0tjb25maWctMjgyNi1cdGRlcGVuZHMgb24gQ1BVX0lETEVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzYtXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzgtXHRib29sIFwmIzM0O0VuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjg0OS1cbmFyY2gveDg2L0tjb25maWc6Mjg1MDpjb25maWcgQVBNX0FMTE9XX0lOVFNcbmFyY2gveDg2L0tjb25maWctMjg1MS1cdGJvb2wgXCYjMzQ7QWxsb3cgaW50ZXJydXB0cyBkdXJpbmcgQVBNIEJJT1MgY2FsbHNcJiMzNDtcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZz0yMTM9Y29uZmlnIFhJTElOWF9IV0lDQVBcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyMjM6Y29uZmlnIEFQUExJQ09NXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjQtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsaWNvbSBpbnRlbGxpZ2VudCBmaWVsZGJ1cyBjYXJkIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc9MjkwPWNvbmZpZyBRQ09NX0NMS19SUE1IXG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZzoyOTk6Y29uZmlnIEFQUV9HQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgR2xvYmFsIENsb2NrIENvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzA3LVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjMwODpjb25maWcgQVBRX01NQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgTXVsdGltZWRpYSBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEvS2NvbmZpZz03OD1jb25maWcgQU1DQ19QUEM0NDBTUEVfQURNQVxuLS1cbmRyaXZlcnMvZG1hL0tjb25maWctODctXG5kcml2ZXJzL2RtYS9LY29uZmlnOjg4OmNvbmZpZyBBUFBMRV9BRE1BQ1xuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEFETUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnPTE1ND1jb25maWcgRUZJX0RFVl9QQVRIX1BBUlNFUlxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU2LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZzoxNTc6Y29uZmlnIEFQUExFX1BST1BFUlRJRVNcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtBcHBsZSBEZXZpY2UgUHJvcGVydGllc1wmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc9NjY9Y29uZmlnIEFMMzMyMEFcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTc1LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo3Njpjb25maWcgQVBEUzkxNjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTE2MCBjb21iaW5lZCBhbHMgYW5kIHByb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg2LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclwmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjk3OmNvbmZpZyBBUERTOTMwNlxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy05OC1cdHRyaXN0YXRlIFwmIzM0O0F2YWdvIEFQRFM5MzA2IEFtYmllbnQgTGlnaHQgU2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy0xMDgtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjEwOTpjb25maWcgQVBEUzk5NjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7QXZhZ28gQVBEUzk5NjAgZ2VzdHVyZS9SR0IvQUxTL3Byb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWc9Mjk2PWNvbmZpZyBTUEFQUl9UQ0VfSU9NTVVcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWctMzAzLVxuZHJpdmVycy9pb21tdS9LY29uZmlnOjMwNDpjb25maWcgQVBQTEVfREFSVFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIERBUlQgSU9NTVUgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnPTc4OD1jb25maWcgSVJRX0lEVDMyNDNYXG4tLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctNzkyLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc6NzkzOmNvbmZpZyBBUFBMRV9BSUNcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cdGJvb2wgXCYjMzQ7QXBwbGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFJQylcJiMzNDtcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0zMjc9Y29uZmlnIFNHSV9HUlVfREVCVUdcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL21pc2MvS2NvbmZpZzozMzQ6Y29uZmlnIEFQRFM5ODAyQUxTXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXHR0cmlzdGF0ZSBcJiMzNDtNZWRmaWVsZCBBdmFnbyBBUERTOTgwMiBBTFMgU2Vuc29yIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZz0xMDY9Y29uZmlnIE5FMktfUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxMjQ6Y29uZmlnIEFQTkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDtQQ01DSUEgTkUyMDAwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jPTMzMjA9c3RhdGljIGludCBydHc4OV9wY2lfY2ZnX2RhYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYzozMzMzOlx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jLTMzMzQtXHRyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSVFc4OV9QQ0lFX0wxX0NUUkwsIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjUzPWNvbmZpZyBNQVJWRUxMX0NOMTBLX1RBRF9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNTktXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjA6Y29uZmlnIEFQUExFX00xX0NQVV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cdGJvb2wgXCYjMzQ7QXBwbGUgTTEgQ1BVIFBNVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZz0xOTQ9Y29uZmlnIEFEVl9TV0JVVFRPTlxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA0LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZzoyMDU6Y29uZmlnIEFQUExFX0dNVVhcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgR211eCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc9Mz1pZiBBUkNIX0FQUExFIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc6NTpjb25maWcgQVBQTEVfUE1HUl9QV1JTVEFURVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O0FwcGxlIFNvQyBQTUdSIHBvd2VyIHN0YXRlIGNvbnRyb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTE4PWNvbmZpZyBQT1dFUl9TVVBQTFlfSFdNT05cbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZzozMTpjb25maWcgQVBNX1BPV0VSXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7QVBNIGVtdWxhdGlvbiBmb3IgY2xhc3MgYmF0dGVyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZz01PW1lbnUgXCYjMzQ7QXBwbGUgU29DIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNi1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6Nzpjb25maWcgQVBQTEVfTUFJTEJPWFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgU29DIG1haWxib3hlc1wmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMTgtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzozMTpjb25maWcgQVBQTEVfU0FSVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNBUlQgRE1BIGFkZHJlc3MgZmlsdGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy00MC1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6NDE6Y29uZmlnIEFQUExFX1RVTkFCTEVcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNTgtXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O0Zhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcJiMzNDtHcmFwaGljcyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cbmRyaXZlcnMvdmlkZW8vS2NvbmZpZzo4OmNvbmZpZyBBUEVSVFVSRV9IRUxQRVJTXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctOS1cdGJvb2xcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9MTExMT1jb25maWcgTVNDMzEzRV9XQVRDSERPR1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTIyLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMjM6Y29uZmlnIEFQUExFX1dBVENIRE9HXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNvQyB3YXRjaGRvZ1wmIzM0O1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz0xNjUyPXhmc19mc19maWxsX3N1cGVyKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY0LVx0ICogaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gY29tcGxldGVkIGJ5IGVpdGhlciB0aGUgb2xkIG1vdW50IEFQSSBvclxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XHQgKiB0aGUgbmV3ZXIgZnNvcGVuL2ZzY29uZmlnIEFQSS5cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY2LVx0ICovXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWc9MzEwPWNvbmZpZyBQTV9UUkFDRV9SVENcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zMjctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozMjg6Y29uZmlnIEFQTV9FTVVMQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cdHRyaXN0YXRlIFwmIzM0O0FkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBzMzkwIEtjb25maWcqKgoKT2theSwgaGVyZSB3ZSBnby4gVGhlIHByb21wdCBpbmRpY2F0ZXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzk2IG9mIGl0cyBgS2NvbmZpZ2AgZmlsZS4gVGhlIHRyaWdnZXIgaXMgYGFyY2gvczM5MC9LY29uZmlnOjc5Njpjb25maWcgQVBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG9wZW4gdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgem9vbSByaWdodCBpbiBvbiB0aGF0IGxpbmUuIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgbmFtZWQgYEFQYCwgYW5kIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoYXRldmVyIHRoaXMgY29udGV4dCByZXF1aXJlcy4gSSBuZWVkIHRvIHNlZSB3aGF0IGBBUGAgaXMgZGVmaW5lZCBhcywgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGhlbHAgdGV4dCBzYXlzLiBUaGF0JiMzOTtsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBvciB0cm91Ymxlc2hvb3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgRUFETSBzdWJjaGFubmVscy4gRUFETSBzdWJjaGFubmVscyBhY3RcbiA3OTE6XHRcdCAgYXMgYSBjb21tdW5pY2F0aW9uIHZlaGljbGUgZm9yIFNDTSBpbmNyZW1lbnRzLlxuIDc5MjpcdFxuIDc5MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3OTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxuIDc5NTpcdFxuIDc5NjpcdGNvbmZpZyBBUFxuIDc5NzpcdFx0ZGVmX3RyaXN0YXRlIHlcbiA3OTg6XHRcdHByb21wdCBcJiMzNDtTdXBwb3J0IGZvciBBZGp1bmN0IFByb2Nlc3NvcnMgKGFwKVwmIzM0O1xuIDc5OTpcdFx0aGVscFxuIDgwMDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxuIDgwMTpcdFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxuIDgwMjpcdFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cbiA4MDM6XHRcbiA4MDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODA1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhcC5cbiA4MDY6XHRcbiA4MDc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSAoZGVmYXVsdCkuXG4gODA4Olx0XG4gODA5Olx0Y29uZmlnIEFQX0RFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBBZGp1bmN0IFByb2Nlc3NvciBFbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gJiMzNDtBUCwmIzM0OyB3aGljaCBJIGtub3cgc3RhbmRzIGZvciAmIzM0O1N1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycywmIzM0OyByZWZlcnJpbmcgc3BlY2lmaWNhbGx5IHRvIHRob3NlIENyeXB0b0V4cHJlc3MgQ2FyZHMgKENFWCkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGNhbiBJIGVtdWxhdGUgdGhpcyBlbnZpcm9ubWVudCB3aXRoaW4gUUVNVT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIGEgYHZmaW8tYXBgIGRldmljZSB3aXRoaW4gUUVNVSwgYnV0IEkga25vdyB0aGF0IHJlcXVpcmVzIFZGSU8gb24gdGhlIGhvc3QgaGFyZHdhcmUuIFRoYXQmIzM5O3MgYSBodXJkbGUuCgpOb3csIEkgd29uZGVyLCBkb2VzIHN5emthbGxlciBwcm92aWRlIGEgdGVzdGluZyBhdmVudWUgZm9yIHRoaXM/IEl0IHJ1bnMgb24gczM5MHgsIGFuZCBkb2VzIGl0IHVzZSBwaHlzaWNhbCBBUCBkZXZpY2VzPyBOb3JtYWxseSBzeXprYWxsZXIgaW5zdGFuY2VzIHJ1biBvbiBHQ0Ugb3IgUUVNVS4gQnV0IEdDRSBkb2VzbiYjMzk7dCBoYXZlIHMzOTB4LiBTbyBpdCYjMzk7cyBwcm9iYWJseSBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCBBUCBkZXZpY2VzPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBkaWdnaW5nLgoKUGVyaGFwcyB0aGVyZSYjMzk7cyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQVAgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIElzIHRoZXJlIHNvbWUga2luZCBvZiAmIzM0O2Zha2UmIzM0OyBBUCBkZXZpY2UgZHJpdmVyPyBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG8vYCBkaXJlY3RvcnkgYW5kIHNlZSBpZiBhbnl0aGluZyBsaWtlIGBhcF9kZXZpY2VgIG9yIGBhcF9tYXRyaXhfbWRldmAgc2hvd3MgdXAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YXBfYnVzLmMmIzM0OywKICAgICYjMzQ7YXBfYnVzLmgmIzM0OywKICAgICYjMzQ7YXBfY2FyZC5jJiMzNDssCiAgICAmIzM0O2FwX2RlYnVnLmgmIzM0OywKICAgICYjMzQ7YXBfcXVldWUuYyYjMzQ7LAogICAgJiMzNDtwa2V5X2FwaS5jJiMzNDssCiAgICAmIzM0O3BrZXlfYmFzZS5jJiMzNDssCiAgICAmIzM0O3BrZXlfYmFzZS5oJiMzNDssCiAgICAmIzM0O3BrZXlfY2NhLmMmIzM0OywKICAgICYjMzQ7cGtleV9lcDExLmMmIzM0OywKICAgICYjMzQ7cGtleV9wY2ttby5jJiMzNDssCiAgICAmIzM0O3BrZXlfc3lzZnMuYyYjMzQ7LAogICAgJiMzNDtwa2V5X3V2LmMmIzM0OywKICAgICYjMzQ7dmZpb19hcF9kZWJ1Zy5oJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfZHJ2LmMmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vcHMuYyYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX3ByaXZhdGUuaCYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfYXBpLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2FwaS5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9jYXJkLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2NjYV9rZXkuaCYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfY2NhbWlzYy5jJiMzNDssCiAgICAmIzM0O3pjcnlwdF9jY2FtaXNjLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJhLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJhLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJjLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJjLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDQuYyYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfY2V4NC5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9kZWJ1Zy5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9lcDExbWlzYy5jJiMzNDssCiAgICAmIzM0O3pjcnlwdF9lcDExbWlzYy5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9lcnJvci5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9tc2d0eXBlNTAuYyYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfbXNndHlwZTUwLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X21zZ3R5cGU2LmMmIzM0OywKICAgICYjMzQ7emNyeXB0X21zZ3R5cGU2LmgmIzM0OywKICAgICYjMzQ7emNyeXB0X3F1ZXVlLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIHZmaW9fYXBfbWRldl9zZXRfa3ZtIENhbGwqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIHNlZSBwcmVjaXNlbHkgKmhvdyogdGhhdCBmdW5jdGlvbiBnZXRzIGludm9rZWQuIFNvLCB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBpcyBgdmZpb19hcF9kcnYuY2AuIFRoYXQgZmlsZSBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGRyaXZlci1sZXZlbCBjb2RlIGZvciB0aGUgVkZJTy1BUCAoQWNjZWxlcmF0ZWQgUHJvY2Vzc2luZykgZGV2aWNlIHJlc2lkZXMsIGFuZCB0aHVzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNhbGwuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzZXR1cCBmb3IgS1ZNIGludGVncmF0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhpcyBBUCBkZXZpY2UuIEV4YW1pbmluZyB0aGF0IGZpbGUgc2hvdWxkIHJldmVhbCB0aGUgY2FsbGluZyBjb250ZXh0LCBpbnB1dCBhcmd1bWVudHMsIGFuZCBpZGVhbGx5LCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoZW4gYW5kIHdoeSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNvbnNpZGVyZWQgbmVjZXNzYXJ5LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlbGluZSBuZWVkZWQgdG8gYW5hbHl6ZSBhbnkgZnVydGhlciByZWxhdGVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9zZXRfa3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE4MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODExLS8qKlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4MTI6ICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgxMy0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODIwLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4MjE6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjItXHRcdFx0XHRzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNTI9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDU5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNjA6XHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXHUwMDNla3ZtKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGB2ZmlvX2FwYCBNZWRpYXRlZCBEZXZpY2UgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNhbGwgb3JpZ2luYXRpbmcgZnJvbSBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGV2ZW4gcmVsZXZhbnQgd2l0aG91dCBhY3R1YWwgQVAgKEFwcGxpY2F0aW9uIFByb2Nlc3NvcikgaGFyZHdhcmUgcHJlc2VudC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZmlyc3QgcXVlc3Rpb24gdG8gYW5zd2VyLiBHaXZlbiB0aGF0IHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBWRklPIEFQLCB3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIG9mIGhvdyB0aGVzZSBtZWRpYXRlZCBkZXZpY2VzIGFyZSBzZXQgdXAuIEkmIzM5O2xsIGRpdmUgaW50byBgdmZpb19hcF9kcnYuY2Agbm93LiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgbWRldiAobWVkaWF0ZWQgZGV2aWNlKSBpcyBjcmVhdGVkIGFuZCB3aGF0IHRoZSBjcmVhdGlvbiBwcm9jZXNzIGVudGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NTk6XHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NjA6XHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MTpcdC5pbl91c2UgPSB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYyLVx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxMTI6XHRtdXRleF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTEzOlx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExNC1cdG11dGV4X2luaXQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4OTpcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE5MC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MjAwPXN0YXRpYyB2b2lkIF9fZXhpdCB2ZmlvX2FwX2V4aXQodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDEte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjIwMjpcdHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjAzLVx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgbWRldiBEcml2ZXIgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBNdWx0aS1kZXZpY2UgKG1kZXYpIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVkZJTyAoVmlydHVhbCBGdW5jdGlvbiBJL08pIEFkdmFuY2VkIFBsYXRmb3JtIChBUCkgY29udGV4dC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGhvb2tzIGludG8gdGhlIHN5c3RlbS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvY2F0aW9uIGFuZCB3aGF0JiMzOTtzIGluY2x1ZGVkLiBJ4oCZbGwgY2hlY2sgd2hlcmUgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgaXMgZGVmaW5lZDsgaXQgc2hvdWxkIGJlIGluc2lkZSBgdmZpb19hcF9vcHMuY2AuIFRoYXTigJlzIHdoZXJlIHRoZSBjb3JlIG9wZXJhdGlvbnMgZm9yIHRoZSBWRklPLUFQIGltcGxlbWVudGF0aW9uIHR5cGljYWxseSByZXNpZGUsIHNvIHRoaXMgY29uZmlybXMgdGhhdCYjMzk7cyB0aGUgcGxhY2UgdG8gbG9vayBmb3IgZGV0YWlscyBhYm91dCB0aGUgbWRldiByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEFQIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzczPXN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19hcF9tYXRyaXhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzg1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzODY6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJIGtub3cgdGhlIFZGcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoaXMgd29ya3MsIHNvIEkmIzM5O20gZ29pbmcgdG8ga2VlcCB0aGF0IGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgbWluZC4KCioqVW5kZXJzdGFuZGluZyB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIqKgoKUmlnaHQsIHNvIHRoaXMgbG9va3MgbGlrZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJpbmcgYSBtZWRpYXRlZCBkZXZpY2Ugd2l0aCB0aGUgQVAgKEFwcGxpY2F0aW9uIFByb2Nlc3NvcikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBnZXRzIGFjcXVhaW50ZWQgd2l0aCB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUuIEl0JiMzOTtzIHRoZSBvbmJvYXJkaW5nIHByb2Nlc3MsIGlmIHlvdSB3aWxsLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQgaGVyZSDigJMgcHJlc3VtYWJseSwgc3RydWN0dXJlcyBob2xkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UmIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgcGh5c2ljYWwgYmFja2luZywgYW5kIHRoZSBWRklPIGNvbnRleHQgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB0aGUgbWVkaWF0ZWQgZGV2aWNlIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gdGllcyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBkZXZpY2UgcGFzc3Rocm91Z2guIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQ/IFN5bmNocm9uaXphdGlvbiBpcyBhbHdheXMgaW1wb3J0YW50IGluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhcyB3ZWxsOyB3aGF0IGhhcHBlbnMgd2hlbiByZWdpc3RyYXRpb24gZmFpbHMsIGFuZCBob3cgZG9lcyB0aGUgc3lzdGVtIHJlY292ZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSBhbnkgbmVjZXNzYXJ5IHNldHVwIGZvciBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBpcyBpbml0aWFsaXplZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB0aWVzIGludG8gdGhlIGV4aXN0aW5nIFZGSU8gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM4MDpcdFx0XHQuZGV2X2dyb3VwcyA9IHZmaW9fYXBfbWRldl9hdHRyX2dyb3VwcyxcbjIzODE6XHRcdH0sXG4yMzgyOlx0XHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmUsXG4yMzgzOlx0XHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcbjIzODQ6XHR9O1xuMjM4NTpcdFxuMjM4NjpcdGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcbjIzODc6XHR7XG4yMzg4Olx0XHRpbnQgcmV0O1xuMjM4OTpcdFxuMjM5MDpcdFx0cmV0ID0gbWRldl9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyKTtcbjIzOTE6XHRcdGlmIChyZXQpXG4yMzkyOlx0XHRcdHJldHVybiByZXQ7XG4yMzkzOlx0XG4yMzk0Olx0XHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZS5zeXNmc19uYW1lID0gVkZJT19BUF9NREVWX1RZUEVfSFdWSVJUO1xuMjM5NTpcdFx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGUucHJldHR5X25hbWUgPSBWRklPX0FQX01ERVZfTkFNRV9IV1ZJUlQ7XG4yMzk2Olx0XHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZXMgPSBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZTtcbjIzOTc6XHRcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlcGFyZW50LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSxcbjIzOTg6XHRcdFx0XHRcdCAgIFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcixcbjIzOTk6XHRcdFx0XHRcdCAgIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlcywgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjQ3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBNYXRyaXggRGV2aWNlIENvbnRleHQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBpbmRpY2F0aW5nIGFuIG1kZXYgcGFyZW50IGFzc29jaWF0aW9uIG9uIGBtYXRyaXhfZGV2LSZndDtkZXZpY2VgLiBUaGF0JiMzOTtzIHRoZSBrZXkgbGluZSwgY2xlYXJseSBsaW5raW5nIHRoZSBtYXRyaXggZGV2aWNlIHN0cnVjdHVyZSB0byBhIHBhcmVudCBtZGV2IGNvbnRleHQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhpcyBgbWF0cml4X2RldmAgc3RydWN0dXJlICphY3R1YWxseSogaW5zdGFudGlhdGVkPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBpdHMgY3JlYXRpb24gcG9pbnQuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIHBvcHVsYXRlZCwgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyZWQgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRldmljZSBsaWZlY3ljbGUgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLiBUaGlzIGxvb2tzIGxpa2UgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSBzeXN0ZW0sIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIGRlZXBlciBhbmQgZmluZCBpdCYjMzk7cyBvcmlnaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hdHJpeF9kZXYgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9Njc9c3RhdGljIHZvaWQgdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy03MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo3MTpcdG1hdHJpeF9kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X2RldiwgZGV2aWNlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy03Mi1cdGtmcmVlKG1hdHJpeF9kZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6OTk6XHRtYXRyaXhfZGV2ID0ga3phbGxvY19vYmooKm1hdHJpeF9kZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEwMC1cdGlmICghbWF0cml4X2Rldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE1NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24g4oCTIGl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFZGSU8gaGFuZGxlcyB0aGUgY29tcGxleCB0b3BvbG9neSBvZiBhdHRhY2hlZCBkZXZpY2VzIGFuZCBhY2Nlc3MgcG9pbnRzLiBJIG5lZWQgdG8ga2VlcCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgZGV2aWNlIGluIG1pbmQgd2hpbGUgZ29pbmcgdGhyb3VnaCBpdC4KCioqTXkgQXBwcm9hY2ggdG8gYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgKioKClJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duIHN0ZXAtYnktc3RlcC4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSB0aGUgYHZmaW9fYXBfbWF0cml4X2RldmljZWAgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhY2Nlc3MgcG9pbnQgKEFQKSBhbmQgYXR0YWNoZWQgZGV2aWNlIHJlbGF0aW9uc2hpcHMgYXJlIGVzdGFibGlzaGVkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZSwgYW5kIHRoZSBjaGVja3MgaXQgcGVyZm9ybXMuIFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZhcmlvdXMgZmllbGRzIGhlcmUgaXMgcGFyYW1vdW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBWRklPIEFQSSBlbmZvcmNlcyB0aG9zZSBmdW5kYW1lbnRhbCBkZXZpY2UgcmVsYXRpb25zaGlwcywgaG93IGl0IGlzIHN0b3JlZCwgYW5kIGFueSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGl0IG1pZ2h0IGJlIGd1YXJkaW5nIGFnYWluc3QsIHN1Y2ggYXMgb3ZlcmxhcHBpbmcgcmVzb3VyY2VzIG9yIGNvbmZsaWN0aW5nIGFjY2VzcyBtYXBwaW5ncy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJ4oCZbGwgYWxzbyBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEFueSBjbGV2ZXIgYml0LW1hbmlwdWxhdGlvbiwgaGFzaCBmdW5jdGlvbiB1c2FnZSBvciBvdGhlciBlZmZpY2llbnQgbG9va3VwcyB0aGUgY29kZSBlbXBsb3lzIHdpbGwgc3RhbmQgb3V0IHRvIG1lLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBkZXZpY2UgbWF0cml4IGlzIGNvbnN0cnVjdGVkIGFuZCBtYWludGFpbmVkIGZyb20gdGhlIG1vbWVudCB0aGUgVkZJTyBjb3JlIGlzIHRvbGQgdG8gY3JlYXRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODY6XHRzdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbiAgODc6XHR7XG4gIDg4Olx0XHRpbnQgcmV0O1xuICA4OTpcdFx0c3RydWN0IGRldmljZSAqcm9vdF9kZXZpY2U7XG4gIDkwOlx0XG4gIDkxOlx0XHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcbiAgOTI6XHRcdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxuICA5MzpcdFx0XHRyZXR1cm4gUFRSX0VSUihyb290X2RldmljZSk7XG4gIDk0Olx0XG4gIDk1Olx0XHRyZXQgPSBidXNfcmVnaXN0ZXIoXHUwMDI2bWF0cml4X2J1cyk7XG4gIDk2Olx0XHRpZiAocmV0KVxuICA5NzpcdFx0XHRnb3RvIGJ1c19yZWdpc3Rlcl9lcnI7XG4gIDk4Olx0XG4gIDk5Olx0XHRtYXRyaXhfZGV2ID0ga3phbGxvY19vYmooKm1hdHJpeF9kZXYpO1xuIDEwMDpcdFx0aWYgKCFtYXRyaXhfZGV2KSB7XG4gMTAxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTAyOlx0XHRcdGdvdG8gbWF0cml4X2FsbG9jX2VycjtcbiAxMDM6XHRcdH1cbiAxMDQ6XHRcbiAxMDU6XHRcdC8qIEZpbGwgaW4gY29uZmlnIGluZm8gdmlhIFBRQVAoUUNJKSwgaWYgYXZhaWxhYmxlICovXG4gMTA2Olx0XHRpZiAodGVzdF9mYWNpbGl0eSgxMikpIHtcbiAxMDc6XHRcdFx0cmV0ID0gYXBfcWNpKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlaW5mbyk7XG4gMTA4Olx0XHRcdGlmIChyZXQpXG4gMTA5Olx0XHRcdFx0Z290byBtYXRyaXhfYWxsb2NfZXJyO1xuIDExMDpcdFx0fVxuIDExMTpcdFxuIDExMjpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIDExMzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuIDExNDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiAxMTU6XHRcbiAxMTY6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7JXNcJiMzNDssIFZGSU9fQVBfREVWX05BTUUpO1xuIDExNzpcdFx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XG4gMTE4Olx0XHRtYXRyaXhfZGV2LVx1MDAzZWRldmljZS5idXMgPSBcdTAwMjZtYXRyaXhfYnVzO1xuIDExOTpcdFx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucmVsZWFzZSA9IHZmaW9fYXBfbWF0cml4X2Rldl9yZWxlYXNlO1xuIDEyMDpcdFx0bWF0cml4X2Rldi1cdTAwM2V2ZmlvX2FwX2RydiA9IFx1MDAyNnZmaW9fYXBfZHJ2O1xuIDEyMTpcdFxuIDEyMjpcdFx0cmV0ID0gZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlKTtcbiAxMjM6XHRcdGlmIChyZXQpXG4gMTI0Olx0XHRcdGdvdG8gbWF0cml4X3JlZ19lcnI7XG4gMTI1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk15IFVuZGVyc3RhbmRpbmcgb2YgdGhlIE1hdHJpeCBEZXZpY2UgYW5kIFZGSU8tQVAgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIGBtYXRyaXhfZGV2YCBpcyBlc3RhYmxpc2hlZCBhcyB0aGUgZnVuZGFtZW50YWwgcm9vdCBkZXZpY2UuIEFuZCBpdCYjMzk7cyBzZXQgdXAgdG8gbWFuYWdlIHRoZSBtZGV2cy4gQ29vbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7dmUgZ290IGEgZnJhbWV3b3JrIGhlcmUuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHJlZ2lzdGVyIGFuIG1kZXYgcGFyZW50IG9uIGl0LCB3aGljaCBtZWFucyB3ZSYjMzk7bGwgYmUgYWJsZSB0byBjcmVhdGUgb3VyIG1kZXZzIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCYjMzk7cyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gRWFzaWVyIHRvIG1hbmFnZSwgc2NyaXB0LCBhbmQgdW5kZXJzdGFuZC4gSSBsaWtlIHRoYXQuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoaXMuIFRoYXQgYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgZ2V0dGluZyBjYWxsZWQgZHVyaW5nIGB2ZmlvX2FwX2luaXRgLiBPa2F5LCBzbyB0aGUgbWF0cml4IGRldmljZSBpcyBjcmVhdGVkIGFzIHBhcnQgb2YgdGhlIFZGSU8tQVAgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoYXQgY2xhcmlmaWVzIHRoZSB0aW1lbGluZS4gSXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gZ2V0dGluZyB0aGUgd2hvbGUgVkZJTy1BUCBzeXN0ZW0gcnVubmluZy4gR290IGl0LiBOb3cgSSBjYW4gc2VlIHRoZSBmbG93IGZyb20gc3RhcnR1cCB0byBhdmFpbGFiaWxpdHkgb2YgbWRldnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjc6XHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbiAxNjg6XHR7XG4gMTY5Olx0XHRpbnQgcmV0O1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0ID0gdmZpb19hcF9kYmZfaW5mb19pbml0KCk7XG4gMTcyOlx0XHRpZiAocmV0KVxuIDE3MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG4gMTc2Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbiAxNzc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTc4Olx0XG4gMTc5Olx0XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG4gMTgwOlx0XHRpZiAocmV0KVxuIDE4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0ID0gYXBfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XG4gMTg0Olx0XHRpZiAocmV0KSB7XG4gMTg1Olx0XHRcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XG4gMTg2Olx0XHRcdHJldHVybiByZXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbiAxOTA6XHRcdGlmIChyZXQpIHtcbiAxOTE6XHRcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDE5MjpcdFx0XHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5NTpcdFx0fVxuIDE5NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkFQIEluc3RydWN0aW9uIEF2YWlsYWJpbGl0eSBDaGVjayoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGdvdHRhIG1ha2Ugc3VyZSB0aGUgaGFyZHdhcmUmIzM5O3MgZXZlbiBjYXBhYmxlIG9mIHdoYXQgd2UmIzM5O3JlIGFib3V0IHRvIGRvLiBJIHNlZSB0aGlzIGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YCBhbmQgbXkgYnJhaW4gaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIGNydWNpYWwgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgc2FmZXR5IGNoZWNrOyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZXhlY3V0ZSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyBpZiB0aGUgQ1BVIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlbS4gVGhhdCByZXR1cm4gdmFsdWUsIGAtRU5PREVWYCwgYWxzbyBpbmRpY2F0ZXMgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSDigJMgbm8gZGV2aWNlIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUsIGVzc2VudGlhbGx5LiBTbywgYmVmb3JlIGFueXRoaW5nIGVsc2UsIEkmIzM5O20gZGl2aW5nIGluIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGF0IGNoZWNrLCBwcmVjaXNlbHkgaG93IGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBmYWN0b3JzIGl0IGNvbnNpZGVycy4gSXMgaXQgcmVhZGluZyBhIENQVUlEIGJpdD8gU29tZSBvdGhlciBjb250cm9sIHJlZ2lzdGVyPyBXaGF0JiMzOTtzIHRoZSBkZXRlY3Rpb24gbG9naWM/IFRoaXMgaW5pdGlhbCBnYXRla2VlcGluZyBpcyAqZXNzZW50aWFsKiBmb3IgYSByb2J1c3QgYW5kIHBvcnRhYmxlIGltcGxlbWVudGF0aW9uLiBHb3R0YSBlbnN1cmUgd2UmIzM5O3JlIGdyYWNlZnVsbHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhvc2UgaW5zdHJ1Y3Rpb25zIGFyZW4mIzM5O3QgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaD03Mj11bmlvbiBhcF9xdWV1ZV9zdGF0dXNfcmVnIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04MC0vKipcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjgxOiAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Mi0gKlxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg0LSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODU6c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTEwNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9jcnlwdG8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUxLVx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRU5BQkxFX0FQSUU6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1MjpcdFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUzLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTgtXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1OTpcdFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTYwLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxMDA9c3RhdGljIGludCBrdm1fczM5MF92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTYtXHRcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMTU3Olx0XHRcdHJldCA9IGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSA/IDAgOiAtRU5YSU87XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1OC1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEwMT1zdGF0aWMgaW50IGt2bV9zMzkwX2FweGFfaW5zdGFsbGVkKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEwNTpcdGlmIChhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA2LVx0XHRpZiAoYXBfcWNpKFx1MDAyNmluZm8pID09IDApXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTkyPXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMC1cdC8qIFZlcmlmeSB0aGF0IHRoZSBBUCBpbnN0cnVjdGlvbiBhcmUgYXZhaWxhYmxlICovXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo2MDE6XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4MS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjU4MjpcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1ODMtXHRcdHByX3dhcm4oXCYjMzQ7VGhlIGhhcmR3YXJlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEFQIGluc3RydWN0aW9uc1xcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc1LVx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTc2Olx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc3LVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBTeXN0ZW0gQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGFjY2VzcyBwb2ludCBpbnN0cnVjdGlvbnMuICBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgLiAgVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIEFjY2VzcyBQb2ludCBpbnN0cnVjdGlvbnMgb24gdGhpcyBTLzM5MCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0LyoqXG4gIDgxOlx0ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbiAgODI6XHQgKlxuICA4MzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgODQ6XHQgKi9cbiAgODU6XHRzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuICA4NjpcdHtcbiAgODc6XHRcdHVuc2lnbmVkIGxvbmcgcmVnMCA9IEFQX01LUUlEKDAsIDApO1xuICA4ODpcdFx0dW5zaWduZWQgbG9uZyByZWcxID0gMDtcbiAgODk6XHRcbiAgOTA6XHRcdGFzbSB2b2xhdGlsZShcbiAgOTE6XHRcdFx0XCYjMzQ7XHRsZ3JcdDAsJVtyZWcwXVxcblwmIzM0O1x0XHQvKiBxaWQgaW50byBncjAgKi9cbiAgOTI6XHRcdFx0XCYjMzQ7XHRsZ2hpXHQxLDBcXG5cJiMzNDtcdFx0XHQvKiAwIGludG8gZ3IxICovXG4gIDkzOlx0XHRcdFwmIzM0O1x0bGdoaVx0MiwwXFxuXCYjMzQ7XHRcdFx0LyogMCBpbnRvIGdyMiAqL1xuICA5NDpcdFx0XHRcJiMzNDtcdC5pbnNuXHRycmUsMHhiMmFmMDAwMCwwLDBcXG5cJiMzNDtcdC8qIFBRQVAoVEFQUSkgKi9cbiAgOTU6XHRcdFx0XCYjMzQ7MDpcdGxhXHQlW3JlZzFdLDFcXG5cJiMzNDtcdFx0LyogMSBpbnRvIHJlZzEgKi9cbiAgOTY6XHRcdFx0XCYjMzQ7MTpcXG5cJiMzNDtcbiAgOTc6XHRcdFx0RVhfVEFCTEUoMGIsIDFiKVxuICA5ODpcdFx0XHQ6IFtyZWcxXSBcJiMzNDsmIzQzO1x1MDAyNmRcJiMzNDsgKHJlZzEpXG4gIDk5Olx0XHRcdDogW3JlZzBdIFwmIzM0O2RcJiMzNDsgKHJlZzApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODc4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEFQLVJlbGF0ZWQgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgUFFBUChUQVBRKWAgaW5zdHJ1Y3Rpb24uIFRoZSBjb2RlIGNoZWNrcyBmb3IgYSB0cmFwIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IGhhcHBlbnMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIEdDRSBvciBRRU1VPwoKRmlyc3QgdGhvdWdodCwgZG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBgUFFBUGA/IEkga25vdyBRRU1VIGhhcyBzb21lIHMzOTB4IEFQIGVtdWxhdGlvbiwgYnV0IGlzIGl0IG9uIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IHNvbWV0aGluZyB5b3UgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZT8gSSByZWNhbGwgdGhhdCBBUCBpbnN0cnVjdGlvbnMgdXN1YWxseSBuZWVkIHRoZSBob3N0IHRvIGVpdGhlciBoYXZlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gcGFzcyB0aHJvdWdoLCBvciBmb3IgUUVNVSBpdHNlbGYgdG8gZW11bGF0ZSB0aGVtLgoKQWxyaWdodCwgUUVNVSBoYXMgYGFwLWJyaWRnZWAgYW5kIGBhcC1tYXRyaXhgIGRldmljZXMsIGJ1dCB0aG9zZSBhcmUgZm9yICpwYXNzaW5nIHRocm91Z2gqIGhvc3QgQVAgZGV2aWNlcywgbm90IGVtdWxhdGluZyB0aGVtLiBTbywgZG9lcyBRRU1VIGRvIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBBUCBkZXZpY2VzPyBOb3BlLCBpdCYjMzk7cyBWRklPIGFsbCB0aGUgd2F5IOKAkyB1c2luZyBgdmZpby1hcGAgZm9yIHBhc3N0aHJvdWdoIG9ubHkuIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIHRvIGJlZ2luIHdpdGgsIHRoZW4gYHZmaW9fYXBfaW5pdGAgcmV0dXJucyBgLUVOT0RFVmAuIFRoYXQgbWVhbnMgdGhlIG1vZHVsZSBpc24mIzM5O3QgbG9hZGVkIGFuZCB0aGUgbWRldiBkcml2ZXIgaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIG1ha2luZyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgQVAgaGFyZHdhcmUuCgpMZXQgbWUgZG91YmxlLWNoZWNrOiBpZiBJIHJ1biBRRU1VIHdpdGggYC1jcHUgbWF4YCwgZG9lcyB0aGF0IHNldCB0aGUgQVAgZmFjaWxpdHk/IEFuZCBpcyB0aGVyZSBhbnkgS1ZNIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgQVA/IEkgcmVtZW1iZXIgS1ZNIGNhbiBpbnRlcmNlcHQgYFBRQVBgLCBidXQgcGFzc2VzIGl0IHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBXYWl0LCB0aGUgYHZmaW9fYXBgIGRyaXZlciBJUyB0aGUgZHJpdmVyIGZvciBoYW5kbGluZyBQUUFQIGZvciBndWVzdHMhIEJ1dCB0aGF0IHJ1bnMgb24gdGhlICpob3N0Ki4gSWYgdGhlIGhvc3QgaXMgYSBWTSAobGlrZSBRRU1VKSwgY2FuIGl0IGV2ZW4gKmhhdmUqIEFQIGluc3RydWN0aW9ucz8gSWYgdGhlIGhvc3QgaXMgYSBRRU1VIFZNLCBpdCBjYW4gb25seSBoYXZlIEFQIGluc3RydWN0aW9ucyBpZiB0aGUgTDAgaG9zdCBwYXNzZWQgdGhlbSB0aHJvdWdoLgoKTm93LCBzeXprYWxsZXIgaXMgdGhlIGNvbnRleHQgaGVyZSwgcmlnaHQ/IEl0IHJ1bnMgaW4gUUVNVSBvbiBHQ0UsIHdoaWNoIGlzIHVzdWFsbHkgeDg2XzY0IG9yIGFybTY0LCBidXQgbWF5YmUgczM5MHggb24gSUJNIENsb3VkLiBPa2F5LCBzbyBzeXprYWxsZXIgKmRvZXMqIHJ1biBzMzkweCBvbiBJQk0gQ2xvdWQgb3IgUUVNVS4gSWYgaXQmIzM5O3Mgb24gUUVNVSBvbiB4ODZfNjQgKFRDRyksIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBBUC4gSWYgaXQmIzM5O3MgS1ZNIG9uIHMzOTB4LCB0aGVuIG1heWJlLCAqbWF5YmUqIGlmIHRoZSBob3N0IGhhcyB0aGVtLgoKQnV0IHRoZSBwcm9tcHQgZW1waGFzaXplcyB0aGluZ3MgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBvciBjb2RlIHJlcXVpcmluZyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBOb3csIGlzIEFQIGEgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVT8gWWVzISBBZGp1bmN0IFByb2Nlc3NvcnMgKENyeXB0b0V4cHJlc3MgQ2FyZHMpIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBvbiBJQk0gWi4gVGhleSBhcmUgKm5vdCogc29mdHdhcmUtZW11bGF0ZWQgYnkgUUVNVS4gUUVNVSBvbmx5IGRvZXMgcGFzc3Rocm91Z2ggdmlhIFZGSU8uCgpUaGVyZWZvcmUsIHRoZSBgdmZpb19hcGAgZHJpdmVyIGNhbiYjMzk7dCBpbml0aWFsaXplIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IHJlYWwgcGh5c2ljYWwgQVAgY2FyZHMuIENvbmZpcm1pbmcgdGhpcywgaWYgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgcmV0dXJucyBmYWxzZSwgdGhlbiBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYC4gQ2FuIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHJldHVybiB0cnVlIGluIFFFTVUgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBub3QuIEVzcGVjaWFsbHkgaW4gUUVNVSBUQ0cgKHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBzMzkweCksIGl0IHdvdWxkICpuZXZlciogZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMuCgpBUCBpbnN0cnVjdGlvbnMgbGlrZSBQUUFQIGFyZSBzdXBlciBzcGVjaWZpYyB0byBJQk0gQ3J5cHRvRXhwcmVzcyBjYXJkcy4gVGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZSBjcnlwdG8gY2FyZHMgaW4gUUVNVS4gUUVNVSBvbmx5IHByb3ZpZGVzIHRoZSBgdmZpby1hcGAgZGV2aWNlLCByZXF1aXJpbmcgYSBob3N0IFZGSU8gZGV2aWNlLiBTbywgYHZmaW9fYXBfaW5pdGAgaXMgZ29pbmcgdG8gZmFpbC4gV2FpdCwgd2hhdCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBhbiBzMzkweCBMUEFSIG9yIEtWTSB3aXRoIEFQIGNhcmRzPyBCdXQgdGhlIHByb21wdCBzdGF0ZXMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgQVAgY2FyZHMgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIQoKU28gdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnksIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIHRoZXJlIHNvbWUgZmFrZSBBUCBkcml2ZXIsIGxpa2UgYSB0ZXN0aW5nIHV0aWxpdHk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmFrZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZXZpY2UgRGlzY292ZXJ5KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGVlcGVyIGFuYWx5c2lzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IGltbWVkaWF0ZSBpbmRpY2F0aW9uIG9mIGEgc29mdHdhcmUgQVAgZGV2aWNlIHByZXNlbnQuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCwgYSBxdWljayBzY2FuIHRvIGRldGVybWluZSB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGludmVzdCBpbiBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIG9yIGFuYWx5c2lzLiBJdCYjMzk7cyBhYm91dCBlZmZpY2llbmN5OyBpZGVudGlmeWluZyBhIHNvZnR3YXJlIEFQIGN1dHMgZG93biBzaWduaWZpY2FudGx5IG9uIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgdGhlIHByb2JsZW0gc3BhY2UsIHBhcnRpY3VsYXJseSBpZiBJIGtub3cgaG93IHRvIHNwb3QgdGhlIGNvbW1vbiBjaGFyYWN0ZXJpc3RpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdHdhcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdmZpb19hcCBQYXRjaCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGNhbiB3ZSBieXBhc3MgdGhpcyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAgY2hlY2s/IE5vcGUsIHRoYXQmIzM5O3MgaW5saW5lIGFzc2VtYmx5LCBleHBsaWNpdGx5IGxvb2tpbmcgZm9yIGEgdHJhcC4gU28sIHdpdGhvdXQgYWN0dWFsIEFQIGhhcmR3YXJlLCB0aGF0IGNvZGUgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIFdhaXQsIGFtIEkgdW5kZXJzdGFuZGluZyBgdmZpb19hcGAgY29ycmVjdGx5PyBJcyBpdCAqZm9yKiB0aGUgQVAgaGFyZHdhcmUgaXRzZWxmLCBvciBpcyBpdCB0byBtYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUgdG8gVk1zPyBBaCwgaXQmIzM5O3MgdGhlIGxhdHRlcjogaXQmIzM5O3MgYSBWRklPIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgZGVtYW5kcyByZWFsLCBwaHlzaWNhbCBBUCBoYXJkd2FyZSBvbiB0aGUgaG9zdC4gQW5kIHNpbmNlIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBDcnlwdG9FeHByZXNzIGNhcmRzIOKAkyBzeXprYWxsZXIgaW4gYSB0eXBpY2FsIHNldHVwIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRvdWNoIHRoaXMgY29kZS4KClJpZ2h0LCBiYWNrIHRvIHRoZSBwYXRjaC4gSXQmIzM5O3MgbW9kaWZ5aW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIEJhc2ljYWxseSwgYSBsb2NraW5nIG9yZGVyIGNoYW5nZSB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQmIzM5O3MgdGFraW5nIGBrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbWAgKmJlZm9yZSogaXQgbWVzc2VzIHdpdGggYHBxYXBfaG9va2AuIFNvdW5kcyBmaW5lLCBmdW5jdGlvbmFsbHksIGJ1dCBzdGlsbCB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBBUCBoYXJkd2FyZS4KCk5vdywgaXMgdGhlcmUgKmFueSogc2NlbmFyaW8gd2hlcmUgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBnZXRzIGNhbGxlZCB3aXRob3V0IHRoZSBBUCBoYXJkd2FyZSBiZWluZyBwcmVzZW50PyBCZXR0ZXIgY2hlY2sgYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X29wZW5fZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwMzQ9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1MjpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1My17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzYxLVx0LmluaXQgPSB2ZmlvX2FwX21kZXZfaW5pdF9kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM2MjpcdC5vcGVuX2RldmljZSA9IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzYzLVx0LmNsb3NlX2RldmljZSA9IHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqVmZpby1BUCBEZXZpY2UgT3BlcmF0aW9uczogQSBRdWljayBSdW4tVGhyb3VnaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGB2ZmlvX2FwX21hdHJpeF9kZXZfb3BzYCBpcyBkaXJlY3RseSB0aWVkIGludG8gdGhlIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGZ1bmN0aW9uLiBTbywgZXNzZW50aWFsbHksIHRoZSBgdmZpb19hcF9tYXRyaXhfZGV2X29wc2Agc3RydWN0dXJlIGxpa2VseSBkZWZpbmVzIHRoZSBvcGVyYXRpb25zIG9yIG1ldGhvZHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IHVzZWQgd2hlbiBwcm9iaW5nIG9yIGRpc2NvdmVyaW5nIGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSB3aXRoaW4gdGhlIFZGSU8tQVAgY29udGV4dC4KClRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UgbmVlZCBhIGRlZmluZWQgc2V0IG9mIGFjdGlvbnMgb3IgaGFuZGxlcnMg4oCTIHRoYXQgYF9kZXZfb3BzYCBzdHJ1Y3R1cmUg4oCTIHRvIG1hbmFnZSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQVAgZGV2aWNlIHdoZW4gaXQmIzM5O3MgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgZGlzY292ZXJlZC4gVGhlIGBfbWRldl9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvYmluZyBwcm9jZXNzLiBJdCB3b3VsZCBiZSBoaWdobHkgcHJvYmFibGUgdGhhdCBhIHByb2JlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZXNlIHN0cnVjdHVyZXMuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHRoZSBjb2RlIHRvIHNheSBtb3JlIGZvciBjZXJ0YWluLCBidXQgdGhpcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdHdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX21hdHJpeF9kZXZfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTM3PXN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9maW5kX3F1ZXVlKGludCBhcHFuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozODpzdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX2FwX21hdHJpeF9kZXZfb3BzO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM5LXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc5MD1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5NS1cdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFx1MDAyNm1kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5NjpcdFx0XHRcdFx0XHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk3LVx0aWYgKElTX0VSUihtYXRyaXhfbWRldikpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdmZpb19xdWV1ZV9hdHRyX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzU5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNjA6c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzYxLVx0LmluaXQgPSB2ZmlvX2FwX21kZXZfaW5pdF9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzQ5CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgdmZpb19hcF9tZGV2X3NldF9rdm1gIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSB3aGV0aGVyIHRoZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGZ1bmN0aW9uIGNhbiBldmVyIGFjdHVhbGx5IGJlIGNhbGxlZCwgcGFydGljdWxhcmx5IGluIGFuIGVudmlyb25tZW50IGxhY2tpbmcgcGh5c2ljYWwgQVAgaGFyZHdhcmUuCgpNeSB0cmFpbiBvZiB0aG91Z2h0IGdvZXMgbGlrZSB0aGlzOiBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyB0cmlnZ2VyZWQgZHVyaW5nIG1kZXYgY3JlYXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHRoZSBjcnVjaWFsIGxpbmsgc2VlbXMgdG8gYmUgdGhlIG1kZXYgcGFyZW50IHJlZ2lzdHJhdGlvbiwgd2hpY2ggaGFwcGVucyBpbiBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYC4gVGhpcyBmdW5jdGlvbiBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYHZmaW9fYXBfaW5pdGAsIHdoaWNoIHRoZW4gY2hlY2tzIGlmIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGUgcmVhbGx5IHRlbGxpbmcgcGFydCBpcyB0aGF0IGB2ZmlvX2FwX2luaXRgIGJhaWxzIG91dCB3aXRoIGAtRU5PREVWYCBpZiB0aG9zZSBBUCBpbnN0cnVjdGlvbnMgYXJlbiYjMzk7dCBhdmFpbGFibGUuIFRoYXQgbWVhbnMgdGhlIHBhcmVudCBkZXZpY2UgcmVnaXN0cmF0aW9uICpuZXZlciogaGFwcGVucyB3aXRob3V0IHRoZSByaWdodCBoYXJkd2FyZS4gQ29uc2VxdWVudGx5LCBubyBtZGV2IGNhbiBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIHBhcmVudCBpcyBuZXZlciByZWdpc3RlcmVkLCB0aGVyZWJ5IGJsb2NraW5nIHRoZSBlbnRpcmUgY2hhaW4uCgpOb3csIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjZSAqZXZlcnkqIHBvc3NpYmxlIGNhbGwgcGF0aCB0byBgdmZpb19hcF9tZGV2X3NldF9rdm1gLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGB2ZmlvX2FwX29wcy5jYCBmaWxlLiBJdHMgb25seSBjYWxsZXIgaXMgYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAuIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgIGlzIG9ubHkgY2FsbGVkIHRocm91Z2ggYHZmaW9fZGV2aWNlX29wc2AuIFRoYXQgaW4gdHVybiBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IGB2ZmlvX2FwX21kZXZfcHJvYmVgLiBUaGlzIHByb2JpbmcgaXMgcGFydCBvZiBgdmZpb19hcF9tYXRyaXhfZHJpdmVyYCwgd2hpY2ggaXMgYWxzbyByZWdpc3RlcmVkIGluIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgLCBhbmQgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgaXMgY2FsbGVkIGZyb20gYHZmaW9fYXBfaW5pdGAuIEFzIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCwgdGhlIHBhdGggdGhyb3VnaCBgdmZpb19hcF9pbml0YCBoaW5nZXMgb24gYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAuCgpHaXZlbiB0aGF0IHRob3JvdWdoIHRyYWNpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaXQgaXMgYWJzb2x1dGVseSB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIEFQIGhhcmR3YXJlLiBTcGVjaWZpY2FsbHksIHRoZSBDcnlwdG9FeHByZXNzIGNhcmRzIGFyZSByZXF1aXJlZCwgYW5kIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aG9zZS4gVGhlcmVmb3JlLCBJIHdpbGwgcmVzcG9uZCB3aXRoIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhlIGZ1bmN0aW9uIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB1bmRlciB0eXBpY2FsIHZpcnR1YWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHguIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIElCTSBDcnlwdG9FeHByZXNzIGNhcmRzIHRvIGJlIHByZXNlbnQgb24gdGhlIGhvc3QgKGNoZWNrZWQgdmlhIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uKS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjAyLjk5NDU0MjQwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDU5MjIyMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHguIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIElCTSBDcnlwdG9FeHByZXNzIGNhcmRzIHRvIGJlIHByZXNlbnQgb24gdGhlIGhvc3QgKGNoZWNrZWQgdmlhIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uKS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MDIuOTk0NTQ3NTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ1MTY5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OGI3YWJiZGEzNjU0ZTU0OGQ2Yjc3MTdiYTRhNWVmNWQzZWE3MTBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDIzOjUxOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmIwYTAzOGZhYTkzYWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuQEAgLTE4MjEsMjYgKzE4MjEsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbi1cXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XFxuLVxcbiBcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGFraW5nIHRoZSBrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlXFxuK1xcdFxcdCAqIGhvbGRpbmcgdGhlIHVwZGF0ZSBsb2NrcyAoYmVsb3cpIGNvdWxkIHJlc3VsdCBpbiBhXFxuK1xcdFxcdCAqIGRlYWRsb2NrIGNvbmRpdGlvbiwgc28gbGV0J3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZVxcbitcXHRcXHQgKiBjaGVjayBhbmQgdXBkYXRlIHRoZSBwcWFwX2hvb2suXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xcbitcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHR9XFxuIFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VwcWFwX2hvb2s7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuIFxcbiBcXHRcXHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRcXHRpZiAobSAhPSBtYXRyaXhfbWRldiBcXHUwMDI2XFx1MDAyNiBtLVxcdTAwM2Vrdm0gPT0ga3ZtKSB7XFxuLVxcdFxcdFxcdFxcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRrdm1fZ2V0X2t2bShrdm0pO1xcbiBcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbi1cXG4gXFx0XFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTowMy4zOTk3NTYyOTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NDY1Mzk5OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJQk0gQ3J5cHRvRXhwcmVzcyBjYXJkcyB0byBiZSBwcmVzZW50IG9uIHRoZSBob3N0IChjaGVja2VkIHZpYSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4YjdhYmJkYTM2NTRlNTQ4ZDZiNzcxN2JhNGE1ZWY1ZDNlYTcxMGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAyMzo1MTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uYjBhMDM4ZmFhOTNhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMSwyNiArMTgyMSwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbTtcbi1cbiBcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRha2luZyB0aGUga3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlXG4rXHRcdCAqIGhvbGRpbmcgdGhlIHVwZGF0ZSBsb2NrcyAoYmVsb3cpIGNvdWxkIHJlc3VsdCBpbiBhXG4rXHRcdCAqIGRlYWRsb2NrIGNvbmRpdGlvbiwgc28gbGV0J3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZVxuK1x0XHQgKiBjaGVjayBhbmQgdXBkYXRlIHRoZSBwcWFwX2hvb2suXG4rXHRcdCAqL1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuK1x0XHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbiBcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdFx0aWYgKG0gIT0gbWF0cml4X21kZXYgXHUwMDI2XHUwMDI2IG0tXHUwMDNla3ZtID09IGt2bSkge1xuLVx0XHRcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuLVxuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTowMy4zOTk3NTc2NDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc5OTQ0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyeXB0byBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgd2l0aGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiAgSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQncyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gczM5MCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgVkZJTyBBUCAoY3J5cHRvKSBtZGV2LiAgTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBRRU1VIHNldHVwPyBJIGtub3cgczM5MHggY2FuIGJlIGVtdWxhdGVkLCBidXQgZG9lcyBRRU1VIGhhdmUgdGhlIGZ1bGwgVkZJTyBBUCBzdG9yeT9cblxuUmlnaHQsIFZGSU8gQVAgdXN1YWxseSBkZXBlbmRzIG9uIGVpdGhlciBhY3R1YWwgcGh5c2ljYWwgQVAgaGFyZHdhcmUgb3Igc29tZSB2ZXJ5IHNwZWNpZmljIGVtdWxhdGlvbi4gIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHMzOTB4IFZGSU8gQVAgaXMgYSAqZHJpdmVyKiBmb3IgQVAgbWF0cml4IGRldmljZXMuICBTbywgdGhlIG5leHQgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBldmVuIHJlbW90ZWx5IGZ1enphYmxlPyAgR2VuZXJhbGx5LCB0aGVzZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZHJpdmVycyBhcmUgYSBwYWluIHRvIGZ1enogdW5sZXNzIHdlJ3JlIGFjdHVhbGx5IG9uIHMzOTB4LlxuXG5CdXQuLi5zeXprYWxsZXIgKmRvZXMqIGZ1enogczM5MHgsIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIE5vdywgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBzYXlzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIEFoLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGVtdWxhdGUgQVAgbWF0cml4IGRldmljZXM/XG5cbkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgVkZJT19BUGAgY2FuIGJlIGVuYWJsZWQuIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGluIEtjb25maWcgZm9yIGBWRklPX0FQYC4gVGhhdCBzaG91bGQgbGVhZCBtZSB0byB0aGUgYW5zd2VyLCBhbmQgd2hldGhlciBvciBub3QgSSBzaG91bGQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjA4Ljk3OTcwNDY3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY2OTg2OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MDkuMDg2NDA5NzY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNjgzNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlZGSU9fQVAgS2NvbmZpZyBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgZm9yIHRoZSBqdWd1bGFyIOKAkyBmaW5kIGV2ZXJ5IGluc3RhbmNlIG9mIGBWRklPX0FQYCBhY3Jvc3MgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIHdoYXQgaXQgZGVwZW5kcyBvbiwgYW5kIGhvdyBpdCdzIHVzZWQuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBLY29uZmlnIGVudHJpZXMgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWw7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBvcHRpb25zIEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yPyBUaGUgZ29hbHMgaGVyZSBhcmUgdG8gZmluZCB3aGVyZSBpdCdzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBhbHNvIHRoZSBsb2NhdGlvbiBpbiB0aGUgY29kZSBiYXNlIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgc2VhcmNoIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjEyLjE5MzI1MDU2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE4MjIwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjE0LjYxMTQ3NjU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTEzNjU5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgVkZJT19BUGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBzdXBwb3J0IGVjb3N5c3RlbSBmb3IgYFZGSU9fQVBgP1wiLiBJIGtub3cgdGhlIGJhc2ljIFZGSU8gaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIFRoaXMgbWVhbnMgSSdtIG5vdCBqdXN0IGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBtb2R1bGVzOyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHVzZXItc3BhY2UgbGlicmFyaWVzLCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMsIGFuZCBoYXJkd2FyZSByZXF1aXJlbWVudHMsIGlmIGFueSwgdGhhdCBjb21lIGFsb25nIGZvciB0aGUgcmlkZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcGxhY2Ugd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFdoZXJlIGRvZXMgYFZGSU9fQVBgIGZpdCBpbiwgZnJvbSBhIGhvbGlzdGljIHBlcnNwZWN0aXZlP1xuXG5cbiIsIklucHV0VG9rZW5zIjozNDI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MTcuMDYyODQ1NjU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHRcXG4gODMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cXG4gODMzOlxcdFxcbiA4MzQ6XFx0Y29uZmlnIFZGSU9fQVBcXG4gODM1OlxcdFxcdGRlZl90cmlzdGF0ZSBuXFxuIDgzNjpcXHRcXHRwcm9tcHQgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1xcXCJcXG4gODM3OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuIDgzODpcXHRcXHRkZXBlbmRzIG9uIFZGSU9cXG4gODM5OlxcdFxcdGRlcGVuZHMgb24gQVBcXG4gODQwOlxcdFxcdHNlbGVjdCBWRklPX01ERVZcXG4gODQxOlxcdFxcdGhlbHBcXG4gODQyOlxcdFxcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcXG4gODQzOlxcdFxcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXFxuIDg0NDpcXHRcXG4gODQ1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA4NDY6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRlbmRtZW51XFxuIDg0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MTcuMDYyOTcxMzI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4NjI4MjA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0J3MgbXkgb3duIGludGVybmFsIGRpYWxvZ3VlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBsZXQncyB1bnBhY2sgdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBoaW5nZXMgb24gdGhpcyB2YXJpYWJsZSwgYEFQYC4gVGhlIGJlaGF2aW9yLCB0aGUgb3V0Y29tZSwgdGhlICp3aG9sZSBkYW1uIHRoaW5nKiBpcyBjb250aW5nZW50IG9uIGl0cyBzdGF0ZS4gU28sIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gY2xhcmlmeSBwcmVjaXNlbHkgd2hhdCBgQVBgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBXaGF0IGFyZSBpdHMgcG90ZW50aWFsIHZhbHVlcz8gSXMgaXQgYSBzaW5nbGUgdmFsdWUsIGEgcmFuZ2UsIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlPyBVbmRlcnN0YW5kaW5nIGBBUGAgaXMgYWJzb2x1dGVseSBwYXJhbW91bnQuIE5vIG90aGVyIGFuYWx5c2lzIGNhbiBwcm9jZWVkIHVudGlsIEkgaGF2ZSBhIGZpcm0gZ3Jhc3Agb2YgaXRzIGNoYXJhY3RlcmlzdGljcyBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIGRvbWFpbiBvZiBgQVBgIHRvIGRldGVybWluZSB3aGVyZSB0byBzdGFydCBteSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjE5Ljk0OTI1NjAyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTIyMTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yOTEtPT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZS00Mi1cXHRib29sIFxcXCJBcG9sbG8gc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk2LVxcdGJvb2xcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4NT1jb25maWcgRUFETV9TQ0hcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQXFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXFxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTgxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz04ODU9Y29uZmlnIENNTV9JVUNWXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXFxuYXJjaC9zMzkwL0tjb25maWctODk0LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxcbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxcbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDQtXFxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXFxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVxcdHRyaXN0YXRlIFxcXCJBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXFxuYXJjaC94ODYvS2NvbmZpZzoyODAxOmNvbmZpZyBBUE1fSUdOT1JFX1VTRVJfU1VTUEVORFxcbmFyY2gveDg2L0tjb25maWctMjgwMi1cXHRib29sIFxcXCJJZ25vcmUgVVNFUiBTVVNQRU5EXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODA3LVxcbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxcbmFyY2gveDg2L0tjb25maWctMjgwOS1cXHRib29sIFxcXCJFbmFibGUgUE0gYXQgYm9vdCB0aW1lXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxcbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXFxuYXJjaC94ODYvS2NvbmZpZy0yODI2LVxcdGRlcGVuZHMgb24gQ1BVX0lETEVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjgzNi1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXFxuYXJjaC94ODYvS2NvbmZpZy0yODM4LVxcdGJvb2wgXFxcIkVuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXFxuYXJjaC94ODYvS2NvbmZpZy0yODUxLVxcdGJvb2wgXFxcIkFsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTIyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6MzA4OmNvbmZpZyBBUFFfTU1DQ184MDg0XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cXHR0cmlzdGF0ZSBcXFwiQVBRODA4NCBNdWx0aW1lZGlhIENsb2NrIENvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnPTc4PWNvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxcbmRyaXZlcnMvZG1hL0tjb25maWc6ODg6Y29uZmlnIEFQUExFX0FETUFDXFxuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgQURNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MTU0PWNvbmZpZyBFRklfREVWX1BBVEhfUEFSU0VSXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjE1Nzpjb25maWcgQVBQTEVfUFJPUEVSVElFU1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkFwcGxlIERldmljZSBQcm9wZXJ0aWVzXFxcIlxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZz02Nj1jb25maWcgQUwzMzIwQVxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjc2OmNvbmZpZyBBUERTOTE2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXFx0dHJpc3RhdGUgXFxcIkFQRFM5MTYwIGNvbWJpbmVkIGFscyBhbmQgcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6MTA5OmNvbmZpZyBBUERTOTk2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTk2MCBnZXN0dXJlL1JHQi9BTFMvcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZz0yOTY9Y29uZmlnIFNQQVBSX1RDRV9JT01NVVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MzA0OmNvbmZpZyBBUFBMRV9EQVJUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgREFSVCBJT01NVSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9Nzg4PWNvbmZpZyBJUlFfSURUMzI0M1hcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZzo3OTM6Y29uZmlnIEFQUExFX0FJQ1xcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJBcHBsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKVxcXCJcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMyNz1jb25maWcgU0dJX0dSVV9ERUJVR1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMzNDpjb25maWcgQVBEUzk4MDJBTFNcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIk1lZGZpZWxkIEF2YWdvIEFQRFM5ODAyIEFMUyBTZW5zb3IgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEwNj1jb25maWcgTkUyS19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEyNDpjb25maWcgQVBORVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlBDTUNJQSBORTIwMDAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM9MzMyMD1zdGF0aWMgaW50IHJ0dzg5X3BjaV9jZmdfZGFjKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jOjMzMzM6XFx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVxcdHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJUVzg5X1BDSUVfTDFfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNTM9Y29uZmlnIE1BUlZFTExfQ04xMEtfVEFEX1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MDpjb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cXHRib29sIFxcXCJBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnPTE5ND1jb25maWcgQURWX1NXQlVUVE9OXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnOjIwNTpjb25maWcgQVBQTEVfR01VWFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBHbXV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZz0zPWlmIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWctNi1cXHRib29sIFxcXCJBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIkFQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFxcXCJBcHBsZSBTb0MgZHJpdmVyc1xcXCJcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo3OmNvbmZpZyBBUFBMRV9NQUlMQk9YXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTb0MgbWFpbGJveGVzXFxcIlxcbi0tXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo0MTpjb25maWcgQVBQTEVfVFVOQUJMRVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxcbi0tXFxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE1OC1cXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXFx0dHJpc3RhdGUgXFxcIkZhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcXFwiR3JhcGhpY3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xcbmRyaXZlcnMvdmlkZW8vS2NvbmZpZy05LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTExPWNvbmZpZyBNU0MzMTNFX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTEyMzpjb25maWcgQVBQTEVfV0FUQ0hET0dcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU29DIHdhdGNoZG9nXFxcIlxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTI9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cXHQgKiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgZWl0aGVyIHRoZSBvbGQgbW91bnQgQVBJIG9yXFxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XFx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXFxuZnMveGZzL3hmc19zdXBlci5jLTE2NjYtXFx0ICovXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zMTA9Y29uZmlnIFBNX1RSQUNFX1JUQ1xcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjMyODpjb25maWcgQVBNX0VNVUxBVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjIyLjMzNDQ4MzIzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ1NjQ2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBzMzkwIEtjb25maWcqKlxuXG5Pa2F5LCBoZXJlIHdlIGdvLiBUaGUgcHJvbXB0IGluZGljYXRlcyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5NiBvZiBpdHMgYEtjb25maWdgIGZpbGUuIFRoZSB0cmlnZ2VyIGlzIGBhcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG9wZW4gdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgem9vbSByaWdodCBpbiBvbiB0aGF0IGxpbmUuIFRoYXQncyB3aGVyZSB3ZSdsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZWx5IG5hbWVkIGBBUGAsIGFuZCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoYXRldmVyIHRoaXMgY29udGV4dCByZXF1aXJlcy4gSSBuZWVkIHRvIHNlZSB3aGF0IGBBUGAgaXMgZGVmaW5lZCBhcywgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGhlbHAgdGV4dCBzYXlzLiBUaGF0J2xsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIG9yIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjI1LjQ4MDEzMTYzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTA6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgRUFETSBzdWJjaGFubmVscy4gRUFETSBzdWJjaGFubmVscyBhY3RcXG4gNzkxOlxcdFxcdCAgYXMgYSBjb21tdW5pY2F0aW9uIHZlaGljbGUgZm9yIFNDTSBpbmNyZW1lbnRzLlxcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3OTQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZWFkbV9zY2guXFxuIDc5NTpcXHRcXG4gNzk2OlxcdGNvbmZpZyBBUFxcbiA3OTc6XFx0XFx0ZGVmX3RyaXN0YXRlIHlcXG4gNzk4OlxcdFxcdHByb21wdCBcXFwiU3VwcG9ydCBmb3IgQWRqdW5jdCBQcm9jZXNzb3JzIChhcClcXFwiXFxuIDc5OTpcXHRcXHRoZWxwXFxuIDgwMDpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXMgdmlhXFxuIDgwMTpcXHRcXHQgIHRoZSBhcCBidXMsIGNhcmRzIGFuZCBxdWV1ZXMuIFN1cHBvcnRlZCBBZGp1bmN0IFByb2Nlc3NvcnMgYXJlXFxuIDgwMjpcXHRcXHQgIHRoZSBDcnlwdG9FeHByZXNzIENhcmRzIChDRVgpLlxcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4MDU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXAuXFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSAoZGVmYXVsdCkuXFxuIDgwODpcXHRcXG4gODA5OlxcdGNvbmZpZyBBUF9ERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MToyNS40ODAyMDc4NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMjc0ODU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEFkanVuY3QgUHJvY2Vzc29yIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gXCJBUCxcIiB3aGljaCBJIGtub3cgc3RhbmRzIGZvciBcIlN1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycyxcIiByZWZlcnJpbmcgc3BlY2lmaWNhbGx5IHRvIHRob3NlIENyeXB0b0V4cHJlc3MgQ2FyZHMgKENFWCkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGNhbiBJIGVtdWxhdGUgdGhpcyBlbnZpcm9ubWVudCB3aXRoaW4gUUVNVT8gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBhIGB2ZmlvLWFwYCBkZXZpY2Ugd2l0aGluIFFFTVUsIGJ1dCBJIGtub3cgdGhhdCByZXF1aXJlcyBWRklPIG9uIHRoZSBob3N0IGhhcmR3YXJlLiBUaGF0J3MgYSBodXJkbGUuXG5cbk5vdywgSSB3b25kZXIsIGRvZXMgc3l6a2FsbGVyIHByb3ZpZGUgYSB0ZXN0aW5nIGF2ZW51ZSBmb3IgdGhpcz8gSXQgcnVucyBvbiBzMzkweCwgYW5kIGRvZXMgaXQgdXNlIHBoeXNpY2FsIEFQIGRldmljZXM/IE5vcm1hbGx5IHN5emthbGxlciBpbnN0YW5jZXMgcnVuIG9uIEdDRSBvciBRRU1VLiBCdXQgR0NFIGRvZXNuJ3QgaGF2ZSBzMzkweC4gU28gaXQncyBwcm9iYWJseSBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCBBUCBkZXZpY2VzPyBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBzb21lIGRpZ2dpbmcuXG5cblBlcmhhcHMgdGhlcmUncyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQVAgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIElzIHRoZXJlIHNvbWUga2luZCBvZiBcImZha2VcIiBBUCBkZXZpY2UgZHJpdmVyPyBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9gIGRpcmVjdG9yeSBhbmQgc2VlIGlmIGFueXRoaW5nIGxpa2UgYGFwX2RldmljZWAgb3IgYGFwX21hdHJpeF9tZGV2YCBzaG93cyB1cC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjI5LjcwMjk1ODg1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0b1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhcF9idXMuY1wiLFxuICAgIFwiYXBfYnVzLmhcIixcbiAgICBcImFwX2NhcmQuY1wiLFxuICAgIFwiYXBfZGVidWcuaFwiLFxuICAgIFwiYXBfcXVldWUuY1wiLFxuICAgIFwicGtleV9hcGkuY1wiLFxuICAgIFwicGtleV9iYXNlLmNcIixcbiAgICBcInBrZXlfYmFzZS5oXCIsXG4gICAgXCJwa2V5X2NjYS5jXCIsXG4gICAgXCJwa2V5X2VwMTEuY1wiLFxuICAgIFwicGtleV9wY2ttby5jXCIsXG4gICAgXCJwa2V5X3N5c2ZzLmNcIixcbiAgICBcInBrZXlfdXYuY1wiLFxuICAgIFwidmZpb19hcF9kZWJ1Zy5oXCIsXG4gICAgXCJ2ZmlvX2FwX2Rydi5jXCIsXG4gICAgXCJ2ZmlvX2FwX29wcy5jXCIsXG4gICAgXCJ2ZmlvX2FwX3ByaXZhdGUuaFwiLFxuICAgIFwiemNyeXB0X2FwaS5jXCIsXG4gICAgXCJ6Y3J5cHRfYXBpLmhcIixcbiAgICBcInpjcnlwdF9jYXJkLmNcIixcbiAgICBcInpjcnlwdF9jY2Ffa2V5LmhcIixcbiAgICBcInpjcnlwdF9jY2FtaXNjLmNcIixcbiAgICBcInpjcnlwdF9jY2FtaXNjLmhcIixcbiAgICBcInpjcnlwdF9jZXgyYS5jXCIsXG4gICAgXCJ6Y3J5cHRfY2V4MmEuaFwiLFxuICAgIFwiemNyeXB0X2NleDJjLmNcIixcbiAgICBcInpjcnlwdF9jZXgyYy5oXCIsXG4gICAgXCJ6Y3J5cHRfY2V4NC5jXCIsXG4gICAgXCJ6Y3J5cHRfY2V4NC5oXCIsXG4gICAgXCJ6Y3J5cHRfZGVidWcuaFwiLFxuICAgIFwiemNyeXB0X2VwMTFtaXNjLmNcIixcbiAgICBcInpjcnlwdF9lcDExbWlzYy5oXCIsXG4gICAgXCJ6Y3J5cHRfZXJyb3IuaFwiLFxuICAgIFwiemNyeXB0X21zZ3R5cGU1MC5jXCIsXG4gICAgXCJ6Y3J5cHRfbXNndHlwZTUwLmhcIixcbiAgICBcInpjcnlwdF9tc2d0eXBlNi5jXCIsXG4gICAgXCJ6Y3J5cHRfbXNndHlwZTYuaFwiLFxuICAgIFwiemNyeXB0X3F1ZXVlLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MjkuNzAzMDQ1NDExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjYwNjkzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgdmZpb19hcF9tZGV2X3NldF9rdm0gQ2FsbCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAuIEEgZ29vZCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoYXQgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBTbywgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgaXMgYHZmaW9fYXBfZHJ2LmNgLiBUaGF0IGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBkcml2ZXItbGV2ZWwgY29kZSBmb3IgdGhlIFZGSU8tQVAgKEFjY2VsZXJhdGVkIFByb2Nlc3NpbmcpIGRldmljZSByZXNpZGVzLCBhbmQgdGh1cyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNhbGwuIEknbSBhc3N1bWluZyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHNldHVwIGZvciBLVk0gaW50ZWdyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGlzIEFQIGRldmljZS4gRXhhbWluaW5nIHRoYXQgZmlsZSBzaG91bGQgcmV2ZWFsIHRoZSBjYWxsaW5nIGNvbnRleHQsIGlucHV0IGFyZ3VtZW50cywgYW5kIGlkZWFsbHksIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaXMgY29uc2lkZXJlZCBuZWNlc3NhcnkuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2VsaW5lIG5lZWRlZCB0byBhbmFseXplIGFueSBmdXJ0aGVyIHJlbGF0ZWQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTozMy42MjkxMTc2NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTA5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9zZXRfa3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xODA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp2ZmlvX2FwX21kZXZfYXR0cl9ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODExLS8qKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODEyOiAqIHZmaW9fYXBfbWRldl9zZXRfa3ZtIC0gc2V0cyBhbGwgZGF0YSBmb3IgQG1hdHJpeF9tZGV2IHRoYXQgYXJlIG5lZWRlZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODEzLSAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieSBAa3ZtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMC0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjItXFx0XFx0XFx0XFx0c3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNTI9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNjA6XFx0cmV0dXJuIHZmaW9fYXBfbWRldl9zZXRfa3ZtKG1hdHJpeF9tZGV2LCB2ZGV2LVxcdTAwM2Vrdm0pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDYxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MzMuNjk0MjMyMjUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzgyODI3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGB2ZmlvX2FwYCBNZWRpYXRlZCBEZXZpY2UgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjYWxsIG9yaWdpbmF0aW5nIGZyb20gYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAuIE15IGZpcnN0IHRob3VnaHQgaXMgd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIHJlbGV2YW50IHdpdGhvdXQgYWN0dWFsIEFQIChBcHBsaWNhdGlvbiBQcm9jZXNzb3IpIGhhcmR3YXJlIHByZXNlbnQuIFRoYXQncyBhIGNydWNpYWwgZmlyc3QgcXVlc3Rpb24gdG8gYW5zd2VyLiBHaXZlbiB0aGF0IHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBWRklPIEFQLCB3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIG9mIGhvdyB0aGVzZSBtZWRpYXRlZCBkZXZpY2VzIGFyZSBzZXQgdXAuIEknbGwgZGl2ZSBpbnRvIGB2ZmlvX2FwX2Rydi5jYCBub3cuIFRoYXQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gb24gaG93IHRoZSBtZGV2IChtZWRpYXRlZCBkZXZpY2UpIGlzIGNyZWF0ZWQgYW5kIHdoYXQgdGhlIGNyZWF0aW9uIHByb2Nlc3MgZW50YWlscy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MzYuOTcyNTE3OTMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MDc2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjYwOlxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MTpcXHQuaW5fdXNlID0gdmZpb19hcF9tZGV2X3Jlc291cmNlX2luX3VzZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjItXFx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExMjpcXHRtdXRleF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTEzOlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTQtXFx0bXV0ZXhfaW5pdChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xODgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4OTpcXHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTkwLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDEte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoyMDI6XFx0dmZpb19hcF9tZGV2X3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjAzLVxcdGFwX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZ2ZmlvX2FwX2Rydik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjM3LjA3MzQzMzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODE3MDQ5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBtZGV2IERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYC4gVGhhdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIE11bHRpLWRldmljZSAobWRldikgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgQWR2YW5jZWQgUGxhdGZvcm0gKEFQKSBjb250ZXh0LiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaG9va3MgaW50byB0aGUgc3lzdGVtLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGlzIGZ1bmN0aW9uJ3MgbG9jYXRpb24gYW5kIHdoYXQncyBpbmNsdWRlZC4gSeKAmWxsIGNoZWNrIHdoZXJlIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIGRlZmluZWQ7IGl0IHNob3VsZCBiZSBpbnNpZGUgYHZmaW9fYXBfb3BzLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgY29yZSBvcGVyYXRpb25zIGZvciB0aGUgVkZJTy1BUCBpbXBsZW1lbnRhdGlvbiB0eXBpY2FsbHkgcmVzaWRlLCBzbyB0aGlzIGNvbmZpcm1zIHRoYXQncyB0aGUgcGxhY2UgdG8gbG9vayBmb3IgZGV0YWlscyBhYm91dCB0aGUgbWRldiByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEFQIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo0MC42NTUxNDEzNDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDA4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzM9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NjppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo0MC43MTA1NTQ2MTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzMxNjQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJIGtub3cgdGhlIFZGcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoaXMgd29ya3MsIHNvIEknbSBnb2luZyB0byBrZWVwIHRoYXQgYXQgdGhlIGZvcmVmcm9udCBvZiBteSBtaW5kLlxuXG4qKlVuZGVyc3RhbmRpbmcgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKipcblxuUmlnaHQsIHNvIHRoaXMgbG9va3MgbGlrZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJpbmcgYSBtZWRpYXRlZCBkZXZpY2Ugd2l0aCB0aGUgQVAgKEFwcGxpY2F0aW9uIFByb2Nlc3NvcikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBnZXRzIGFjcXVhaW50ZWQgd2l0aCB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUuIEl0J3MgdGhlIG9uYm9hcmRpbmcgcHJvY2VzcywgaWYgeW91IHdpbGwuIEknbSBnb2luZyB0byBsb29rIGZvciBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkIGhlcmUg4oCTIHByZXN1bWFibHksIHN0cnVjdHVyZXMgaG9sZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzLCBpdHMgcGh5c2ljYWwgYmFja2luZywgYW5kIHRoZSBWRklPIGNvbnRleHQgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB0aGUgbWVkaWF0ZWQgZGV2aWNlIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEknbSB0aGlua2luZyBhYm91dCByZXNvdXJjZSBhbGxvY2F0aW9uLCBzZWN1cml0eSBjaGVja3MsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiB0aWVzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIGRldmljZSBwYXNzdGhyb3VnaC4gQXJlIHRoZXJlIGFueSBsb2NrcyBpbnZvbHZlZD8gU3luY2hyb25pemF0aW9uIGlzIGFsd2F5cyBpbXBvcnRhbnQgaW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYXMgd2VsbDsgd2hhdCBoYXBwZW5zIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzLCBhbmQgaG93IGRvZXMgdGhlIHN5c3RlbSByZWNvdmVyPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSBhbnkgbmVjZXNzYXJ5IHNldHVwIGZvciBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBpcyBpbml0aWFsaXplZC4gTGV0J3Mgc2VlIGhvdyB0aGF0IHRpZXMgaW50byB0aGUgZXhpc3RpbmcgVkZJTyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTUwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NDQuNTE3ODc0NDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM4MDpcXHRcXHRcXHQuZGV2X2dyb3VwcyA9IHZmaW9fYXBfbWRldl9hdHRyX2dyb3VwcyxcXG4yMzgxOlxcdFxcdH0sXFxuMjM4MjpcXHRcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmUsXFxuMjM4MzpcXHRcXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4yMzg0OlxcdH07XFxuMjM4NTpcXHRcXG4yMzg2OlxcdGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcXG4yMzg3OlxcdHtcXG4yMzg4OlxcdFxcdGludCByZXQ7XFxuMjM4OTpcXHRcXG4yMzkwOlxcdFxcdHJldCA9IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIpO1xcbjIzOTE6XFx0XFx0aWYgKHJldClcXG4yMzkyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZS5zeXNmc19uYW1lID0gVkZJT19BUF9NREVWX1RZUEVfSFdWSVJUO1xcbjIzOTU6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlLnByZXR0eV9uYW1lID0gVkZJT19BUF9NREVWX05BTUVfSFdWSVJUO1xcbjIzOTY6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlcyA9IFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGU7XFxuMjM5NzpcXHRcXHRyZXQgPSBtZGV2X3JlZ2lzdGVyX3BhcmVudChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlcGFyZW50LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLFxcbjIzOTg6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcixcXG4yMzk5OlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGVzLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NDQuNTE4MDU4NjI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg1NzExMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTWF0cml4IERldmljZSBDb250ZXh0KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgaW5kaWNhdGluZyBhbiBtZGV2IHBhcmVudCBhc3NvY2lhdGlvbiBvbiBgbWF0cml4X2Rldi1cdTAwM2VkZXZpY2VgLiBUaGF0J3MgdGhlIGtleSBsaW5lLCBjbGVhcmx5IGxpbmtpbmcgdGhlIG1hdHJpeCBkZXZpY2Ugc3RydWN0dXJlIHRvIGEgcGFyZW50IG1kZXYgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGBtYXRyaXhfZGV2YCBzdHJ1Y3R1cmUgKmFjdHVhbGx5KiBpbnN0YW50aWF0ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGl0cyBjcmVhdGlvbiBwb2ludC4gS25vd2luZyB3aGVyZSBpdCdzIGluaXRpYWxpemVkLCBwb3B1bGF0ZWQsIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmVkIHdpbGwgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9uIHBvaW50cyB3aXRoIHRoZSB2aXJ0dWFsaXphdGlvbiBsYXllci4gVGhpcyBsb29rcyBsaWtlIGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgd2hvbGUgc3lzdGVtLCBzbyBsZXQncyBzdGFydCBkaWdnaW5nIGRlZXBlciBhbmQgZmluZCBpdCdzIG9yaWdpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NDcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjQ3LjcyNjYzMzI1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4MjE5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF0cml4X2RldiA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9Njc9c3RhdGljIHZvaWQgdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTcwLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo3MTpcXHRtYXRyaXhfZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFwX21hdHJpeF9kZXYsIGRldmljZSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTcyLVxcdGtmcmVlKG1hdHJpeF9kZXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTg2PXN0YXRpYyBpbnQgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTk4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo5OTpcXHRtYXRyaXhfZGV2ID0ga3phbGxvY19vYmooKm1hdHJpeF9kZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMDAtXFx0aWYgKCFtYXRyaXhfZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjQ3Ljc5NDQ1OTE3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAyMDk5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiDigJMgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBWRklPIGhhbmRsZXMgdGhlIGNvbXBsZXggdG9wb2xvZ3kgb2YgYXR0YWNoZWQgZGV2aWNlcyBhbmQgYWNjZXNzIHBvaW50cy4gSSBuZWVkIHRvIGtlZXAgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGRldmljZSBpbiBtaW5kIHdoaWxlIGdvaW5nIHRocm91Z2ggaXQuXG5cbioqTXkgQXBwcm9hY2ggdG8gYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgKipcblxuUmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24gc3RlcC1ieS1zdGVwLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGB2ZmlvX2FwX21hdHJpeF9kZXZpY2VgIGFuZCBob3cgaXQncyBpbml0aWFsaXplZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGFjY2VzcyBwb2ludCAoQVApIGFuZCBhdHRhY2hlZCBkZXZpY2UgcmVsYXRpb25zaGlwcyBhcmUgZXN0YWJsaXNoZWQgd2l0aGluIHRoaXMgc3RydWN0dXJlLCBhbmQgdGhlIGNoZWNrcyBpdCBwZXJmb3Jtcy4gVW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdmFyaW91cyBmaWVsZHMgaGVyZSBpcyBwYXJhbW91bnQuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGUgVkZJTyBBUEkgZW5mb3JjZXMgdGhvc2UgZnVuZGFtZW50YWwgZGV2aWNlIHJlbGF0aW9uc2hpcHMsIGhvdyBpdCBpcyBzdG9yZWQsIGFuZCBhbnkgcG90ZW50aWFsIGNvcm5lciBjYXNlcyBpdCBtaWdodCBiZSBndWFyZGluZyBhZ2FpbnN0LCBzdWNoIGFzIG92ZXJsYXBwaW5nIHJlc291cmNlcyBvciBjb25mbGljdGluZyBhY2Nlc3MgbWFwcGluZ3MuIEdpdmVuIG15IGV4cGVydGlzZSwgSeKAmWxsIGFsc28gYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBBbnkgY2xldmVyIGJpdC1tYW5pcHVsYXRpb24sIGhhc2ggZnVuY3Rpb24gdXNhZ2Ugb3Igb3RoZXIgZWZmaWNpZW50IGxvb2t1cHMgdGhlIGNvZGUgZW1wbG95cyB3aWxsIHN0YW5kIG91dCB0byBtZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgZGV2aWNlIG1hdHJpeCBpcyBjb25zdHJ1Y3RlZCBhbmQgbWFpbnRhaW5lZCBmcm9tIHRoZSBtb21lbnQgdGhlIFZGSU8gY29yZSBpcyB0b2xkIHRvIGNyZWF0ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo1MS4xOTY1NjAxNTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDg2OlxcdHN0YXRpYyBpbnQgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSh2b2lkKVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0aW50IHJldDtcXG4gIDg5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2aWNlO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcXG4gIDkyOlxcdFxcdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxcbiAgOTM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocm9vdF9kZXZpY2UpO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRyZXQgPSBidXNfcmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9idXMpO1xcbiAgOTY6XFx0XFx0aWYgKHJldClcXG4gIDk3OlxcdFxcdFxcdGdvdG8gYnVzX3JlZ2lzdGVyX2VycjtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0bWF0cml4X2RldiA9IGt6YWxsb2Nfb2JqKCptYXRyaXhfZGV2KTtcXG4gMTAwOlxcdFxcdGlmICghbWF0cml4X2Rldikge1xcbiAxMDE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMTAyOlxcdFxcdFxcdGdvdG8gbWF0cml4X2FsbG9jX2VycjtcXG4gMTAzOlxcdFxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0LyogRmlsbCBpbiBjb25maWcgaW5mbyB2aWEgUFFBUChRQ0kpLCBpZiBhdmFpbGFibGUgKi9cXG4gMTA2OlxcdFxcdGlmICh0ZXN0X2ZhY2lsaXR5KDEyKSkge1xcbiAxMDc6XFx0XFx0XFx0cmV0ID0gYXBfcWNpKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VpbmZvKTtcXG4gMTA4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDEwOTpcXHRcXHRcXHRcXHRnb3RvIG1hdHJpeF9hbGxvY19lcnI7XFxuIDExMDpcXHRcXHR9XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiAxMTM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuIDExNDpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiJXNcXFwiLCBWRklPX0FQX0RFVl9OQU1FKTtcXG4gMTE3OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5wYXJlbnQgPSByb290X2RldmljZTtcXG4gMTE4OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5idXMgPSBcXHUwMDI2bWF0cml4X2J1cztcXG4gMTE5OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5yZWxlYXNlID0gdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2U7XFxuIDEyMDpcXHRcXHRtYXRyaXhfZGV2LVxcdTAwM2V2ZmlvX2FwX2RydiA9IFxcdTAwMjZ2ZmlvX2FwX2RydjtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0cmV0ID0gZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiAxMjM6XFx0XFx0aWYgKHJldClcXG4gMTI0OlxcdFxcdFxcdGdvdG8gbWF0cml4X3JlZ19lcnI7XFxuIDEyNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NTEuMTk2NjI1NzA1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODc1NDM1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVW5kZXJzdGFuZGluZyBvZiB0aGUgTWF0cml4IERldmljZSBhbmQgVkZJTy1BUCBJbml0aWFsaXphdGlvbioqXG5cblJpZ2h0LCBzbyBgbWF0cml4X2RldmAgaXMgZXN0YWJsaXNoZWQgYXMgdGhlIGZ1bmRhbWVudGFsIHJvb3QgZGV2aWNlLiBBbmQgaXQncyBzZXQgdXAgdG8gbWFuYWdlIHRoZSBtZGV2cy4gQ29vbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSd2ZSBnb3QgYSBmcmFtZXdvcmsgaGVyZS4gSXQncyBkZXNpZ25lZCB0byByZWdpc3RlciBhbiBtZGV2IHBhcmVudCBvbiBpdCwgd2hpY2ggbWVhbnMgd2UnbGwgYmUgYWJsZSB0byBjcmVhdGUgb3VyIG1kZXZzIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCdzIGdvb2QsIHByZWRpY3RhYmxlIGJlaGF2aW9yLiBFYXNpZXIgdG8gbWFuYWdlLCBzY3JpcHQsIGFuZCB1bmRlcnN0YW5kLiBJIGxpa2UgdGhhdC5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoaXMuIFRoYXQgYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgIGZ1bmN0aW9uLi4uIHRoYXQncyBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgYHZmaW9fYXBfaW5pdGAuIE9rYXksIHNvIHRoZSBtYXRyaXggZGV2aWNlIGlzIGNyZWF0ZWQgYXMgcGFydCBvZiB0aGUgVkZJTy1BUCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhhdCBjbGFyaWZpZXMgdGhlIHRpbWVsaW5lLiBJdCdzIGZ1bmRhbWVudGFsIHRvIGdldHRpbmcgdGhlIHdob2xlIFZGSU8tQVAgc3lzdGVtIHJ1bm5pbmcuIEdvdCBpdC4gTm93IEkgY2FuIHNlZSB0aGUgZmxvdyBmcm9tIHN0YXJ0dXAgdG8gYXZhaWxhYmlsaXR5IG9mIG1kZXZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NTQuNDg0MTcxMzA0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjc6XFx0c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRpbnQgcmV0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXQgPSB2ZmlvX2FwX2RiZl9pbmZvX2luaXQoKTtcXG4gMTcyOlxcdFxcdGlmIChyZXQpXFxuIDE3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cXG4gMTc2OlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxcbiAxNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldCA9IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUoKTtcXG4gMTgwOlxcdFxcdGlmIChyZXQpXFxuIDE4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRyZXQgPSBhcF9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XFxuIDE4NDpcXHRcXHRpZiAocmV0KSB7XFxuIDE4NTpcXHRcXHRcXHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xcbiAxODY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTg3OlxcdFxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0cmV0ID0gdmZpb19hcF9tZGV2X3JlZ2lzdGVyKCk7XFxuIDE5MDpcXHRcXHRpZiAocmV0KSB7XFxuIDE5MTpcXHRcXHRcXHRhcF9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYpO1xcbiAxOTI6XFx0XFx0XFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTk1OlxcdFxcdH1cXG4gMTk2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo1NC40ODQyNDExODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNjE3OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipBUCBJbnN0cnVjdGlvbiBBdmFpbGFiaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGdvdHRhIG1ha2Ugc3VyZSB0aGUgaGFyZHdhcmUncyBldmVuIGNhcGFibGUgb2Ygd2hhdCB3ZSdyZSBhYm91dCB0byBkby4gSSBzZWUgdGhpcyBgaWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHJldHVybiAtRU5PREVWO2AgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBjcnVjaWFsIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIHNhZmV0eSBjaGVjazsgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGV4ZWN1dGUgcHJpdmlsZWdlZCBpbnN0cnVjdGlvbnMgaWYgdGhlIENQVSBkb2Vzbid0IHN1cHBvcnQgdGhlbS4gVGhhdCByZXR1cm4gdmFsdWUsIGAtRU5PREVWYCwgYWxzbyBpbmRpY2F0ZXMgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSDigJMgbm8gZGV2aWNlIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUsIGVzc2VudGlhbGx5LiBTbywgYmVmb3JlIGFueXRoaW5nIGVsc2UsIEknbSBkaXZpbmcgaW4gdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoYXQgY2hlY2ssIHByZWNpc2VseSBob3cgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGZhY3RvcnMgaXQgY29uc2lkZXJzLiBJcyBpdCByZWFkaW5nIGEgQ1BVSUQgYml0PyBTb21lIG90aGVyIGNvbnRyb2wgcmVnaXN0ZXI/IFdoYXQncyB0aGUgZGV0ZWN0aW9uIGxvZ2ljPyBUaGlzIGluaXRpYWwgZ2F0ZWtlZXBpbmcgaXMgKmVzc2VudGlhbCogZm9yIGEgcm9idXN0IGFuZCBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbi4gR290dGEgZW5zdXJlIHdlJ3JlIGdyYWNlZnVsbHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhvc2UgaW5zdHJ1Y3Rpb25zIGFyZW4ndCBwcmVzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NTcuOTAwNDIyOTIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyMDg1MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODAtLyoqXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Mi0gKlxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODU6c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTEwNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9jcnlwdG8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRU5BQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTI6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1My1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTk6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE2MC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU2LVxcdFxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjE1NzpcXHRcXHRcXHRyZXQgPSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgPyAwIDogLUVOWElPO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDE9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMDU6XFx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA2LVxcdFxcdGlmIChhcF9xY2koXFx1MDAyNmluZm8pID09IDApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDAtXFx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo2MDE6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjU4MjpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cXHRcXHRwcl93YXJuKFxcXCJUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc1LVxcdC8qIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFzcyB0aHJvdWdoLiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE3Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MDAuMTMyNTIxODQ1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjgxNjQ5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU3lzdGVtIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYWNjZXNzIHBvaW50IGluc3RydWN0aW9ucy4gIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmhgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYC4gIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIEFjY2VzcyBQb2ludCBpbnN0cnVjdGlvbnMgb24gdGhpcyBTLzM5MCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MDQuMzYwNjkwMTAyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHQvKipcXG4gIDgxOlxcdCAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXFxuICA4MjpcXHQgKlxcbiAgODM6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBBUCBpbnN0cnVjdGlvbnMgYXJlIGluc3RhbGxlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAgODQ6XFx0ICovXFxuICA4NTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxcbiAgODY6XFx0e1xcbiAgODc6XFx0XFx0dW5zaWduZWQgbG9uZyByZWcwID0gQVBfTUtRSUQoMCwgMCk7XFxuICA4ODpcXHRcXHR1bnNpZ25lZCBsb25nIHJlZzEgPSAwO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRhc20gdm9sYXRpbGUoXFxuICA5MTpcXHRcXHRcXHRcXFwiXFx0bGdyXFx0MCwlW3JlZzBdXFxcXG5cXFwiXFx0XFx0LyogcWlkIGludG8gZ3IwICovXFxuICA5MjpcXHRcXHRcXHRcXFwiXFx0bGdoaVxcdDEsMFxcXFxuXFxcIlxcdFxcdFxcdC8qIDAgaW50byBncjEgKi9cXG4gIDkzOlxcdFxcdFxcdFxcXCJcXHRsZ2hpXFx0MiwwXFxcXG5cXFwiXFx0XFx0XFx0LyogMCBpbnRvIGdyMiAqL1xcbiAgOTQ6XFx0XFx0XFx0XFxcIlxcdC5pbnNuXFx0cnJlLDB4YjJhZjAwMDAsMCwwXFxcXG5cXFwiXFx0LyogUFFBUChUQVBRKSAqL1xcbiAgOTU6XFx0XFx0XFx0XFxcIjA6XFx0bGFcXHQlW3JlZzFdLDFcXFxcblxcXCJcXHRcXHQvKiAxIGludG8gcmVnMSAqL1xcbiAgOTY6XFx0XFx0XFx0XFxcIjE6XFxcXG5cXFwiXFxuICA5NzpcXHRcXHRcXHRFWF9UQUJMRSgwYiwgMWIpXFxuICA5ODpcXHRcXHRcXHQ6IFtyZWcxXSBcXFwiK1xcdTAwMjZkXFxcIiAocmVnMSlcXG4gIDk5OlxcdFxcdFxcdDogW3JlZzBdIFxcXCJkXFxcIiAocmVnMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MDQuMzYwODY4OTkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzk5Mzk4MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEFQLVJlbGF0ZWQgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYFBRQVAoVEFQUSlgIGluc3RydWN0aW9uLiBUaGUgY29kZSBjaGVja3MgZm9yIGEgdHJhcCBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCBoYXBwZW5zLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSBHQ0Ugb3IgUUVNVT9cblxuRmlyc3QgdGhvdWdodCwgZG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBgUFFBUGA/IEkga25vdyBRRU1VIGhhcyBzb21lIHMzOTB4IEFQIGVtdWxhdGlvbiwgYnV0IGlzIGl0IG9uIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IHNvbWV0aGluZyB5b3UgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZT8gSSByZWNhbGwgdGhhdCBBUCBpbnN0cnVjdGlvbnMgdXN1YWxseSBuZWVkIHRoZSBob3N0IHRvIGVpdGhlciBoYXZlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gcGFzcyB0aHJvdWdoLCBvciBmb3IgUUVNVSBpdHNlbGYgdG8gZW11bGF0ZSB0aGVtLlxuXG5BbHJpZ2h0LCBRRU1VIGhhcyBgYXAtYnJpZGdlYCBhbmQgYGFwLW1hdHJpeGAgZGV2aWNlcywgYnV0IHRob3NlIGFyZSBmb3IgKnBhc3NpbmcgdGhyb3VnaCogaG9zdCBBUCBkZXZpY2VzLCBub3QgZW11bGF0aW5nIHRoZW0uIFNvLCBkb2VzIFFFTVUgZG8gc29mdHdhcmUgZW11bGF0aW9uIG9mIEFQIGRldmljZXM/IE5vcGUsIGl0J3MgVkZJTyBhbGwgdGhlIHdheSDigJMgdXNpbmcgYHZmaW8tYXBgIGZvciBwYXNzdGhyb3VnaCBvbmx5LiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZSB0byBiZWdpbiB3aXRoLCB0aGVuIGB2ZmlvX2FwX2luaXRgIHJldHVybnMgYC1FTk9ERVZgLiBUaGF0IG1lYW5zIHRoZSBtb2R1bGUgaXNuJ3QgbG9hZGVkIGFuZCB0aGUgbWRldiBkcml2ZXIgaXNuJ3QgcmVnaXN0ZXJlZCwgbWFraW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBBUCBoYXJkd2FyZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjazogaWYgSSBydW4gUUVNVSB3aXRoIGAtY3B1IG1heGAsIGRvZXMgdGhhdCBzZXQgdGhlIEFQIGZhY2lsaXR5PyBBbmQgaXMgdGhlcmUgYW55IEtWTSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIEFQPyBJIHJlbWVtYmVyIEtWTSBjYW4gaW50ZXJjZXB0IGBQUUFQYCwgYnV0IHBhc3NlcyBpdCB0byB0aGUgYHZmaW9fYXBgIGRyaXZlci4gV2FpdCwgdGhlIGB2ZmlvX2FwYCBkcml2ZXIgSVMgdGhlIGRyaXZlciBmb3IgaGFuZGxpbmcgUFFBUCBmb3IgZ3Vlc3RzISBCdXQgdGhhdCBydW5zIG9uIHRoZSAqaG9zdCouIElmIHRoZSBob3N0IGlzIGEgVk0gKGxpa2UgUUVNVSksIGNhbiBpdCBldmVuICpoYXZlKiBBUCBpbnN0cnVjdGlvbnM/IElmIHRoZSBob3N0IGlzIGEgUUVNVSBWTSwgaXQgY2FuIG9ubHkgaGF2ZSBBUCBpbnN0cnVjdGlvbnMgaWYgdGhlIEwwIGhvc3QgcGFzc2VkIHRoZW0gdGhyb3VnaC5cblxuTm93LCBzeXprYWxsZXIgaXMgdGhlIGNvbnRleHQgaGVyZSwgcmlnaHQ/IEl0IHJ1bnMgaW4gUUVNVSBvbiBHQ0UsIHdoaWNoIGlzIHVzdWFsbHkgeDg2XzY0IG9yIGFybTY0LCBidXQgbWF5YmUgczM5MHggb24gSUJNIENsb3VkLiBPa2F5LCBzbyBzeXprYWxsZXIgKmRvZXMqIHJ1biBzMzkweCBvbiBJQk0gQ2xvdWQgb3IgUUVNVS4gSWYgaXQncyBvbiBRRU1VIG9uIHg4Nl82NCAoVENHKSwgUUVNVSBkb2Vzbid0IGVtdWxhdGUgQVAuIElmIGl0J3MgS1ZNIG9uIHMzOTB4LCB0aGVuIG1heWJlLCAqbWF5YmUqIGlmIHRoZSBob3N0IGhhcyB0aGVtLlxuXG5CdXQgdGhlIHByb21wdCBlbXBoYXNpemVzIHRoaW5ncyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIG9yIGNvZGUgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIE5vdywgaXMgQVAgYSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBZZXMhIEFkanVuY3QgUHJvY2Vzc29ycyAoQ3J5cHRvRXhwcmVzcyBDYXJkcykgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIG9uIElCTSBaLiBUaGV5IGFyZSAqbm90KiBzb2Z0d2FyZS1lbXVsYXRlZCBieSBRRU1VLiBRRU1VIG9ubHkgZG9lcyBwYXNzdGhyb3VnaCB2aWEgVkZJTy5cblxuVGhlcmVmb3JlLCB0aGUgYHZmaW9fYXBgIGRyaXZlciBjYW4ndCBpbml0aWFsaXplIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IHJlYWwgcGh5c2ljYWwgQVAgY2FyZHMuIENvbmZpcm1pbmcgdGhpcywgaWYgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgcmV0dXJucyBmYWxzZSwgdGhlbiBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYC4gQ2FuIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHJldHVybiB0cnVlIGluIFFFTVUgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZT8gSSdtIHByZXR0eSBzdXJlIG5vdC4gRXNwZWNpYWxseSBpbiBRRU1VIFRDRyAoc29mdHdhcmUgZW11bGF0aW9uIG9mIHMzOTB4KSwgaXQgd291bGQgKm5ldmVyKiBlbXVsYXRlIEFQIGluc3RydWN0aW9ucy5cblxuQVAgaW5zdHJ1Y3Rpb25zIGxpa2UgUFFBUCBhcmUgc3VwZXIgc3BlY2lmaWMgdG8gSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMuIFRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZSBjcnlwdG8gY2FyZHMgaW4gUUVNVS4gUUVNVSBvbmx5IHByb3ZpZGVzIHRoZSBgdmZpby1hcGAgZGV2aWNlLCByZXF1aXJpbmcgYSBob3N0IFZGSU8gZGV2aWNlLiBTbywgYHZmaW9fYXBfaW5pdGAgaXMgZ29pbmcgdG8gZmFpbC4gV2FpdCwgd2hhdCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBhbiBzMzkweCBMUEFSIG9yIEtWTSB3aXRoIEFQIGNhcmRzPyBCdXQgdGhlIHByb21wdCBzdGF0ZXMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgQVAgY2FyZHMgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIVxuXG5TbyB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeSwgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgdGhlcmUgc29tZSBmYWtlIEFQIGRyaXZlciwgbGlrZSBhIHRlc3RpbmcgdXRpbGl0eT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MjoxNy43NjAyNzExODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTE4NjM2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFrZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MTguMTU5NDY2MDcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTY1NTY0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERldmljZSBEaXNjb3ZlcnkqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gYW55IGRlZXBlciBhbmFseXNpcywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXN0YWJsaXNoIGEgYmFzZWxpbmUuIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGltbWVkaWF0ZSBpbmRpY2F0aW9uIG9mIGEgc29mdHdhcmUgQVAgZGV2aWNlIHByZXNlbnQuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCwgYSBxdWljayBzY2FuIHRvIGRldGVybWluZSB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGludmVzdCBpbiBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIG9yIGFuYWx5c2lzLiBJdCdzIGFib3V0IGVmZmljaWVuY3k7IGlkZW50aWZ5aW5nIGEgc29mdHdhcmUgQVAgY3V0cyBkb3duIHNpZ25pZmljYW50bHkgb24gdGhlIHBvdGVudGlhbCBzY29wZSBvZiB0aGUgcHJvYmxlbSBzcGFjZSwgcGFydGljdWxhcmx5IGlmIEkga25vdyBob3cgdG8gc3BvdCB0aGUgY29tbW9uIGNoYXJhY3RlcmlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MjoyMS41NzYwMjQ0ODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUxNjY5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdHdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUyOjIxLjY4NDU0NjQ5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc0OTMzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmZpb19hcCBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgY2FuIHdlIGJ5cGFzcyB0aGlzIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCBjaGVjaz8gTm9wZSwgdGhhdCdzIGlubGluZSBhc3NlbWJseSwgZXhwbGljaXRseSBsb29raW5nIGZvciBhIHRyYXAuIFNvLCB3aXRob3V0IGFjdHVhbCBBUCBoYXJkd2FyZSwgdGhhdCBjb2RlIGlzIGRlYWQgaW4gdGhlIHdhdGVyLiBXYWl0LCBhbSBJIHVuZGVyc3RhbmRpbmcgYHZmaW9fYXBgIGNvcnJlY3RseT8gSXMgaXQgKmZvciogdGhlIEFQIGhhcmR3YXJlIGl0c2VsZiwgb3IgaXMgaXQgdG8gbWFrZSB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlIHRvIFZNcz8gQWgsIGl0J3MgdGhlIGxhdHRlcjogaXQncyBhIFZGSU8gZHJpdmVyLCB3aGljaCBtZWFucyBpdCBkZW1hbmRzIHJlYWwsIHBoeXNpY2FsIEFQIGhhcmR3YXJlIG9uIHRoZSBob3N0LiBBbmQgc2luY2Ugc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdCDigJMgd2UncmUgdGFsa2luZyBDcnlwdG9FeHByZXNzIGNhcmRzIOKAkyBzeXprYWxsZXIgaW4gYSB0eXBpY2FsIHNldHVwIHdvbid0IGJlIGFibGUgdG8gdG91Y2ggdGhpcyBjb2RlLlxuXG5SaWdodCwgYmFjayB0byB0aGUgcGF0Y2guIEl0J3MgbW9kaWZ5aW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIEJhc2ljYWxseSwgYSBsb2NraW5nIG9yZGVyIGNoYW5nZSB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQncyB0YWtpbmcgYGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW1gICpiZWZvcmUqIGl0IG1lc3NlcyB3aXRoIGBwcWFwX2hvb2tgLiBTb3VuZHMgZmluZSwgZnVuY3Rpb25hbGx5LCBidXQgc3RpbGwgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgQVAgaGFyZHdhcmUuXG5cbk5vdywgaXMgdGhlcmUgKmFueSogc2NlbmFyaW8gd2hlcmUgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBnZXRzIGNhbGxlZCB3aXRob3V0IHRoZSBBUCBoYXJkd2FyZSBiZWluZyBwcmVzZW50PyBCZXR0ZXIgY2hlY2sgYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MjcuMjU5NDgyOTg5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzk4MDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwMzQ9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1MjpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTMte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM2MS1cXHQuaW5pdCA9IHZmaW9fYXBfbWRldl9pbml0X2RldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM2MjpcXHQub3Blbl9kZXZpY2UgPSB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2UsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNjMtXFx0LmNsb3NlX2RldmljZSA9IHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUyOjI3LjMxMzQ3MDM4OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NTIxMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipWZmlvLUFQIERldmljZSBPcGVyYXRpb25zOiBBIFF1aWNrIFJ1bi1UaHJvdWdoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHZmaW9fYXBfbWF0cml4X2Rldl9vcHNgIGlzIGRpcmVjdGx5IHRpZWQgaW50byB0aGUgYHZmaW9fYXBfbWRldl9wcm9iZWAgZnVuY3Rpb24uIFNvLCBlc3NlbnRpYWxseSwgdGhlIGB2ZmlvX2FwX21hdHJpeF9kZXZfb3BzYCBzdHJ1Y3R1cmUgbGlrZWx5IGRlZmluZXMgdGhlIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgdXNlZCB3aGVuIHByb2Jpbmcgb3IgZGlzY292ZXJpbmcgYSBtZWRpYXRlZCBkZXZpY2UgKG1kZXYpIHdpdGhpbiB0aGUgVkZJTy1BUCBjb250ZXh0LlxuXG5UaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlIG5lZWQgYSBkZWZpbmVkIHNldCBvZiBhY3Rpb25zIG9yIGhhbmRsZXJzIOKAkyB0aGF0IGBfZGV2X29wc2Agc3RydWN0dXJlIOKAkyB0byBtYW5hZ2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIEFQIGRldmljZSB3aGVuIGl0J3MgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgZGlzY292ZXJlZC4gVGhlIGBfbWRldl9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvYmluZyBwcm9jZXNzLiBJdCB3b3VsZCBiZSBoaWdobHkgcHJvYmFibGUgdGhhdCBhIHByb2JlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZXNlIHN0cnVjdHVyZXMuIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvZGUgdG8gc2F5IG1vcmUgZm9yIGNlcnRhaW4sIGJ1dCB0aGlzIHNlZW1zIHRoZSBtb3N0IGxpa2VseSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTk1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MzAuNzM3OTk0OTY2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgxNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zNz1zdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfZmluZF9xdWV1ZShpbnQgYXBxbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fYXBfbWF0cml4X2Rldl9vcHM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM5LXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NzkwPXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTUtXFx0bWF0cml4X21kZXYgPSB2ZmlvX2FsbG9jX2RldmljZShhcF9tYXRyaXhfbWRldiwgdmRldiwgXFx1MDAyNm1kZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzk2OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk3LVxcdGlmIChJU19FUlIobWF0cml4X21kZXYpKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdmZpb19xdWV1ZV9hdHRyX2dyb3VwID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNjA6c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM2MS1cXHQuaW5pdCA9IHZmaW9fYXBfbWRldl9pbml0X2RldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MzAuNzk2ODE2Mzc1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTY5MDYzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIHdoZXRoZXIgdGhlIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgZnVuY3Rpb24gY2FuIGV2ZXIgYWN0dWFsbHkgYmUgY2FsbGVkLCBwYXJ0aWN1bGFybHkgaW4gYW4gZW52aXJvbm1lbnQgbGFja2luZyBwaHlzaWNhbCBBUCBoYXJkd2FyZS5cblxuTXkgdHJhaW4gb2YgdGhvdWdodCBnb2VzIGxpa2UgdGhpczogYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgdHJpZ2dlcmVkIGR1cmluZyBtZGV2IGNyZWF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCB0aGUgY3J1Y2lhbCBsaW5rIHNlZW1zIHRvIGJlIHRoZSBtZGV2IHBhcmVudCByZWdpc3RyYXRpb24sIHdoaWNoIGhhcHBlbnMgaW4gYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAuIFRoaXMgZnVuY3Rpb24gaXMgaXRzZWxmIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX2luaXRgLCB3aGljaCB0aGVuIGNoZWNrcyBpZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYC4gVGhlIHJlYWxseSB0ZWxsaW5nIHBhcnQgaXMgdGhhdCBgdmZpb19hcF9pbml0YCBiYWlscyBvdXQgd2l0aCBgLUVOT0RFVmAgaWYgdGhvc2UgQVAgaW5zdHJ1Y3Rpb25zIGFyZW4ndCBhdmFpbGFibGUuIFRoYXQgbWVhbnMgdGhlIHBhcmVudCBkZXZpY2UgcmVnaXN0cmF0aW9uICpuZXZlciogaGFwcGVucyB3aXRob3V0IHRoZSByaWdodCBoYXJkd2FyZS4gQ29uc2VxdWVudGx5LCBubyBtZGV2IGNhbiBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIHBhcmVudCBpcyBuZXZlciByZWdpc3RlcmVkLCB0aGVyZWJ5IGJsb2NraW5nIHRoZSBlbnRpcmUgY2hhaW4uXG5cbk5vdywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlICpldmVyeSogcG9zc2libGUgY2FsbCBwYXRoIHRvIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBgdmZpb19hcF9vcHMuY2AgZmlsZS4gSXRzIG9ubHkgY2FsbGVyIGlzIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgLiBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYCBpcyBvbmx5IGNhbGxlZCB0aHJvdWdoIGB2ZmlvX2RldmljZV9vcHNgLiBUaGF0IGluIHR1cm4gaXMgZXhjbHVzaXZlbHkgdXNlZCBieSBgdmZpb19hcF9tZGV2X3Byb2JlYC4gVGhpcyBwcm9iaW5nIGlzIHBhcnQgb2YgYHZmaW9fYXBfbWF0cml4X2RyaXZlcmAsIHdoaWNoIGlzIGFsc28gcmVnaXN0ZXJlZCBpbiBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYCwgYW5kIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX2luaXRgLiBBcyB3ZSd2ZSBlc3RhYmxpc2hlZCwgdGhlIHBhdGggdGhyb3VnaCBgdmZpb19hcF9pbml0YCBoaW5nZXMgb24gYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAuXG5cbkdpdmVuIHRoYXQgdGhvcm91Z2ggdHJhY2luZywgSSdtIGNvbmZpZGVudCB0aGF0IGl0IGlzIGFic29sdXRlbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBBUCBoYXJkd2FyZS4gU3BlY2lmaWNhbGx5LCB0aGUgQ3J5cHRvRXhwcmVzcyBjYXJkcyBhcmUgcmVxdWlyZWQsIGFuZCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aG9zZS4gVGhlcmVmb3JlLCBJIHdpbGwgcmVzcG9uZCB3aXRoIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhlIGZ1bmN0aW9uIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB1bmRlciB0eXBpY2FsIHZpcnR1YWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc0OSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MzguMDUzNzI1MTk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJQk0gQ3J5cHRvRXhwcmVzcyBjYXJkcyB0byBiZSBwcmVzZW50IG9uIHRoZSBob3N0IChjaGVja2VkIHZpYSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowglcd8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 23:16:01 +0000 UTC FinishedAt: 2026-07-29 23:52:40 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNThiN2FiYmRhMzY1NGU1NDhkNmI3NzE3YmE0YTVlZjVkM2VhNzEwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDIzOjUxOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uYjBhMDM4ZmFhOTNhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMSwyNiAmIzQzOzE4MjEsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiBcdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XG4tXG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRha2luZyB0aGUga3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlXG4mIzQzO1x0XHQgKiBob2xkaW5nIHRoZSB1cGRhdGUgbG9ja3MgKGJlbG93KSBjb3VsZCByZXN1bHQgaW4gYVxuJiM0MztcdFx0ICogZGVhZGxvY2sgY29uZGl0aW9uLCBzbyBsZXQmIzM5O3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZVxuJiM0MztcdFx0ICogY2hlY2sgYW5kIHVwZGF0ZSB0aGUgcHFhcF9ob29rLlxuJiM0MztcdFx0ICovXG4gXHRcdGRvd25fd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4mIzQzO1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuJiM0MztcdFx0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbiBcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdFx0aWYgKG0gIT0gbWF0cml4X21kZXYgXHUwMDI2XHUwMDI2IG0tXHUwMDNla3ZtID09IGt2bSkge1xuLVx0XHRcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuLVxuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNThiN2FiYmRhMzY1NGU1NDhkNmI3NzE3YmE0YTVlZjVkM2VhNzEwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDIzOjUxOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLmIwYTAzOGZhYTkzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTE4MjEsMjYgJiM0MzsxODIxLDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp2ZmlvX2FwX21kZXZfYXR0cl9ncm91cHNbXSA9IHsKIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJCQlzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0Jc3RydWN0IGFwX21hdHJpeF9tZGV2ICptOwotCiAJaWYgKGt2bS0mZ3Q7YXJjaC5jcnlwdG8uY3J5Y2JkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGFraW5nIHRoZSBrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlCiYjNDM7CQkgKiBob2xkaW5nIHRoZSB1cGRhdGUgbG9ja3MgKGJlbG93KSBjb3VsZCByZXN1bHQgaW4gYQomIzQzOwkJICogZGVhZGxvY2sgY29uZGl0aW9uLCBzbyBsZXQmIzM5O3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZQomIzQzOwkJICogY2hlY2sgYW5kIHVwZGF0ZSB0aGUgcHFhcF9ob29rLgomIzQzOwkJICovCiAJCWRvd25fd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiYjNDM7CQlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2spIHsKJiM0MzsJCQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKJiM0MzsJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwkJfQogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9ICZhbXA7bWF0cml4X21kZXYtJmd0O3BxYXBfaG9vazsKIAkJdXBfd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiAKIAkJZ2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewotCQkJaWYgKG0gIT0gbWF0cml4X21kZXYgJmFtcDsmYW1wOyBtLSZndDtrdm0gPT0ga3ZtKSB7Ci0JCQkJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCX0KLQogCQlrdm1fZ2V0X2t2bShrdm0pOwogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0ga3ZtOwogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwotCiAJCXJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcnlwdG8gRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgd2l0aGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiAgSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQmIzM5O3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRvIHMzOTAsIHNwZWNpZmljYWxseSBmb3IgdGhlIFZGSU8gQVAgKGNyeXB0bykgbWRldi4gIE15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cD8gSSBrbm93IHMzOTB4IGNhbiBiZSBlbXVsYXRlZCwgYnV0IGRvZXMgUUVNVSBoYXZlIHRoZSBmdWxsIFZGSU8gQVAgc3Rvcnk/CgpSaWdodCwgVkZJTyBBUCB1c3VhbGx5IGRlcGVuZHMgb24gZWl0aGVyIGFjdHVhbCBwaHlzaWNhbCBBUCBoYXJkd2FyZSBvciBzb21lIHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiAgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgczM5MHggVkZJTyBBUCBpcyBhICpkcml2ZXIqIGZvciBBUCBtYXRyaXggZGV2aWNlcy4gIFNvLCB0aGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzOiBpcyB0aGlzIGV2ZW4gcmVtb3RlbHkgZnV6emFibGU/ICBHZW5lcmFsbHksIHRoZXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkcml2ZXJzIGFyZSBhIHBhaW4gdG8gZnV6eiB1bmxlc3Mgd2UmIzM5O3JlIGFjdHVhbGx5IG9uIHMzOTB4LgoKQnV0Li4uc3l6a2FsbGVyICpkb2VzKiBmdXp6IHMzOTB4LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gTm93LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IHNheXMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gQWgsIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBBUCBtYXRyaXggZGV2aWNlcz8KCkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgVkZJT19BUGAgY2FuIGJlIGVuYWJsZWQuIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGluIEtjb25maWcgZm9yIGBWRklPX0FQYC4gVGhhdCBzaG91bGQgbGVhZCBtZSB0byB0aGUgYW5zd2VyLCBhbmQgd2hldGhlciBvciBub3QgSSBzaG91bGQgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlZGSU9fQVAgS2NvbmZpZyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciB0aGUganVndWxhciDigJMgZmluZCBldmVyeSBpbnN0YW5jZSBvZiBgVkZJT19BUGAgYWNyb3NzIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkLCB3aGF0IGl0IGRlcGVuZHMgb24sIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gVGhpcyBtZWFucyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBLY29uZmlnIGVudHJpZXMgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWw7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBvcHRpb25zIEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yPyBUaGUgZ29hbHMgaGVyZSBhcmUgdG8gZmluZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgYWxzbyB0aGUgbG9jYXRpb24gaW4gdGhlIGNvZGUgYmFzZSBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIHNlYXJjaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWc9ODIzPWNvbmZpZyBWRklPX0NDV1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxuYXJjaC9zMzkwL0tjb25maWctODM1LVx0ZGVmX3RyaXN0YXRlIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBWRklPX0FQYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIHN1cHBvcnQgZWNvc3lzdGVtIGZvciBgVkZJT19BUGA/JiMzNDsuIEkga25vdyB0aGUgYmFzaWMgVkZJTyBpbmZyYXN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgdG8gcHJvcGVybHkgZ3Jhc3AgaXRzIGltcGxpY2F0aW9ucy4gVGhpcyBtZWFucyBJJiMzOTttIG5vdCBqdXN0IGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBtb2R1bGVzOyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1c2VyLXNwYWNlIGxpYnJhcmllcywgZmlybXdhcmUgaW50ZXJhY3Rpb25zLCBhbmQgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBpZiBhbnksIHRoYXQgY29tZSBhbG9uZyBmb3IgdGhlIHJpZGUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBXaGVyZSBkb2VzIGBWRklPX0FQYCBmaXQgaW4sIGZyb20gYSBob2xpc3RpYyBwZXJzcGVjdGl2ZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzA6XHRcbiA4MzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cbiA4MzM6XHRcbiA4MzQ6XHRjb25maWcgVkZJT19BUFxuIDgzNTpcdFx0ZGVmX3RyaXN0YXRlIG5cbiA4MzY6XHRcdHByb21wdCBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcJiMzNDtcbiA4Mzc6XHRcdGRlcGVuZHMgb24gS1ZNXG4gODM4Olx0XHRkZXBlbmRzIG9uIFZGSU9cbiA4Mzk6XHRcdGRlcGVuZHMgb24gQVBcbiA4NDA6XHRcdHNlbGVjdCBWRklPX01ERVZcbiA4NDE6XHRcdGhlbHBcbiA4NDI6XHRcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcbiA4NDM6XHRcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXG4gODQ0Olx0XG4gODQ1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA4NDY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cbiA4NDc6XHRcbiA4NDg6XHRlbmRtZW51XG4gODQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0JiMzOTtzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQmIzM5O3MgdW5wYWNrIHRoaXMuIFRoZSBjb3JlIG9mIHRoaXMgaXNzdWUgaGluZ2VzIG9uIHRoaXMgdmFyaWFibGUsIGBBUGAuIFRoZSBiZWhhdmlvciwgdGhlIG91dGNvbWUsIHRoZSAqd2hvbGUgZGFtbiB0aGluZyogaXMgY29udGluZ2VudCBvbiBpdHMgc3RhdGUuIFNvLCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGNsYXJpZnkgcHJlY2lzZWx5IHdoYXQgYEFQYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gV2hhdCBhcmUgaXRzIHBvdGVudGlhbCB2YWx1ZXM/IElzIGl0IGEgc2luZ2xlIHZhbHVlLCBhIHJhbmdlLCBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZT8gVW5kZXJzdGFuZGluZyBgQVBgIGlzIGFic29sdXRlbHkgcGFyYW1vdW50LiBObyBvdGhlciBhbmFseXNpcyBjYW4gcHJvY2VlZCB1bnRpbCBJIGhhdmUgYSBmaXJtIGdyYXNwIG9mIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHRoZSBkb21haW4gb2YgYEFQYCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gc3RhcnQgbXkgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdD0yODc9dG8gaW5pdHJkIGltYWdlLCB1c2VyIGNhbiBub3RpY2UgaXQgYmVmb3JlIGJvb3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0OjI5MDpCb290Y29uZmlnIEFQSXNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QtMjkxLT09PT09PT09PT09PT09PVxuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmU9Mjk9Y29uZmlnIE1BQ1xuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lOjQxOmNvbmZpZyBBUE9MTE9cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDItXHRib29sIFwmIzM0O0Fwb2xsbyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZz0yOTE9Y29uZmlnIDQ3NkZQRVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZzoyOTU6Y29uZmlnIEFQTTgyMXh4XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnLTI5Ni1cdGJvb2xcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03ODU9Y29uZmlnIEVBRE1fU0NIXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNzk1LVxuYXJjaC9zMzkwL0tjb25maWc6Nzk2OmNvbmZpZyBBUFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MDk6Y29uZmlnIEFQX0RFQlVHXG5hcmNoL3MzOTAvS2NvbmZpZy04MTAtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9ODg1PWNvbmZpZyBDTU1fSVVDVlxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTg5Mi1cbmFyY2gvczM5MC9LY29uZmlnOjg5Mzpjb25maWcgQVBQTERBVEFfQkFTRVxuYXJjaC9zMzkwL0tjb25maWctODk0LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cbmFyY2gvczM5MC9LY29uZmlnOjkwOTpjb25maWcgQVBQTERBVEFfTUVNXG5hcmNoL3MzOTAvS2NvbmZpZy05MTAtXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkyNS1cbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcbmFyY2gvczM5MC9LY29uZmlnLTkyNy1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTQwLVxuYXJjaC9zMzkwL0tjb25maWc6OTQxOmNvbmZpZyBBUFBMREFUQV9ORVRfU1VNXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNzQ0LVxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDYtXHR0cmlzdGF0ZSBcJiMzNDtBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cbmFyY2gveDg2L0tjb25maWctMjgwMC1cbmFyY2gveDg2L0tjb25maWc6MjgwMTpjb25maWcgQVBNX0lHTk9SRV9VU0VSX1NVU1BFTkRcbmFyY2gveDg2L0tjb25maWctMjgwMi1cdGJvb2wgXCYjMzQ7SWdub3JlIFVTRVIgU1VTUEVORFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjgwNy1cbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxuYXJjaC94ODYvS2NvbmZpZy0yODA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgUE0gYXQgYm9vdCB0aW1lXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxuYXJjaC94ODYvS2NvbmZpZzoyODI1OmNvbmZpZyBBUE1fQ1BVX0lETEVcbmFyY2gveDg2L0tjb25maWctMjgyNi1cdGRlcGVuZHMgb24gQ1BVX0lETEVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzYtXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzgtXHRib29sIFwmIzM0O0VuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjg0OS1cbmFyY2gveDg2L0tjb25maWc6Mjg1MDpjb25maWcgQVBNX0FMTE9XX0lOVFNcbmFyY2gveDg2L0tjb25maWctMjg1MS1cdGJvb2wgXCYjMzQ7QWxsb3cgaW50ZXJydXB0cyBkdXJpbmcgQVBNIEJJT1MgY2FsbHNcJiMzNDtcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZz0yMTM9Y29uZmlnIFhJTElOWF9IV0lDQVBcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyMjM6Y29uZmlnIEFQUExJQ09NXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjQtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsaWNvbSBpbnRlbGxpZ2VudCBmaWVsZGJ1cyBjYXJkIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc9MjkwPWNvbmZpZyBRQ09NX0NMS19SUE1IXG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZzoyOTk6Y29uZmlnIEFQUV9HQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgR2xvYmFsIENsb2NrIENvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzA3LVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjMwODpjb25maWcgQVBRX01NQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgTXVsdGltZWRpYSBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEvS2NvbmZpZz03OD1jb25maWcgQU1DQ19QUEM0NDBTUEVfQURNQVxuLS1cbmRyaXZlcnMvZG1hL0tjb25maWctODctXG5kcml2ZXJzL2RtYS9LY29uZmlnOjg4OmNvbmZpZyBBUFBMRV9BRE1BQ1xuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEFETUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnPTE1ND1jb25maWcgRUZJX0RFVl9QQVRIX1BBUlNFUlxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU2LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZzoxNTc6Y29uZmlnIEFQUExFX1BST1BFUlRJRVNcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtBcHBsZSBEZXZpY2UgUHJvcGVydGllc1wmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc9NjY9Y29uZmlnIEFMMzMyMEFcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTc1LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo3Njpjb25maWcgQVBEUzkxNjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTE2MCBjb21iaW5lZCBhbHMgYW5kIHByb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg2LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclwmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjk3OmNvbmZpZyBBUERTOTMwNlxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy05OC1cdHRyaXN0YXRlIFwmIzM0O0F2YWdvIEFQRFM5MzA2IEFtYmllbnQgTGlnaHQgU2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy0xMDgtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjEwOTpjb25maWcgQVBEUzk5NjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7QXZhZ28gQVBEUzk5NjAgZ2VzdHVyZS9SR0IvQUxTL3Byb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWc9Mjk2PWNvbmZpZyBTUEFQUl9UQ0VfSU9NTVVcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWctMzAzLVxuZHJpdmVycy9pb21tdS9LY29uZmlnOjMwNDpjb25maWcgQVBQTEVfREFSVFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIERBUlQgSU9NTVUgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnPTc4OD1jb25maWcgSVJRX0lEVDMyNDNYXG4tLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctNzkyLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc6NzkzOmNvbmZpZyBBUFBMRV9BSUNcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cdGJvb2wgXCYjMzQ7QXBwbGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFJQylcJiMzNDtcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0zMjc9Y29uZmlnIFNHSV9HUlVfREVCVUdcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL21pc2MvS2NvbmZpZzozMzQ6Y29uZmlnIEFQRFM5ODAyQUxTXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXHR0cmlzdGF0ZSBcJiMzNDtNZWRmaWVsZCBBdmFnbyBBUERTOTgwMiBBTFMgU2Vuc29yIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZz0xMDY9Y29uZmlnIE5FMktfUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxMjQ6Y29uZmlnIEFQTkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDtQQ01DSUEgTkUyMDAwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jPTMzMjA9c3RhdGljIGludCBydHc4OV9wY2lfY2ZnX2RhYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYzozMzMzOlx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jLTMzMzQtXHRyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSVFc4OV9QQ0lFX0wxX0NUUkwsIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjUzPWNvbmZpZyBNQVJWRUxMX0NOMTBLX1RBRF9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNTktXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjA6Y29uZmlnIEFQUExFX00xX0NQVV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cdGJvb2wgXCYjMzQ7QXBwbGUgTTEgQ1BVIFBNVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZz0xOTQ9Y29uZmlnIEFEVl9TV0JVVFRPTlxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA0LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZzoyMDU6Y29uZmlnIEFQUExFX0dNVVhcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgR211eCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc9Mz1pZiBBUkNIX0FQUExFIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc6NTpjb25maWcgQVBQTEVfUE1HUl9QV1JTVEFURVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O0FwcGxlIFNvQyBQTUdSIHBvd2VyIHN0YXRlIGNvbnRyb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTE4PWNvbmZpZyBQT1dFUl9TVVBQTFlfSFdNT05cbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZzozMTpjb25maWcgQVBNX1BPV0VSXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7QVBNIGVtdWxhdGlvbiBmb3IgY2xhc3MgYmF0dGVyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZz01PW1lbnUgXCYjMzQ7QXBwbGUgU29DIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNi1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6Nzpjb25maWcgQVBQTEVfTUFJTEJPWFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgU29DIG1haWxib3hlc1wmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMTgtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzozMTpjb25maWcgQVBQTEVfU0FSVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNBUlQgRE1BIGFkZHJlc3MgZmlsdGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy00MC1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6NDE6Y29uZmlnIEFQUExFX1RVTkFCTEVcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNTgtXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O0Zhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcJiMzNDtHcmFwaGljcyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cbmRyaXZlcnMvdmlkZW8vS2NvbmZpZzo4OmNvbmZpZyBBUEVSVFVSRV9IRUxQRVJTXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctOS1cdGJvb2xcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9MTExMT1jb25maWcgTVNDMzEzRV9XQVRDSERPR1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTIyLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMjM6Y29uZmlnIEFQUExFX1dBVENIRE9HXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNvQyB3YXRjaGRvZ1wmIzM0O1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz0xNjUyPXhmc19mc19maWxsX3N1cGVyKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY0LVx0ICogaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gY29tcGxldGVkIGJ5IGVpdGhlciB0aGUgb2xkIG1vdW50IEFQSSBvclxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XHQgKiB0aGUgbmV3ZXIgZnNvcGVuL2ZzY29uZmlnIEFQSS5cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY2LVx0ICovXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWc9MzEwPWNvbmZpZyBQTV9UUkFDRV9SVENcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zMjctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozMjg6Y29uZmlnIEFQTV9FTVVMQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cdHRyaXN0YXRlIFwmIzM0O0FkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBzMzkwIEtjb25maWcqKgoKT2theSwgaGVyZSB3ZSBnby4gVGhlIHByb21wdCBpbmRpY2F0ZXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzk2IG9mIGl0cyBgS2NvbmZpZ2AgZmlsZS4gVGhlIHRyaWdnZXIgaXMgYGFyY2gvczM5MC9LY29uZmlnOjc5Njpjb25maWcgQVBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG9wZW4gdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgem9vbSByaWdodCBpbiBvbiB0aGF0IGxpbmUuIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgbmFtZWQgYEFQYCwgYW5kIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoYXRldmVyIHRoaXMgY29udGV4dCByZXF1aXJlcy4gSSBuZWVkIHRvIHNlZSB3aGF0IGBBUGAgaXMgZGVmaW5lZCBhcywgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGhlbHAgdGV4dCBzYXlzLiBUaGF0JiMzOTtsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBvciB0cm91Ymxlc2hvb3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgRUFETSBzdWJjaGFubmVscy4gRUFETSBzdWJjaGFubmVscyBhY3RcbiA3OTE6XHRcdCAgYXMgYSBjb21tdW5pY2F0aW9uIHZlaGljbGUgZm9yIFNDTSBpbmNyZW1lbnRzLlxuIDc5MjpcdFxuIDc5MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3OTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxuIDc5NTpcdFxuIDc5NjpcdGNvbmZpZyBBUFxuIDc5NzpcdFx0ZGVmX3RyaXN0YXRlIHlcbiA3OTg6XHRcdHByb21wdCBcJiMzNDtTdXBwb3J0IGZvciBBZGp1bmN0IFByb2Nlc3NvcnMgKGFwKVwmIzM0O1xuIDc5OTpcdFx0aGVscFxuIDgwMDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxuIDgwMTpcdFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxuIDgwMjpcdFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cbiA4MDM6XHRcbiA4MDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODA1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhcC5cbiA4MDY6XHRcbiA4MDc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSAoZGVmYXVsdCkuXG4gODA4Olx0XG4gODA5Olx0Y29uZmlnIEFQX0RFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBBZGp1bmN0IFByb2Nlc3NvciBFbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gJiMzNDtBUCwmIzM0OyB3aGljaCBJIGtub3cgc3RhbmRzIGZvciAmIzM0O1N1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycywmIzM0OyByZWZlcnJpbmcgc3BlY2lmaWNhbGx5IHRvIHRob3NlIENyeXB0b0V4cHJlc3MgQ2FyZHMgKENFWCkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGNhbiBJIGVtdWxhdGUgdGhpcyBlbnZpcm9ubWVudCB3aXRoaW4gUUVNVT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIGEgYHZmaW8tYXBgIGRldmljZSB3aXRoaW4gUUVNVSwgYnV0IEkga25vdyB0aGF0IHJlcXVpcmVzIFZGSU8gb24gdGhlIGhvc3QgaGFyZHdhcmUuIFRoYXQmIzM5O3MgYSBodXJkbGUuCgpOb3csIEkgd29uZGVyLCBkb2VzIHN5emthbGxlciBwcm92aWRlIGEgdGVzdGluZyBhdmVudWUgZm9yIHRoaXM/IEl0IHJ1bnMgb24gczM5MHgsIGFuZCBkb2VzIGl0IHVzZSBwaHlzaWNhbCBBUCBkZXZpY2VzPyBOb3JtYWxseSBzeXprYWxsZXIgaW5zdGFuY2VzIHJ1biBvbiBHQ0Ugb3IgUUVNVS4gQnV0IEdDRSBkb2VzbiYjMzk7dCBoYXZlIHMzOTB4LiBTbyBpdCYjMzk7cyBwcm9iYWJseSBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCBBUCBkZXZpY2VzPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBkaWdnaW5nLgoKUGVyaGFwcyB0aGVyZSYjMzk7cyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQVAgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIElzIHRoZXJlIHNvbWUga2luZCBvZiAmIzM0O2Zha2UmIzM0OyBBUCBkZXZpY2UgZHJpdmVyPyBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG8vYCBkaXJlY3RvcnkgYW5kIHNlZSBpZiBhbnl0aGluZyBsaWtlIGBhcF9kZXZpY2VgIG9yIGBhcF9tYXRyaXhfbWRldmAgc2hvd3MgdXAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YXBfYnVzLmMmIzM0OywKICAgICYjMzQ7YXBfYnVzLmgmIzM0OywKICAgICYjMzQ7YXBfY2FyZC5jJiMzNDssCiAgICAmIzM0O2FwX2RlYnVnLmgmIzM0OywKICAgICYjMzQ7YXBfcXVldWUuYyYjMzQ7LAogICAgJiMzNDtwa2V5X2FwaS5jJiMzNDssCiAgICAmIzM0O3BrZXlfYmFzZS5jJiMzNDssCiAgICAmIzM0O3BrZXlfYmFzZS5oJiMzNDssCiAgICAmIzM0O3BrZXlfY2NhLmMmIzM0OywKICAgICYjMzQ7cGtleV9lcDExLmMmIzM0OywKICAgICYjMzQ7cGtleV9wY2ttby5jJiMzNDssCiAgICAmIzM0O3BrZXlfc3lzZnMuYyYjMzQ7LAogICAgJiMzNDtwa2V5X3V2LmMmIzM0OywKICAgICYjMzQ7dmZpb19hcF9kZWJ1Zy5oJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfZHJ2LmMmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vcHMuYyYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX3ByaXZhdGUuaCYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfYXBpLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2FwaS5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9jYXJkLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2NjYV9rZXkuaCYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfY2NhbWlzYy5jJiMzNDssCiAgICAmIzM0O3pjcnlwdF9jY2FtaXNjLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJhLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJhLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJjLmMmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDJjLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X2NleDQuYyYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfY2V4NC5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9kZWJ1Zy5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9lcDExbWlzYy5jJiMzNDssCiAgICAmIzM0O3pjcnlwdF9lcDExbWlzYy5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9lcnJvci5oJiMzNDssCiAgICAmIzM0O3pjcnlwdF9tc2d0eXBlNTAuYyYjMzQ7LAogICAgJiMzNDt6Y3J5cHRfbXNndHlwZTUwLmgmIzM0OywKICAgICYjMzQ7emNyeXB0X21zZ3R5cGU2LmMmIzM0OywKICAgICYjMzQ7emNyeXB0X21zZ3R5cGU2LmgmIzM0OywKICAgICYjMzQ7emNyeXB0X3F1ZXVlLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIHZmaW9fYXBfbWRldl9zZXRfa3ZtIENhbGwqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIHNlZSBwcmVjaXNlbHkgKmhvdyogdGhhdCBmdW5jdGlvbiBnZXRzIGludm9rZWQuIFNvLCB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBpcyBgdmZpb19hcF9kcnYuY2AuIFRoYXQgZmlsZSBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGRyaXZlci1sZXZlbCBjb2RlIGZvciB0aGUgVkZJTy1BUCAoQWNjZWxlcmF0ZWQgUHJvY2Vzc2luZykgZGV2aWNlIHJlc2lkZXMsIGFuZCB0aHVzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNhbGwuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzZXR1cCBmb3IgS1ZNIGludGVncmF0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhpcyBBUCBkZXZpY2UuIEV4YW1pbmluZyB0aGF0IGZpbGUgc2hvdWxkIHJldmVhbCB0aGUgY2FsbGluZyBjb250ZXh0LCBpbnB1dCBhcmd1bWVudHMsIGFuZCBpZGVhbGx5LCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoZW4gYW5kIHdoeSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNvbnNpZGVyZWQgbmVjZXNzYXJ5LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlbGluZSBuZWVkZWQgdG8gYW5hbHl6ZSBhbnkgZnVydGhlciByZWxhdGVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9zZXRfa3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE4MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODExLS8qKlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4MTI6ICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgxMy0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODIwLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4MjE6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjItXHRcdFx0XHRzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNTI9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDU5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNjA6XHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXHUwMDNla3ZtKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGB2ZmlvX2FwYCBNZWRpYXRlZCBEZXZpY2UgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNhbGwgb3JpZ2luYXRpbmcgZnJvbSBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGV2ZW4gcmVsZXZhbnQgd2l0aG91dCBhY3R1YWwgQVAgKEFwcGxpY2F0aW9uIFByb2Nlc3NvcikgaGFyZHdhcmUgcHJlc2VudC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZmlyc3QgcXVlc3Rpb24gdG8gYW5zd2VyLiBHaXZlbiB0aGF0IHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBWRklPIEFQLCB3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIG9mIGhvdyB0aGVzZSBtZWRpYXRlZCBkZXZpY2VzIGFyZSBzZXQgdXAuIEkmIzM5O2xsIGRpdmUgaW50byBgdmZpb19hcF9kcnYuY2Agbm93LiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgbWRldiAobWVkaWF0ZWQgZGV2aWNlKSBpcyBjcmVhdGVkIGFuZCB3aGF0IHRoZSBjcmVhdGlvbiBwcm9jZXNzIGVudGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NTk6XHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NjA6XHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MTpcdC5pbl91c2UgPSB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYyLVx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxMTI6XHRtdXRleF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTEzOlx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExNC1cdG11dGV4X2luaXQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4OTpcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE5MC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MjAwPXN0YXRpYyB2b2lkIF9fZXhpdCB2ZmlvX2FwX2V4aXQodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDEte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjIwMjpcdHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjAzLVx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgbWRldiBEcml2ZXIgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBNdWx0aS1kZXZpY2UgKG1kZXYpIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVkZJTyAoVmlydHVhbCBGdW5jdGlvbiBJL08pIEFkdmFuY2VkIFBsYXRmb3JtIChBUCkgY29udGV4dC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGhvb2tzIGludG8gdGhlIHN5c3RlbS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvY2F0aW9uIGFuZCB3aGF0JiMzOTtzIGluY2x1ZGVkLiBJ4oCZbGwgY2hlY2sgd2hlcmUgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgaXMgZGVmaW5lZDsgaXQgc2hvdWxkIGJlIGluc2lkZSBgdmZpb19hcF9vcHMuY2AuIFRoYXTigJlzIHdoZXJlIHRoZSBjb3JlIG9wZXJhdGlvbnMgZm9yIHRoZSBWRklPLUFQIGltcGxlbWVudGF0aW9uIHR5cGljYWxseSByZXNpZGUsIHNvIHRoaXMgY29uZmlybXMgdGhhdCYjMzk7cyB0aGUgcGxhY2UgdG8gbG9vayBmb3IgZGV0YWlscyBhYm91dCB0aGUgbWRldiByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEFQIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzczPXN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19hcF9tYXRyaXhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzg1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzODY6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJIGtub3cgdGhlIFZGcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoaXMgd29ya3MsIHNvIEkmIzM5O20gZ29pbmcgdG8ga2VlcCB0aGF0IGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgbWluZC4KCioqVW5kZXJzdGFuZGluZyB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIqKgoKUmlnaHQsIHNvIHRoaXMgbG9va3MgbGlrZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJpbmcgYSBtZWRpYXRlZCBkZXZpY2Ugd2l0aCB0aGUgQVAgKEFwcGxpY2F0aW9uIFByb2Nlc3NvcikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBnZXRzIGFjcXVhaW50ZWQgd2l0aCB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUuIEl0JiMzOTtzIHRoZSBvbmJvYXJkaW5nIHByb2Nlc3MsIGlmIHlvdSB3aWxsLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQgaGVyZSDigJMgcHJlc3VtYWJseSwgc3RydWN0dXJlcyBob2xkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UmIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgcGh5c2ljYWwgYmFja2luZywgYW5kIHRoZSBWRklPIGNvbnRleHQgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB0aGUgbWVkaWF0ZWQgZGV2aWNlIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gdGllcyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBkZXZpY2UgcGFzc3Rocm91Z2guIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQ/IFN5bmNocm9uaXphdGlvbiBpcyBhbHdheXMgaW1wb3J0YW50IGluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhcyB3ZWxsOyB3aGF0IGhhcHBlbnMgd2hlbiByZWdpc3RyYXRpb24gZmFpbHMsIGFuZCBob3cgZG9lcyB0aGUgc3lzdGVtIHJlY292ZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSBhbnkgbmVjZXNzYXJ5IHNldHVwIGZvciBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBpcyBpbml0aWFsaXplZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB0aWVzIGludG8gdGhlIGV4aXN0aW5nIFZGSU8gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM4MDpcdFx0XHQuZGV2X2dyb3VwcyA9IHZmaW9fYXBfbWRldl9hdHRyX2dyb3VwcyxcbjIzODE6XHRcdH0sXG4yMzgyOlx0XHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmUsXG4yMzgzOlx0XHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcbjIzODQ6XHR9O1xuMjM4NTpcdFxuMjM4NjpcdGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcbjIzODc6XHR7XG4yMzg4Olx0XHRpbnQgcmV0O1xuMjM4OTpcdFxuMjM5MDpcdFx0cmV0ID0gbWRldl9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyKTtcbjIzOTE6XHRcdGlmIChyZXQpXG4yMzkyOlx0XHRcdHJldHVybiByZXQ7XG4yMzkzOlx0XG4yMzk0Olx0XHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZS5zeXNmc19uYW1lID0gVkZJT19BUF9NREVWX1RZUEVfSFdWSVJUO1xuMjM5NTpcdFx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGUucHJldHR5X25hbWUgPSBWRklPX0FQX01ERVZfTkFNRV9IV1ZJUlQ7XG4yMzk2Olx0XHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZXMgPSBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZTtcbjIzOTc6XHRcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlcGFyZW50LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSxcbjIzOTg6XHRcdFx0XHRcdCAgIFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcixcbjIzOTk6XHRcdFx0XHRcdCAgIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlcywgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjQ3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBNYXRyaXggRGV2aWNlIENvbnRleHQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBpbmRpY2F0aW5nIGFuIG1kZXYgcGFyZW50IGFzc29jaWF0aW9uIG9uIGBtYXRyaXhfZGV2LSZndDtkZXZpY2VgLiBUaGF0JiMzOTtzIHRoZSBrZXkgbGluZSwgY2xlYXJseSBsaW5raW5nIHRoZSBtYXRyaXggZGV2aWNlIHN0cnVjdHVyZSB0byBhIHBhcmVudCBtZGV2IGNvbnRleHQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhpcyBgbWF0cml4X2RldmAgc3RydWN0dXJlICphY3R1YWxseSogaW5zdGFudGlhdGVkPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBpdHMgY3JlYXRpb24gcG9pbnQuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIHBvcHVsYXRlZCwgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyZWQgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRldmljZSBsaWZlY3ljbGUgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLiBUaGlzIGxvb2tzIGxpa2UgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSBzeXN0ZW0sIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIGRlZXBlciBhbmQgZmluZCBpdCYjMzk7cyBvcmlnaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hdHJpeF9kZXYgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9Njc9c3RhdGljIHZvaWQgdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy03MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo3MTpcdG1hdHJpeF9kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X2RldiwgZGV2aWNlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy03Mi1cdGtmcmVlKG1hdHJpeF9kZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6OTk6XHRtYXRyaXhfZGV2ID0ga3phbGxvY19vYmooKm1hdHJpeF9kZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEwMC1cdGlmICghbWF0cml4X2Rldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE1NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24g4oCTIGl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFZGSU8gaGFuZGxlcyB0aGUgY29tcGxleCB0b3BvbG9neSBvZiBhdHRhY2hlZCBkZXZpY2VzIGFuZCBhY2Nlc3MgcG9pbnRzLiBJIG5lZWQgdG8ga2VlcCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgZGV2aWNlIGluIG1pbmQgd2hpbGUgZ29pbmcgdGhyb3VnaCBpdC4KCioqTXkgQXBwcm9hY2ggdG8gYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgKioKClJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duIHN0ZXAtYnktc3RlcC4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSB0aGUgYHZmaW9fYXBfbWF0cml4X2RldmljZWAgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhY2Nlc3MgcG9pbnQgKEFQKSBhbmQgYXR0YWNoZWQgZGV2aWNlIHJlbGF0aW9uc2hpcHMgYXJlIGVzdGFibGlzaGVkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZSwgYW5kIHRoZSBjaGVja3MgaXQgcGVyZm9ybXMuIFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZhcmlvdXMgZmllbGRzIGhlcmUgaXMgcGFyYW1vdW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBWRklPIEFQSSBlbmZvcmNlcyB0aG9zZSBmdW5kYW1lbnRhbCBkZXZpY2UgcmVsYXRpb25zaGlwcywgaG93IGl0IGlzIHN0b3JlZCwgYW5kIGFueSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGl0IG1pZ2h0IGJlIGd1YXJkaW5nIGFnYWluc3QsIHN1Y2ggYXMgb3ZlcmxhcHBpbmcgcmVzb3VyY2VzIG9yIGNvbmZsaWN0aW5nIGFjY2VzcyBtYXBwaW5ncy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJ4oCZbGwgYWxzbyBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEFueSBjbGV2ZXIgYml0LW1hbmlwdWxhdGlvbiwgaGFzaCBmdW5jdGlvbiB1c2FnZSBvciBvdGhlciBlZmZpY2llbnQgbG9va3VwcyB0aGUgY29kZSBlbXBsb3lzIHdpbGwgc3RhbmQgb3V0IHRvIG1lLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBkZXZpY2UgbWF0cml4IGlzIGNvbnN0cnVjdGVkIGFuZCBtYWludGFpbmVkIGZyb20gdGhlIG1vbWVudCB0aGUgVkZJTyBjb3JlIGlzIHRvbGQgdG8gY3JlYXRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODY6XHRzdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbiAgODc6XHR7XG4gIDg4Olx0XHRpbnQgcmV0O1xuICA4OTpcdFx0c3RydWN0IGRldmljZSAqcm9vdF9kZXZpY2U7XG4gIDkwOlx0XG4gIDkxOlx0XHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcbiAgOTI6XHRcdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxuICA5MzpcdFx0XHRyZXR1cm4gUFRSX0VSUihyb290X2RldmljZSk7XG4gIDk0Olx0XG4gIDk1Olx0XHRyZXQgPSBidXNfcmVnaXN0ZXIoXHUwMDI2bWF0cml4X2J1cyk7XG4gIDk2Olx0XHRpZiAocmV0KVxuICA5NzpcdFx0XHRnb3RvIGJ1c19yZWdpc3Rlcl9lcnI7XG4gIDk4Olx0XG4gIDk5Olx0XHRtYXRyaXhfZGV2ID0ga3phbGxvY19vYmooKm1hdHJpeF9kZXYpO1xuIDEwMDpcdFx0aWYgKCFtYXRyaXhfZGV2KSB7XG4gMTAxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTAyOlx0XHRcdGdvdG8gbWF0cml4X2FsbG9jX2VycjtcbiAxMDM6XHRcdH1cbiAxMDQ6XHRcbiAxMDU6XHRcdC8qIEZpbGwgaW4gY29uZmlnIGluZm8gdmlhIFBRQVAoUUNJKSwgaWYgYXZhaWxhYmxlICovXG4gMTA2Olx0XHRpZiAodGVzdF9mYWNpbGl0eSgxMikpIHtcbiAxMDc6XHRcdFx0cmV0ID0gYXBfcWNpKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlaW5mbyk7XG4gMTA4Olx0XHRcdGlmIChyZXQpXG4gMTA5Olx0XHRcdFx0Z290byBtYXRyaXhfYWxsb2NfZXJyO1xuIDExMDpcdFx0fVxuIDExMTpcdFxuIDExMjpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIDExMzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuIDExNDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiAxMTU6XHRcbiAxMTY6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7JXNcJiMzNDssIFZGSU9fQVBfREVWX05BTUUpO1xuIDExNzpcdFx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XG4gMTE4Olx0XHRtYXRyaXhfZGV2LVx1MDAzZWRldmljZS5idXMgPSBcdTAwMjZtYXRyaXhfYnVzO1xuIDExOTpcdFx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucmVsZWFzZSA9IHZmaW9fYXBfbWF0cml4X2Rldl9yZWxlYXNlO1xuIDEyMDpcdFx0bWF0cml4X2Rldi1cdTAwM2V2ZmlvX2FwX2RydiA9IFx1MDAyNnZmaW9fYXBfZHJ2O1xuIDEyMTpcdFxuIDEyMjpcdFx0cmV0ID0gZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlKTtcbiAxMjM6XHRcdGlmIChyZXQpXG4gMTI0Olx0XHRcdGdvdG8gbWF0cml4X3JlZ19lcnI7XG4gMTI1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk15IFVuZGVyc3RhbmRpbmcgb2YgdGhlIE1hdHJpeCBEZXZpY2UgYW5kIFZGSU8tQVAgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIGBtYXRyaXhfZGV2YCBpcyBlc3RhYmxpc2hlZCBhcyB0aGUgZnVuZGFtZW50YWwgcm9vdCBkZXZpY2UuIEFuZCBpdCYjMzk7cyBzZXQgdXAgdG8gbWFuYWdlIHRoZSBtZGV2cy4gQ29vbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7dmUgZ290IGEgZnJhbWV3b3JrIGhlcmUuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHJlZ2lzdGVyIGFuIG1kZXYgcGFyZW50IG9uIGl0LCB3aGljaCBtZWFucyB3ZSYjMzk7bGwgYmUgYWJsZSB0byBjcmVhdGUgb3VyIG1kZXZzIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCYjMzk7cyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gRWFzaWVyIHRvIG1hbmFnZSwgc2NyaXB0LCBhbmQgdW5kZXJzdGFuZC4gSSBsaWtlIHRoYXQuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoaXMuIFRoYXQgYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgZ2V0dGluZyBjYWxsZWQgZHVyaW5nIGB2ZmlvX2FwX2luaXRgLiBPa2F5LCBzbyB0aGUgbWF0cml4IGRldmljZSBpcyBjcmVhdGVkIGFzIHBhcnQgb2YgdGhlIFZGSU8tQVAgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoYXQgY2xhcmlmaWVzIHRoZSB0aW1lbGluZS4gSXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gZ2V0dGluZyB0aGUgd2hvbGUgVkZJTy1BUCBzeXN0ZW0gcnVubmluZy4gR290IGl0LiBOb3cgSSBjYW4gc2VlIHRoZSBmbG93IGZyb20gc3RhcnR1cCB0byBhdmFpbGFiaWxpdHkgb2YgbWRldnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjc6XHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbiAxNjg6XHR7XG4gMTY5Olx0XHRpbnQgcmV0O1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0ID0gdmZpb19hcF9kYmZfaW5mb19pbml0KCk7XG4gMTcyOlx0XHRpZiAocmV0KVxuIDE3MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG4gMTc2Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbiAxNzc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTc4Olx0XG4gMTc5Olx0XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG4gMTgwOlx0XHRpZiAocmV0KVxuIDE4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0ID0gYXBfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XG4gMTg0Olx0XHRpZiAocmV0KSB7XG4gMTg1Olx0XHRcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XG4gMTg2Olx0XHRcdHJldHVybiByZXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbiAxOTA6XHRcdGlmIChyZXQpIHtcbiAxOTE6XHRcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDE5MjpcdFx0XHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5NTpcdFx0fVxuIDE5NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkFQIEluc3RydWN0aW9uIEF2YWlsYWJpbGl0eSBDaGVjayoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGdvdHRhIG1ha2Ugc3VyZSB0aGUgaGFyZHdhcmUmIzM5O3MgZXZlbiBjYXBhYmxlIG9mIHdoYXQgd2UmIzM5O3JlIGFib3V0IHRvIGRvLiBJIHNlZSB0aGlzIGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YCBhbmQgbXkgYnJhaW4gaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIGNydWNpYWwgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgc2FmZXR5IGNoZWNrOyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZXhlY3V0ZSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyBpZiB0aGUgQ1BVIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlbS4gVGhhdCByZXR1cm4gdmFsdWUsIGAtRU5PREVWYCwgYWxzbyBpbmRpY2F0ZXMgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSDigJMgbm8gZGV2aWNlIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUsIGVzc2VudGlhbGx5LiBTbywgYmVmb3JlIGFueXRoaW5nIGVsc2UsIEkmIzM5O20gZGl2aW5nIGluIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGF0IGNoZWNrLCBwcmVjaXNlbHkgaG93IGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBmYWN0b3JzIGl0IGNvbnNpZGVycy4gSXMgaXQgcmVhZGluZyBhIENQVUlEIGJpdD8gU29tZSBvdGhlciBjb250cm9sIHJlZ2lzdGVyPyBXaGF0JiMzOTtzIHRoZSBkZXRlY3Rpb24gbG9naWM/IFRoaXMgaW5pdGlhbCBnYXRla2VlcGluZyBpcyAqZXNzZW50aWFsKiBmb3IgYSByb2J1c3QgYW5kIHBvcnRhYmxlIGltcGxlbWVudGF0aW9uLiBHb3R0YSBlbnN1cmUgd2UmIzM5O3JlIGdyYWNlZnVsbHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhvc2UgaW5zdHJ1Y3Rpb25zIGFyZW4mIzM5O3QgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaD03Mj11bmlvbiBhcF9xdWV1ZV9zdGF0dXNfcmVnIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04MC0vKipcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjgxOiAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Mi0gKlxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg0LSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODU6c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTEwNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9jcnlwdG8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUxLVx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRU5BQkxFX0FQSUU6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1MjpcdFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUzLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTgtXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1OTpcdFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTYwLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxMDA9c3RhdGljIGludCBrdm1fczM5MF92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTYtXHRcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMTU3Olx0XHRcdHJldCA9IGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSA/IDAgOiAtRU5YSU87XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1OC1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEwMT1zdGF0aWMgaW50IGt2bV9zMzkwX2FweGFfaW5zdGFsbGVkKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEwNTpcdGlmIChhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA2LVx0XHRpZiAoYXBfcWNpKFx1MDAyNmluZm8pID09IDApXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTkyPXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMC1cdC8qIFZlcmlmeSB0aGF0IHRoZSBBUCBpbnN0cnVjdGlvbiBhcmUgYXZhaWxhYmxlICovXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo2MDE6XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4MS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjU4MjpcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1ODMtXHRcdHByX3dhcm4oXCYjMzQ7VGhlIGhhcmR3YXJlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEFQIGluc3RydWN0aW9uc1xcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc1LVx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTc2Olx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc3LVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBTeXN0ZW0gQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGFjY2VzcyBwb2ludCBpbnN0cnVjdGlvbnMuICBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgLiAgVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIEFjY2VzcyBQb2ludCBpbnN0cnVjdGlvbnMgb24gdGhpcyBTLzM5MCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0LyoqXG4gIDgxOlx0ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbiAgODI6XHQgKlxuICA4MzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgODQ6XHQgKi9cbiAgODU6XHRzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuICA4NjpcdHtcbiAgODc6XHRcdHVuc2lnbmVkIGxvbmcgcmVnMCA9IEFQX01LUUlEKDAsIDApO1xuICA4ODpcdFx0dW5zaWduZWQgbG9uZyByZWcxID0gMDtcbiAgODk6XHRcbiAgOTA6XHRcdGFzbSB2b2xhdGlsZShcbiAgOTE6XHRcdFx0XCYjMzQ7XHRsZ3JcdDAsJVtyZWcwXVxcblwmIzM0O1x0XHQvKiBxaWQgaW50byBncjAgKi9cbiAgOTI6XHRcdFx0XCYjMzQ7XHRsZ2hpXHQxLDBcXG5cJiMzNDtcdFx0XHQvKiAwIGludG8gZ3IxICovXG4gIDkzOlx0XHRcdFwmIzM0O1x0bGdoaVx0MiwwXFxuXCYjMzQ7XHRcdFx0LyogMCBpbnRvIGdyMiAqL1xuICA5NDpcdFx0XHRcJiMzNDtcdC5pbnNuXHRycmUsMHhiMmFmMDAwMCwwLDBcXG5cJiMzNDtcdC8qIFBRQVAoVEFQUSkgKi9cbiAgOTU6XHRcdFx0XCYjMzQ7MDpcdGxhXHQlW3JlZzFdLDFcXG5cJiMzNDtcdFx0LyogMSBpbnRvIHJlZzEgKi9cbiAgOTY6XHRcdFx0XCYjMzQ7MTpcXG5cJiMzNDtcbiAgOTc6XHRcdFx0RVhfVEFCTEUoMGIsIDFiKVxuICA5ODpcdFx0XHQ6IFtyZWcxXSBcJiMzNDsmIzQzO1x1MDAyNmRcJiMzNDsgKHJlZzEpXG4gIDk5Olx0XHRcdDogW3JlZzBdIFwmIzM0O2RcJiMzNDsgKHJlZzApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODc4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEFQLVJlbGF0ZWQgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgUFFBUChUQVBRKWAgaW5zdHJ1Y3Rpb24uIFRoZSBjb2RlIGNoZWNrcyBmb3IgYSB0cmFwIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IGhhcHBlbnMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIEdDRSBvciBRRU1VPwoKRmlyc3QgdGhvdWdodCwgZG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBgUFFBUGA/IEkga25vdyBRRU1VIGhhcyBzb21lIHMzOTB4IEFQIGVtdWxhdGlvbiwgYnV0IGlzIGl0IG9uIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IHNvbWV0aGluZyB5b3UgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZT8gSSByZWNhbGwgdGhhdCBBUCBpbnN0cnVjdGlvbnMgdXN1YWxseSBuZWVkIHRoZSBob3N0IHRvIGVpdGhlciBoYXZlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gcGFzcyB0aHJvdWdoLCBvciBmb3IgUUVNVSBpdHNlbGYgdG8gZW11bGF0ZSB0aGVtLgoKQWxyaWdodCwgUUVNVSBoYXMgYGFwLWJyaWRnZWAgYW5kIGBhcC1tYXRyaXhgIGRldmljZXMsIGJ1dCB0aG9zZSBhcmUgZm9yICpwYXNzaW5nIHRocm91Z2gqIGhvc3QgQVAgZGV2aWNlcywgbm90IGVtdWxhdGluZyB0aGVtLiBTbywgZG9lcyBRRU1VIGRvIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBBUCBkZXZpY2VzPyBOb3BlLCBpdCYjMzk7cyBWRklPIGFsbCB0aGUgd2F5IOKAkyB1c2luZyBgdmZpby1hcGAgZm9yIHBhc3N0aHJvdWdoIG9ubHkuIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIHRvIGJlZ2luIHdpdGgsIHRoZW4gYHZmaW9fYXBfaW5pdGAgcmV0dXJucyBgLUVOT0RFVmAuIFRoYXQgbWVhbnMgdGhlIG1vZHVsZSBpc24mIzM5O3QgbG9hZGVkIGFuZCB0aGUgbWRldiBkcml2ZXIgaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIG1ha2luZyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgQVAgaGFyZHdhcmUuCgpMZXQgbWUgZG91YmxlLWNoZWNrOiBpZiBJIHJ1biBRRU1VIHdpdGggYC1jcHUgbWF4YCwgZG9lcyB0aGF0IHNldCB0aGUgQVAgZmFjaWxpdHk/IEFuZCBpcyB0aGVyZSBhbnkgS1ZNIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgQVA/IEkgcmVtZW1iZXIgS1ZNIGNhbiBpbnRlcmNlcHQgYFBRQVBgLCBidXQgcGFzc2VzIGl0IHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBXYWl0LCB0aGUgYHZmaW9fYXBgIGRyaXZlciBJUyB0aGUgZHJpdmVyIGZvciBoYW5kbGluZyBQUUFQIGZvciBndWVzdHMhIEJ1dCB0aGF0IHJ1bnMgb24gdGhlICpob3N0Ki4gSWYgdGhlIGhvc3QgaXMgYSBWTSAobGlrZSBRRU1VKSwgY2FuIGl0IGV2ZW4gKmhhdmUqIEFQIGluc3RydWN0aW9ucz8gSWYgdGhlIGhvc3QgaXMgYSBRRU1VIFZNLCBpdCBjYW4gb25seSBoYXZlIEFQIGluc3RydWN0aW9ucyBpZiB0aGUgTDAgaG9zdCBwYXNzZWQgdGhlbSB0aHJvdWdoLgoKTm93LCBzeXprYWxsZXIgaXMgdGhlIGNvbnRleHQgaGVyZSwgcmlnaHQ/IEl0IHJ1bnMgaW4gUUVNVSBvbiBHQ0UsIHdoaWNoIGlzIHVzdWFsbHkgeDg2XzY0IG9yIGFybTY0LCBidXQgbWF5YmUgczM5MHggb24gSUJNIENsb3VkLiBPa2F5LCBzbyBzeXprYWxsZXIgKmRvZXMqIHJ1biBzMzkweCBvbiBJQk0gQ2xvdWQgb3IgUUVNVS4gSWYgaXQmIzM5O3Mgb24gUUVNVSBvbiB4ODZfNjQgKFRDRyksIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBBUC4gSWYgaXQmIzM5O3MgS1ZNIG9uIHMzOTB4LCB0aGVuIG1heWJlLCAqbWF5YmUqIGlmIHRoZSBob3N0IGhhcyB0aGVtLgoKQnV0IHRoZSBwcm9tcHQgZW1waGFzaXplcyB0aGluZ3MgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBvciBjb2RlIHJlcXVpcmluZyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBOb3csIGlzIEFQIGEgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVT8gWWVzISBBZGp1bmN0IFByb2Nlc3NvcnMgKENyeXB0b0V4cHJlc3MgQ2FyZHMpIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBvbiBJQk0gWi4gVGhleSBhcmUgKm5vdCogc29mdHdhcmUtZW11bGF0ZWQgYnkgUUVNVS4gUUVNVSBvbmx5IGRvZXMgcGFzc3Rocm91Z2ggdmlhIFZGSU8uCgpUaGVyZWZvcmUsIHRoZSBgdmZpb19hcGAgZHJpdmVyIGNhbiYjMzk7dCBpbml0aWFsaXplIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IHJlYWwgcGh5c2ljYWwgQVAgY2FyZHMuIENvbmZpcm1pbmcgdGhpcywgaWYgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgcmV0dXJucyBmYWxzZSwgdGhlbiBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYC4gQ2FuIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHJldHVybiB0cnVlIGluIFFFTVUgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBub3QuIEVzcGVjaWFsbHkgaW4gUUVNVSBUQ0cgKHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBzMzkweCksIGl0IHdvdWxkICpuZXZlciogZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMuCgpBUCBpbnN0cnVjdGlvbnMgbGlrZSBQUUFQIGFyZSBzdXBlciBzcGVjaWZpYyB0byBJQk0gQ3J5cHRvRXhwcmVzcyBjYXJkcy4gVGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZSBjcnlwdG8gY2FyZHMgaW4gUUVNVS4gUUVNVSBvbmx5IHByb3ZpZGVzIHRoZSBgdmZpby1hcGAgZGV2aWNlLCByZXF1aXJpbmcgYSBob3N0IFZGSU8gZGV2aWNlLiBTbywgYHZmaW9fYXBfaW5pdGAgaXMgZ29pbmcgdG8gZmFpbC4gV2FpdCwgd2hhdCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBhbiBzMzkweCBMUEFSIG9yIEtWTSB3aXRoIEFQIGNhcmRzPyBCdXQgdGhlIHByb21wdCBzdGF0ZXMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgQVAgY2FyZHMgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIQoKU28gdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnksIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIHRoZXJlIHNvbWUgZmFrZSBBUCBkcml2ZXIsIGxpa2UgYSB0ZXN0aW5nIHV0aWxpdHk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmFrZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZXZpY2UgRGlzY292ZXJ5KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGVlcGVyIGFuYWx5c2lzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IGltbWVkaWF0ZSBpbmRpY2F0aW9uIG9mIGEgc29mdHdhcmUgQVAgZGV2aWNlIHByZXNlbnQuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCwgYSBxdWljayBzY2FuIHRvIGRldGVybWluZSB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGludmVzdCBpbiBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIG9yIGFuYWx5c2lzLiBJdCYjMzk7cyBhYm91dCBlZmZpY2llbmN5OyBpZGVudGlmeWluZyBhIHNvZnR3YXJlIEFQIGN1dHMgZG93biBzaWduaWZpY2FudGx5IG9uIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgdGhlIHByb2JsZW0gc3BhY2UsIHBhcnRpY3VsYXJseSBpZiBJIGtub3cgaG93IHRvIHNwb3QgdGhlIGNvbW1vbiBjaGFyYWN0ZXJpc3RpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdHdhcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdmZpb19hcCBQYXRjaCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGNhbiB3ZSBieXBhc3MgdGhpcyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAgY2hlY2s/IE5vcGUsIHRoYXQmIzM5O3MgaW5saW5lIGFzc2VtYmx5LCBleHBsaWNpdGx5IGxvb2tpbmcgZm9yIGEgdHJhcC4gU28sIHdpdGhvdXQgYWN0dWFsIEFQIGhhcmR3YXJlLCB0aGF0IGNvZGUgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIFdhaXQsIGFtIEkgdW5kZXJzdGFuZGluZyBgdmZpb19hcGAgY29ycmVjdGx5PyBJcyBpdCAqZm9yKiB0aGUgQVAgaGFyZHdhcmUgaXRzZWxmLCBvciBpcyBpdCB0byBtYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUgdG8gVk1zPyBBaCwgaXQmIzM5O3MgdGhlIGxhdHRlcjogaXQmIzM5O3MgYSBWRklPIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgZGVtYW5kcyByZWFsLCBwaHlzaWNhbCBBUCBoYXJkd2FyZSBvbiB0aGUgaG9zdC4gQW5kIHNpbmNlIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBDcnlwdG9FeHByZXNzIGNhcmRzIOKAkyBzeXprYWxsZXIgaW4gYSB0eXBpY2FsIHNldHVwIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRvdWNoIHRoaXMgY29kZS4KClJpZ2h0LCBiYWNrIHRvIHRoZSBwYXRjaC4gSXQmIzM5O3MgbW9kaWZ5aW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIEJhc2ljYWxseSwgYSBsb2NraW5nIG9yZGVyIGNoYW5nZSB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQmIzM5O3MgdGFraW5nIGBrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbWAgKmJlZm9yZSogaXQgbWVzc2VzIHdpdGggYHBxYXBfaG9va2AuIFNvdW5kcyBmaW5lLCBmdW5jdGlvbmFsbHksIGJ1dCBzdGlsbCB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBBUCBoYXJkd2FyZS4KCk5vdywgaXMgdGhlcmUgKmFueSogc2NlbmFyaW8gd2hlcmUgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBnZXRzIGNhbGxlZCB3aXRob3V0IHRoZSBBUCBoYXJkd2FyZSBiZWluZyBwcmVzZW50PyBCZXR0ZXIgY2hlY2sgYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X29wZW5fZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwMzQ9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1MjpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1My17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzYxLVx0LmluaXQgPSB2ZmlvX2FwX21kZXZfaW5pdF9kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM2MjpcdC5vcGVuX2RldmljZSA9IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzYzLVx0LmNsb3NlX2RldmljZSA9IHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqVmZpby1BUCBEZXZpY2UgT3BlcmF0aW9uczogQSBRdWljayBSdW4tVGhyb3VnaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGB2ZmlvX2FwX21hdHJpeF9kZXZfb3BzYCBpcyBkaXJlY3RseSB0aWVkIGludG8gdGhlIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGZ1bmN0aW9uLiBTbywgZXNzZW50aWFsbHksIHRoZSBgdmZpb19hcF9tYXRyaXhfZGV2X29wc2Agc3RydWN0dXJlIGxpa2VseSBkZWZpbmVzIHRoZSBvcGVyYXRpb25zIG9yIG1ldGhvZHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IHVzZWQgd2hlbiBwcm9iaW5nIG9yIGRpc2NvdmVyaW5nIGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSB3aXRoaW4gdGhlIFZGSU8tQVAgY29udGV4dC4KClRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UgbmVlZCBhIGRlZmluZWQgc2V0IG9mIGFjdGlvbnMgb3IgaGFuZGxlcnMg4oCTIHRoYXQgYF9kZXZfb3BzYCBzdHJ1Y3R1cmUg4oCTIHRvIG1hbmFnZSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQVAgZGV2aWNlIHdoZW4gaXQmIzM5O3MgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgZGlzY292ZXJlZC4gVGhlIGBfbWRldl9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvYmluZyBwcm9jZXNzLiBJdCB3b3VsZCBiZSBoaWdobHkgcHJvYmFibGUgdGhhdCBhIHByb2JlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZXNlIHN0cnVjdHVyZXMuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHRoZSBjb2RlIHRvIHNheSBtb3JlIGZvciBjZXJ0YWluLCBidXQgdGhpcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdHdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX21hdHJpeF9kZXZfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTM3PXN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9maW5kX3F1ZXVlKGludCBhcHFuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozODpzdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX2FwX21hdHJpeF9kZXZfb3BzO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM5LXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc5MD1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5NS1cdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFx1MDAyNm1kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5NjpcdFx0XHRcdFx0XHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk3LVx0aWYgKElTX0VSUihtYXRyaXhfbWRldikpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdmZpb19xdWV1ZV9hdHRyX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzU5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNjA6c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzYxLVx0LmluaXQgPSB2ZmlvX2FwX21kZXZfaW5pdF9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzQ5CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgdmZpb19hcF9tZGV2X3NldF9rdm1gIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSB3aGV0aGVyIHRoZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGZ1bmN0aW9uIGNhbiBldmVyIGFjdHVhbGx5IGJlIGNhbGxlZCwgcGFydGljdWxhcmx5IGluIGFuIGVudmlyb25tZW50IGxhY2tpbmcgcGh5c2ljYWwgQVAgaGFyZHdhcmUuCgpNeSB0cmFpbiBvZiB0aG91Z2h0IGdvZXMgbGlrZSB0aGlzOiBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyB0cmlnZ2VyZWQgZHVyaW5nIG1kZXYgY3JlYXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHRoZSBjcnVjaWFsIGxpbmsgc2VlbXMgdG8gYmUgdGhlIG1kZXYgcGFyZW50IHJlZ2lzdHJhdGlvbiwgd2hpY2ggaGFwcGVucyBpbiBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYC4gVGhpcyBmdW5jdGlvbiBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYHZmaW9fYXBfaW5pdGAsIHdoaWNoIHRoZW4gY2hlY2tzIGlmIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGUgcmVhbGx5IHRlbGxpbmcgcGFydCBpcyB0aGF0IGB2ZmlvX2FwX2luaXRgIGJhaWxzIG91dCB3aXRoIGAtRU5PREVWYCBpZiB0aG9zZSBBUCBpbnN0cnVjdGlvbnMgYXJlbiYjMzk7dCBhdmFpbGFibGUuIFRoYXQgbWVhbnMgdGhlIHBhcmVudCBkZXZpY2UgcmVnaXN0cmF0aW9uICpuZXZlciogaGFwcGVucyB3aXRob3V0IHRoZSByaWdodCBoYXJkd2FyZS4gQ29uc2VxdWVudGx5LCBubyBtZGV2IGNhbiBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIHBhcmVudCBpcyBuZXZlciByZWdpc3RlcmVkLCB0aGVyZWJ5IGJsb2NraW5nIHRoZSBlbnRpcmUgY2hhaW4uCgpOb3csIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjZSAqZXZlcnkqIHBvc3NpYmxlIGNhbGwgcGF0aCB0byBgdmZpb19hcF9tZGV2X3NldF9rdm1gLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGB2ZmlvX2FwX29wcy5jYCBmaWxlLiBJdHMgb25seSBjYWxsZXIgaXMgYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAuIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgIGlzIG9ubHkgY2FsbGVkIHRocm91Z2ggYHZmaW9fZGV2aWNlX29wc2AuIFRoYXQgaW4gdHVybiBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IGB2ZmlvX2FwX21kZXZfcHJvYmVgLiBUaGlzIHByb2JpbmcgaXMgcGFydCBvZiBgdmZpb19hcF9tYXRyaXhfZHJpdmVyYCwgd2hpY2ggaXMgYWxzbyByZWdpc3RlcmVkIGluIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgLCBhbmQgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgaXMgY2FsbGVkIGZyb20gYHZmaW9fYXBfaW5pdGAuIEFzIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCwgdGhlIHBhdGggdGhyb3VnaCBgdmZpb19hcF9pbml0YCBoaW5nZXMgb24gYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAuCgpHaXZlbiB0aGF0IHRob3JvdWdoIHRyYWNpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaXQgaXMgYWJzb2x1dGVseSB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIEFQIGhhcmR3YXJlLiBTcGVjaWZpY2FsbHksIHRoZSBDcnlwdG9FeHByZXNzIGNhcmRzIGFyZSByZXF1aXJlZCwgYW5kIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aG9zZS4gVGhlcmVmb3JlLCBJIHdpbGwgcmVzcG9uZCB3aXRoIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhlIGZ1bmN0aW9uIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB1bmRlciB0eXBpY2FsIHZpcnR1YWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHguIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIElCTSBDcnlwdG9FeHByZXNzIGNhcmRzIHRvIGJlIHByZXNlbnQgb24gdGhlIGhvc3QgKGNoZWNrZWQgdmlhIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uKS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjAyLjk5NDU0MjQwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDU5MjIyMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHguIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIElCTSBDcnlwdG9FeHByZXNzIGNhcmRzIHRvIGJlIHByZXNlbnQgb24gdGhlIGhvc3QgKGNoZWNrZWQgdmlhIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uKS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MDIuOTk0NTQ3NTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ1MTY5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OGI3YWJiZGEzNjU0ZTU0OGQ2Yjc3MTdiYTRhNWVmNWQzZWE3MTBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDIzOjUxOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmIwYTAzOGZhYTkzYWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuQEAgLTE4MjEsMjYgKzE4MjEsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbi1cXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XFxuLVxcbiBcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGFraW5nIHRoZSBrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlXFxuK1xcdFxcdCAqIGhvbGRpbmcgdGhlIHVwZGF0ZSBsb2NrcyAoYmVsb3cpIGNvdWxkIHJlc3VsdCBpbiBhXFxuK1xcdFxcdCAqIGRlYWRsb2NrIGNvbmRpdGlvbiwgc28gbGV0J3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZVxcbitcXHRcXHQgKiBjaGVjayBhbmQgdXBkYXRlIHRoZSBwcWFwX2hvb2suXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xcbitcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHR9XFxuIFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VwcWFwX2hvb2s7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuIFxcbiBcXHRcXHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRcXHRpZiAobSAhPSBtYXRyaXhfbWRldiBcXHUwMDI2XFx1MDAyNiBtLVxcdTAwM2Vrdm0gPT0ga3ZtKSB7XFxuLVxcdFxcdFxcdFxcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRrdm1fZ2V0X2t2bShrdm0pO1xcbiBcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbi1cXG4gXFx0XFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTowMy4zOTk3NTYyOTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NDY1Mzk5OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJQk0gQ3J5cHRvRXhwcmVzcyBjYXJkcyB0byBiZSBwcmVzZW50IG9uIHRoZSBob3N0IChjaGVja2VkIHZpYSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4YjdhYmJkYTM2NTRlNTQ4ZDZiNzcxN2JhNGE1ZWY1ZDNlYTcxMGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAyMzo1MTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uYjBhMDM4ZmFhOTNhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMSwyNiArMTgyMSwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbTtcbi1cbiBcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRha2luZyB0aGUga3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSBsb2NrIHdoaWxlXG4rXHRcdCAqIGhvbGRpbmcgdGhlIHVwZGF0ZSBsb2NrcyAoYmVsb3cpIGNvdWxkIHJlc3VsdCBpbiBhXG4rXHRcdCAqIGRlYWRsb2NrIGNvbmRpdGlvbiwgc28gbGV0J3MgaG9sZCB0aGUgcndzZW0gaGVyZSB3aGlsZSB3ZVxuK1x0XHQgKiBjaGVjayBhbmQgdXBkYXRlIHRoZSBwcWFwX2hvb2suXG4rXHRcdCAqL1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuK1x0XHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbiBcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdFx0aWYgKG0gIT0gbWF0cml4X21kZXYgXHUwMDI2XHUwMDI2IG0tXHUwMDNla3ZtID09IGt2bSkge1xuLVx0XHRcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuLVxuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTowMy4zOTk3NTc2NDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc5OTQ0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyeXB0byBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgd2l0aGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiAgSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQncyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gczM5MCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgVkZJTyBBUCAoY3J5cHRvKSBtZGV2LiAgTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBRRU1VIHNldHVwPyBJIGtub3cgczM5MHggY2FuIGJlIGVtdWxhdGVkLCBidXQgZG9lcyBRRU1VIGhhdmUgdGhlIGZ1bGwgVkZJTyBBUCBzdG9yeT9cblxuUmlnaHQsIFZGSU8gQVAgdXN1YWxseSBkZXBlbmRzIG9uIGVpdGhlciBhY3R1YWwgcGh5c2ljYWwgQVAgaGFyZHdhcmUgb3Igc29tZSB2ZXJ5IHNwZWNpZmljIGVtdWxhdGlvbi4gIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHMzOTB4IFZGSU8gQVAgaXMgYSAqZHJpdmVyKiBmb3IgQVAgbWF0cml4IGRldmljZXMuICBTbywgdGhlIG5leHQgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBldmVuIHJlbW90ZWx5IGZ1enphYmxlPyAgR2VuZXJhbGx5LCB0aGVzZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZHJpdmVycyBhcmUgYSBwYWluIHRvIGZ1enogdW5sZXNzIHdlJ3JlIGFjdHVhbGx5IG9uIHMzOTB4LlxuXG5CdXQuLi5zeXprYWxsZXIgKmRvZXMqIGZ1enogczM5MHgsIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIE5vdywgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBzYXlzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIEFoLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGVtdWxhdGUgQVAgbWF0cml4IGRldmljZXM/XG5cbkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgVkZJT19BUGAgY2FuIGJlIGVuYWJsZWQuIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGluIEtjb25maWcgZm9yIGBWRklPX0FQYC4gVGhhdCBzaG91bGQgbGVhZCBtZSB0byB0aGUgYW5zd2VyLCBhbmQgd2hldGhlciBvciBub3QgSSBzaG91bGQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjA4Ljk3OTcwNDY3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY2OTg2OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MDkuMDg2NDA5NzY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNjgzNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlZGSU9fQVAgS2NvbmZpZyBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgZm9yIHRoZSBqdWd1bGFyIOKAkyBmaW5kIGV2ZXJ5IGluc3RhbmNlIG9mIGBWRklPX0FQYCBhY3Jvc3MgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIHdoYXQgaXQgZGVwZW5kcyBvbiwgYW5kIGhvdyBpdCdzIHVzZWQuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBLY29uZmlnIGVudHJpZXMgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWw7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBvcHRpb25zIEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yPyBUaGUgZ29hbHMgaGVyZSBhcmUgdG8gZmluZCB3aGVyZSBpdCdzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBhbHNvIHRoZSBsb2NhdGlvbiBpbiB0aGUgY29kZSBiYXNlIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgc2VhcmNoIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjEyLjE5MzI1MDU2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE4MjIwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjE0LjYxMTQ3NjU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTEzNjU5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgVkZJT19BUGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBzdXBwb3J0IGVjb3N5c3RlbSBmb3IgYFZGSU9fQVBgP1wiLiBJIGtub3cgdGhlIGJhc2ljIFZGSU8gaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIFRoaXMgbWVhbnMgSSdtIG5vdCBqdXN0IGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBtb2R1bGVzOyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHVzZXItc3BhY2UgbGlicmFyaWVzLCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMsIGFuZCBoYXJkd2FyZSByZXF1aXJlbWVudHMsIGlmIGFueSwgdGhhdCBjb21lIGFsb25nIGZvciB0aGUgcmlkZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcGxhY2Ugd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFdoZXJlIGRvZXMgYFZGSU9fQVBgIGZpdCBpbiwgZnJvbSBhIGhvbGlzdGljIHBlcnNwZWN0aXZlP1xuXG5cbiIsIklucHV0VG9rZW5zIjozNDI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MTcuMDYyODQ1NjU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHRcXG4gODMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cXG4gODMzOlxcdFxcbiA4MzQ6XFx0Y29uZmlnIFZGSU9fQVBcXG4gODM1OlxcdFxcdGRlZl90cmlzdGF0ZSBuXFxuIDgzNjpcXHRcXHRwcm9tcHQgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1xcXCJcXG4gODM3OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuIDgzODpcXHRcXHRkZXBlbmRzIG9uIFZGSU9cXG4gODM5OlxcdFxcdGRlcGVuZHMgb24gQVBcXG4gODQwOlxcdFxcdHNlbGVjdCBWRklPX01ERVZcXG4gODQxOlxcdFxcdGhlbHBcXG4gODQyOlxcdFxcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcXG4gODQzOlxcdFxcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXFxuIDg0NDpcXHRcXG4gODQ1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA4NDY6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRlbmRtZW51XFxuIDg0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MTcuMDYyOTcxMzI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4NjI4MjA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0J3MgbXkgb3duIGludGVybmFsIGRpYWxvZ3VlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBsZXQncyB1bnBhY2sgdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBoaW5nZXMgb24gdGhpcyB2YXJpYWJsZSwgYEFQYC4gVGhlIGJlaGF2aW9yLCB0aGUgb3V0Y29tZSwgdGhlICp3aG9sZSBkYW1uIHRoaW5nKiBpcyBjb250aW5nZW50IG9uIGl0cyBzdGF0ZS4gU28sIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gY2xhcmlmeSBwcmVjaXNlbHkgd2hhdCBgQVBgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBXaGF0IGFyZSBpdHMgcG90ZW50aWFsIHZhbHVlcz8gSXMgaXQgYSBzaW5nbGUgdmFsdWUsIGEgcmFuZ2UsIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlPyBVbmRlcnN0YW5kaW5nIGBBUGAgaXMgYWJzb2x1dGVseSBwYXJhbW91bnQuIE5vIG90aGVyIGFuYWx5c2lzIGNhbiBwcm9jZWVkIHVudGlsIEkgaGF2ZSBhIGZpcm0gZ3Jhc3Agb2YgaXRzIGNoYXJhY3RlcmlzdGljcyBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIGRvbWFpbiBvZiBgQVBgIHRvIGRldGVybWluZSB3aGVyZSB0byBzdGFydCBteSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjE5Ljk0OTI1NjAyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTIyMTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yOTEtPT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZS00Mi1cXHRib29sIFxcXCJBcG9sbG8gc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk2LVxcdGJvb2xcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4NT1jb25maWcgRUFETV9TQ0hcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQXFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXFxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTgxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz04ODU9Y29uZmlnIENNTV9JVUNWXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXFxuYXJjaC9zMzkwL0tjb25maWctODk0LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxcbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxcbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDQtXFxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXFxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVxcdHRyaXN0YXRlIFxcXCJBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXFxuYXJjaC94ODYvS2NvbmZpZzoyODAxOmNvbmZpZyBBUE1fSUdOT1JFX1VTRVJfU1VTUEVORFxcbmFyY2gveDg2L0tjb25maWctMjgwMi1cXHRib29sIFxcXCJJZ25vcmUgVVNFUiBTVVNQRU5EXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODA3LVxcbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxcbmFyY2gveDg2L0tjb25maWctMjgwOS1cXHRib29sIFxcXCJFbmFibGUgUE0gYXQgYm9vdCB0aW1lXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxcbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXFxuYXJjaC94ODYvS2NvbmZpZy0yODI2LVxcdGRlcGVuZHMgb24gQ1BVX0lETEVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjgzNi1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXFxuYXJjaC94ODYvS2NvbmZpZy0yODM4LVxcdGJvb2wgXFxcIkVuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXFxuYXJjaC94ODYvS2NvbmZpZy0yODUxLVxcdGJvb2wgXFxcIkFsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTIyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6MzA4OmNvbmZpZyBBUFFfTU1DQ184MDg0XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cXHR0cmlzdGF0ZSBcXFwiQVBRODA4NCBNdWx0aW1lZGlhIENsb2NrIENvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnPTc4PWNvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxcbmRyaXZlcnMvZG1hL0tjb25maWc6ODg6Y29uZmlnIEFQUExFX0FETUFDXFxuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgQURNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MTU0PWNvbmZpZyBFRklfREVWX1BBVEhfUEFSU0VSXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjE1Nzpjb25maWcgQVBQTEVfUFJPUEVSVElFU1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkFwcGxlIERldmljZSBQcm9wZXJ0aWVzXFxcIlxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZz02Nj1jb25maWcgQUwzMzIwQVxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjc2OmNvbmZpZyBBUERTOTE2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXFx0dHJpc3RhdGUgXFxcIkFQRFM5MTYwIGNvbWJpbmVkIGFscyBhbmQgcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6MTA5OmNvbmZpZyBBUERTOTk2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTk2MCBnZXN0dXJlL1JHQi9BTFMvcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZz0yOTY9Y29uZmlnIFNQQVBSX1RDRV9JT01NVVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MzA0OmNvbmZpZyBBUFBMRV9EQVJUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgREFSVCBJT01NVSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9Nzg4PWNvbmZpZyBJUlFfSURUMzI0M1hcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZzo3OTM6Y29uZmlnIEFQUExFX0FJQ1xcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJBcHBsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKVxcXCJcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMyNz1jb25maWcgU0dJX0dSVV9ERUJVR1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMzNDpjb25maWcgQVBEUzk4MDJBTFNcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIk1lZGZpZWxkIEF2YWdvIEFQRFM5ODAyIEFMUyBTZW5zb3IgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEwNj1jb25maWcgTkUyS19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEyNDpjb25maWcgQVBORVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlBDTUNJQSBORTIwMDAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM9MzMyMD1zdGF0aWMgaW50IHJ0dzg5X3BjaV9jZmdfZGFjKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jOjMzMzM6XFx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVxcdHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJUVzg5X1BDSUVfTDFfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNTM9Y29uZmlnIE1BUlZFTExfQ04xMEtfVEFEX1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MDpjb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cXHRib29sIFxcXCJBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnPTE5ND1jb25maWcgQURWX1NXQlVUVE9OXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnOjIwNTpjb25maWcgQVBQTEVfR01VWFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBHbXV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZz0zPWlmIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWctNi1cXHRib29sIFxcXCJBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIkFQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFxcXCJBcHBsZSBTb0MgZHJpdmVyc1xcXCJcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo3OmNvbmZpZyBBUFBMRV9NQUlMQk9YXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTb0MgbWFpbGJveGVzXFxcIlxcbi0tXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo0MTpjb25maWcgQVBQTEVfVFVOQUJMRVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxcbi0tXFxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE1OC1cXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXFx0dHJpc3RhdGUgXFxcIkZhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcXFwiR3JhcGhpY3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xcbmRyaXZlcnMvdmlkZW8vS2NvbmZpZy05LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTExPWNvbmZpZyBNU0MzMTNFX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTEyMzpjb25maWcgQVBQTEVfV0FUQ0hET0dcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU29DIHdhdGNoZG9nXFxcIlxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTI9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cXHQgKiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgZWl0aGVyIHRoZSBvbGQgbW91bnQgQVBJIG9yXFxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XFx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXFxuZnMveGZzL3hmc19zdXBlci5jLTE2NjYtXFx0ICovXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zMTA9Y29uZmlnIFBNX1RSQUNFX1JUQ1xcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjMyODpjb25maWcgQVBNX0VNVUxBVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjIyLjMzNDQ4MzIzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ1NjQ2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBzMzkwIEtjb25maWcqKlxuXG5Pa2F5LCBoZXJlIHdlIGdvLiBUaGUgcHJvbXB0IGluZGljYXRlcyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5NiBvZiBpdHMgYEtjb25maWdgIGZpbGUuIFRoZSB0cmlnZ2VyIGlzIGBhcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG9wZW4gdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgem9vbSByaWdodCBpbiBvbiB0aGF0IGxpbmUuIFRoYXQncyB3aGVyZSB3ZSdsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZWx5IG5hbWVkIGBBUGAsIGFuZCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoYXRldmVyIHRoaXMgY29udGV4dCByZXF1aXJlcy4gSSBuZWVkIHRvIHNlZSB3aGF0IGBBUGAgaXMgZGVmaW5lZCBhcywgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgdGhlIGhlbHAgdGV4dCBzYXlzLiBUaGF0J2xsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIG9yIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjI1LjQ4MDEzMTYzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTA6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgRUFETSBzdWJjaGFubmVscy4gRUFETSBzdWJjaGFubmVscyBhY3RcXG4gNzkxOlxcdFxcdCAgYXMgYSBjb21tdW5pY2F0aW9uIHZlaGljbGUgZm9yIFNDTSBpbmNyZW1lbnRzLlxcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3OTQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZWFkbV9zY2guXFxuIDc5NTpcXHRcXG4gNzk2OlxcdGNvbmZpZyBBUFxcbiA3OTc6XFx0XFx0ZGVmX3RyaXN0YXRlIHlcXG4gNzk4OlxcdFxcdHByb21wdCBcXFwiU3VwcG9ydCBmb3IgQWRqdW5jdCBQcm9jZXNzb3JzIChhcClcXFwiXFxuIDc5OTpcXHRcXHRoZWxwXFxuIDgwMDpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXMgdmlhXFxuIDgwMTpcXHRcXHQgIHRoZSBhcCBidXMsIGNhcmRzIGFuZCBxdWV1ZXMuIFN1cHBvcnRlZCBBZGp1bmN0IFByb2Nlc3NvcnMgYXJlXFxuIDgwMjpcXHRcXHQgIHRoZSBDcnlwdG9FeHByZXNzIENhcmRzIChDRVgpLlxcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4MDU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXAuXFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSAoZGVmYXVsdCkuXFxuIDgwODpcXHRcXG4gODA5OlxcdGNvbmZpZyBBUF9ERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MToyNS40ODAyMDc4NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMjc0ODU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEFkanVuY3QgUHJvY2Vzc29yIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gXCJBUCxcIiB3aGljaCBJIGtub3cgc3RhbmRzIGZvciBcIlN1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycyxcIiByZWZlcnJpbmcgc3BlY2lmaWNhbGx5IHRvIHRob3NlIENyeXB0b0V4cHJlc3MgQ2FyZHMgKENFWCkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGNhbiBJIGVtdWxhdGUgdGhpcyBlbnZpcm9ubWVudCB3aXRoaW4gUUVNVT8gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBhIGB2ZmlvLWFwYCBkZXZpY2Ugd2l0aGluIFFFTVUsIGJ1dCBJIGtub3cgdGhhdCByZXF1aXJlcyBWRklPIG9uIHRoZSBob3N0IGhhcmR3YXJlLiBUaGF0J3MgYSBodXJkbGUuXG5cbk5vdywgSSB3b25kZXIsIGRvZXMgc3l6a2FsbGVyIHByb3ZpZGUgYSB0ZXN0aW5nIGF2ZW51ZSBmb3IgdGhpcz8gSXQgcnVucyBvbiBzMzkweCwgYW5kIGRvZXMgaXQgdXNlIHBoeXNpY2FsIEFQIGRldmljZXM/IE5vcm1hbGx5IHN5emthbGxlciBpbnN0YW5jZXMgcnVuIG9uIEdDRSBvciBRRU1VLiBCdXQgR0NFIGRvZXNuJ3QgaGF2ZSBzMzkweC4gU28gaXQncyBwcm9iYWJseSBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCBBUCBkZXZpY2VzPyBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBzb21lIGRpZ2dpbmcuXG5cblBlcmhhcHMgdGhlcmUncyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQVAgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIElzIHRoZXJlIHNvbWUga2luZCBvZiBcImZha2VcIiBBUCBkZXZpY2UgZHJpdmVyPyBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9gIGRpcmVjdG9yeSBhbmQgc2VlIGlmIGFueXRoaW5nIGxpa2UgYGFwX2RldmljZWAgb3IgYGFwX21hdHJpeF9tZGV2YCBzaG93cyB1cC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjI5LjcwMjk1ODg1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0b1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhcF9idXMuY1wiLFxuICAgIFwiYXBfYnVzLmhcIixcbiAgICBcImFwX2NhcmQuY1wiLFxuICAgIFwiYXBfZGVidWcuaFwiLFxuICAgIFwiYXBfcXVldWUuY1wiLFxuICAgIFwicGtleV9hcGkuY1wiLFxuICAgIFwicGtleV9iYXNlLmNcIixcbiAgICBcInBrZXlfYmFzZS5oXCIsXG4gICAgXCJwa2V5X2NjYS5jXCIsXG4gICAgXCJwa2V5X2VwMTEuY1wiLFxuICAgIFwicGtleV9wY2ttby5jXCIsXG4gICAgXCJwa2V5X3N5c2ZzLmNcIixcbiAgICBcInBrZXlfdXYuY1wiLFxuICAgIFwidmZpb19hcF9kZWJ1Zy5oXCIsXG4gICAgXCJ2ZmlvX2FwX2Rydi5jXCIsXG4gICAgXCJ2ZmlvX2FwX29wcy5jXCIsXG4gICAgXCJ2ZmlvX2FwX3ByaXZhdGUuaFwiLFxuICAgIFwiemNyeXB0X2FwaS5jXCIsXG4gICAgXCJ6Y3J5cHRfYXBpLmhcIixcbiAgICBcInpjcnlwdF9jYXJkLmNcIixcbiAgICBcInpjcnlwdF9jY2Ffa2V5LmhcIixcbiAgICBcInpjcnlwdF9jY2FtaXNjLmNcIixcbiAgICBcInpjcnlwdF9jY2FtaXNjLmhcIixcbiAgICBcInpjcnlwdF9jZXgyYS5jXCIsXG4gICAgXCJ6Y3J5cHRfY2V4MmEuaFwiLFxuICAgIFwiemNyeXB0X2NleDJjLmNcIixcbiAgICBcInpjcnlwdF9jZXgyYy5oXCIsXG4gICAgXCJ6Y3J5cHRfY2V4NC5jXCIsXG4gICAgXCJ6Y3J5cHRfY2V4NC5oXCIsXG4gICAgXCJ6Y3J5cHRfZGVidWcuaFwiLFxuICAgIFwiemNyeXB0X2VwMTFtaXNjLmNcIixcbiAgICBcInpjcnlwdF9lcDExbWlzYy5oXCIsXG4gICAgXCJ6Y3J5cHRfZXJyb3IuaFwiLFxuICAgIFwiemNyeXB0X21zZ3R5cGU1MC5jXCIsXG4gICAgXCJ6Y3J5cHRfbXNndHlwZTUwLmhcIixcbiAgICBcInpjcnlwdF9tc2d0eXBlNi5jXCIsXG4gICAgXCJ6Y3J5cHRfbXNndHlwZTYuaFwiLFxuICAgIFwiemNyeXB0X3F1ZXVlLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MjkuNzAzMDQ1NDExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjYwNjkzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgdmZpb19hcF9tZGV2X3NldF9rdm0gQ2FsbCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAuIEEgZ29vZCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoYXQgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBTbywgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgaXMgYHZmaW9fYXBfZHJ2LmNgLiBUaGF0IGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBkcml2ZXItbGV2ZWwgY29kZSBmb3IgdGhlIFZGSU8tQVAgKEFjY2VsZXJhdGVkIFByb2Nlc3NpbmcpIGRldmljZSByZXNpZGVzLCBhbmQgdGh1cyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNhbGwuIEknbSBhc3N1bWluZyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHNldHVwIGZvciBLVk0gaW50ZWdyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGlzIEFQIGRldmljZS4gRXhhbWluaW5nIHRoYXQgZmlsZSBzaG91bGQgcmV2ZWFsIHRoZSBjYWxsaW5nIGNvbnRleHQsIGlucHV0IGFyZ3VtZW50cywgYW5kIGlkZWFsbHksIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaXMgY29uc2lkZXJlZCBuZWNlc3NhcnkuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2VsaW5lIG5lZWRlZCB0byBhbmFseXplIGFueSBmdXJ0aGVyIHJlbGF0ZWQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTozMy42MjkxMTc2NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTA5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9zZXRfa3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xODA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp2ZmlvX2FwX21kZXZfYXR0cl9ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODExLS8qKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODEyOiAqIHZmaW9fYXBfbWRldl9zZXRfa3ZtIC0gc2V0cyBhbGwgZGF0YSBmb3IgQG1hdHJpeF9tZGV2IHRoYXQgYXJlIG5lZWRlZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODEzLSAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieSBAa3ZtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMC0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjItXFx0XFx0XFx0XFx0c3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNTI9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNjA6XFx0cmV0dXJuIHZmaW9fYXBfbWRldl9zZXRfa3ZtKG1hdHJpeF9tZGV2LCB2ZGV2LVxcdTAwM2Vrdm0pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDYxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MzMuNjk0MjMyMjUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzgyODI3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGB2ZmlvX2FwYCBNZWRpYXRlZCBEZXZpY2UgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjYWxsIG9yaWdpbmF0aW5nIGZyb20gYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAuIE15IGZpcnN0IHRob3VnaHQgaXMgd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIHJlbGV2YW50IHdpdGhvdXQgYWN0dWFsIEFQIChBcHBsaWNhdGlvbiBQcm9jZXNzb3IpIGhhcmR3YXJlIHByZXNlbnQuIFRoYXQncyBhIGNydWNpYWwgZmlyc3QgcXVlc3Rpb24gdG8gYW5zd2VyLiBHaXZlbiB0aGF0IHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBWRklPIEFQLCB3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIG9mIGhvdyB0aGVzZSBtZWRpYXRlZCBkZXZpY2VzIGFyZSBzZXQgdXAuIEknbGwgZGl2ZSBpbnRvIGB2ZmlvX2FwX2Rydi5jYCBub3cuIFRoYXQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gb24gaG93IHRoZSBtZGV2IChtZWRpYXRlZCBkZXZpY2UpIGlzIGNyZWF0ZWQgYW5kIHdoYXQgdGhlIGNyZWF0aW9uIHByb2Nlc3MgZW50YWlscy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6MzYuOTcyNTE3OTMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MDc2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjYwOlxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MTpcXHQuaW5fdXNlID0gdmZpb19hcF9tZGV2X3Jlc291cmNlX2luX3VzZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjItXFx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExMjpcXHRtdXRleF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTEzOlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTQtXFx0bXV0ZXhfaW5pdChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xODgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4OTpcXHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTkwLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDEte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoyMDI6XFx0dmZpb19hcF9tZGV2X3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjAzLVxcdGFwX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZ2ZmlvX2FwX2Rydik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjM3LjA3MzQzMzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODE3MDQ5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBtZGV2IERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYC4gVGhhdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIE11bHRpLWRldmljZSAobWRldikgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgQWR2YW5jZWQgUGxhdGZvcm0gKEFQKSBjb250ZXh0LiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaG9va3MgaW50byB0aGUgc3lzdGVtLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGlzIGZ1bmN0aW9uJ3MgbG9jYXRpb24gYW5kIHdoYXQncyBpbmNsdWRlZC4gSeKAmWxsIGNoZWNrIHdoZXJlIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIGRlZmluZWQ7IGl0IHNob3VsZCBiZSBpbnNpZGUgYHZmaW9fYXBfb3BzLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgY29yZSBvcGVyYXRpb25zIGZvciB0aGUgVkZJTy1BUCBpbXBsZW1lbnRhdGlvbiB0eXBpY2FsbHkgcmVzaWRlLCBzbyB0aGlzIGNvbmZpcm1zIHRoYXQncyB0aGUgcGxhY2UgdG8gbG9vayBmb3IgZGV0YWlscyBhYm91dCB0aGUgbWRldiByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEFQIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo0MC42NTUxNDEzNDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDA4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzM9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NjppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo0MC43MTA1NTQ2MTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzMxNjQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJIGtub3cgdGhlIFZGcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoaXMgd29ya3MsIHNvIEknbSBnb2luZyB0byBrZWVwIHRoYXQgYXQgdGhlIGZvcmVmcm9udCBvZiBteSBtaW5kLlxuXG4qKlVuZGVyc3RhbmRpbmcgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKipcblxuUmlnaHQsIHNvIHRoaXMgbG9va3MgbGlrZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJpbmcgYSBtZWRpYXRlZCBkZXZpY2Ugd2l0aCB0aGUgQVAgKEFwcGxpY2F0aW9uIFByb2Nlc3NvcikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBnZXRzIGFjcXVhaW50ZWQgd2l0aCB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUuIEl0J3MgdGhlIG9uYm9hcmRpbmcgcHJvY2VzcywgaWYgeW91IHdpbGwuIEknbSBnb2luZyB0byBsb29rIGZvciBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkIGhlcmUg4oCTIHByZXN1bWFibHksIHN0cnVjdHVyZXMgaG9sZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzLCBpdHMgcGh5c2ljYWwgYmFja2luZywgYW5kIHRoZSBWRklPIGNvbnRleHQgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB0aGUgbWVkaWF0ZWQgZGV2aWNlIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEknbSB0aGlua2luZyBhYm91dCByZXNvdXJjZSBhbGxvY2F0aW9uLCBzZWN1cml0eSBjaGVja3MsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiB0aWVzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIGRldmljZSBwYXNzdGhyb3VnaC4gQXJlIHRoZXJlIGFueSBsb2NrcyBpbnZvbHZlZD8gU3luY2hyb25pemF0aW9uIGlzIGFsd2F5cyBpbXBvcnRhbnQgaW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYXMgd2VsbDsgd2hhdCBoYXBwZW5zIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzLCBhbmQgaG93IGRvZXMgdGhlIHN5c3RlbSByZWNvdmVyPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSBhbnkgbmVjZXNzYXJ5IHNldHVwIGZvciBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBpcyBpbml0aWFsaXplZC4gTGV0J3Mgc2VlIGhvdyB0aGF0IHRpZXMgaW50byB0aGUgZXhpc3RpbmcgVkZJTyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTUwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NDQuNTE3ODc0NDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM4MDpcXHRcXHRcXHQuZGV2X2dyb3VwcyA9IHZmaW9fYXBfbWRldl9hdHRyX2dyb3VwcyxcXG4yMzgxOlxcdFxcdH0sXFxuMjM4MjpcXHRcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmUsXFxuMjM4MzpcXHRcXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4yMzg0OlxcdH07XFxuMjM4NTpcXHRcXG4yMzg2OlxcdGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcXG4yMzg3OlxcdHtcXG4yMzg4OlxcdFxcdGludCByZXQ7XFxuMjM4OTpcXHRcXG4yMzkwOlxcdFxcdHJldCA9IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIpO1xcbjIzOTE6XFx0XFx0aWYgKHJldClcXG4yMzkyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZS5zeXNmc19uYW1lID0gVkZJT19BUF9NREVWX1RZUEVfSFdWSVJUO1xcbjIzOTU6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlLnByZXR0eV9uYW1lID0gVkZJT19BUF9NREVWX05BTUVfSFdWSVJUO1xcbjIzOTY6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlcyA9IFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGU7XFxuMjM5NzpcXHRcXHRyZXQgPSBtZGV2X3JlZ2lzdGVyX3BhcmVudChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlcGFyZW50LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLFxcbjIzOTg6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcixcXG4yMzk5OlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGVzLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NDQuNTE4MDU4NjI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg1NzExMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTWF0cml4IERldmljZSBDb250ZXh0KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgaW5kaWNhdGluZyBhbiBtZGV2IHBhcmVudCBhc3NvY2lhdGlvbiBvbiBgbWF0cml4X2Rldi1cdTAwM2VkZXZpY2VgLiBUaGF0J3MgdGhlIGtleSBsaW5lLCBjbGVhcmx5IGxpbmtpbmcgdGhlIG1hdHJpeCBkZXZpY2Ugc3RydWN0dXJlIHRvIGEgcGFyZW50IG1kZXYgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGBtYXRyaXhfZGV2YCBzdHJ1Y3R1cmUgKmFjdHVhbGx5KiBpbnN0YW50aWF0ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGl0cyBjcmVhdGlvbiBwb2ludC4gS25vd2luZyB3aGVyZSBpdCdzIGluaXRpYWxpemVkLCBwb3B1bGF0ZWQsIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmVkIHdpbGwgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9uIHBvaW50cyB3aXRoIHRoZSB2aXJ0dWFsaXphdGlvbiBsYXllci4gVGhpcyBsb29rcyBsaWtlIGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgd2hvbGUgc3lzdGVtLCBzbyBsZXQncyBzdGFydCBkaWdnaW5nIGRlZXBlciBhbmQgZmluZCBpdCdzIG9yaWdpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NDcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjQ3LjcyNjYzMzI1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4MjE5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF0cml4X2RldiA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9Njc9c3RhdGljIHZvaWQgdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTcwLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo3MTpcXHRtYXRyaXhfZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFwX21hdHJpeF9kZXYsIGRldmljZSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTcyLVxcdGtmcmVlKG1hdHJpeF9kZXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTg2PXN0YXRpYyBpbnQgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTk4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo5OTpcXHRtYXRyaXhfZGV2ID0ga3phbGxvY19vYmooKm1hdHJpeF9kZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMDAtXFx0aWYgKCFtYXRyaXhfZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUxOjQ3Ljc5NDQ1OTE3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAyMDk5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiDigJMgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBWRklPIGhhbmRsZXMgdGhlIGNvbXBsZXggdG9wb2xvZ3kgb2YgYXR0YWNoZWQgZGV2aWNlcyBhbmQgYWNjZXNzIHBvaW50cy4gSSBuZWVkIHRvIGtlZXAgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGRldmljZSBpbiBtaW5kIHdoaWxlIGdvaW5nIHRocm91Z2ggaXQuXG5cbioqTXkgQXBwcm9hY2ggdG8gYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgKipcblxuUmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24gc3RlcC1ieS1zdGVwLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGB2ZmlvX2FwX21hdHJpeF9kZXZpY2VgIGFuZCBob3cgaXQncyBpbml0aWFsaXplZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGFjY2VzcyBwb2ludCAoQVApIGFuZCBhdHRhY2hlZCBkZXZpY2UgcmVsYXRpb25zaGlwcyBhcmUgZXN0YWJsaXNoZWQgd2l0aGluIHRoaXMgc3RydWN0dXJlLCBhbmQgdGhlIGNoZWNrcyBpdCBwZXJmb3Jtcy4gVW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdmFyaW91cyBmaWVsZHMgaGVyZSBpcyBwYXJhbW91bnQuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGUgVkZJTyBBUEkgZW5mb3JjZXMgdGhvc2UgZnVuZGFtZW50YWwgZGV2aWNlIHJlbGF0aW9uc2hpcHMsIGhvdyBpdCBpcyBzdG9yZWQsIGFuZCBhbnkgcG90ZW50aWFsIGNvcm5lciBjYXNlcyBpdCBtaWdodCBiZSBndWFyZGluZyBhZ2FpbnN0LCBzdWNoIGFzIG92ZXJsYXBwaW5nIHJlc291cmNlcyBvciBjb25mbGljdGluZyBhY2Nlc3MgbWFwcGluZ3MuIEdpdmVuIG15IGV4cGVydGlzZSwgSeKAmWxsIGFsc28gYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBBbnkgY2xldmVyIGJpdC1tYW5pcHVsYXRpb24sIGhhc2ggZnVuY3Rpb24gdXNhZ2Ugb3Igb3RoZXIgZWZmaWNpZW50IGxvb2t1cHMgdGhlIGNvZGUgZW1wbG95cyB3aWxsIHN0YW5kIG91dCB0byBtZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgZGV2aWNlIG1hdHJpeCBpcyBjb25zdHJ1Y3RlZCBhbmQgbWFpbnRhaW5lZCBmcm9tIHRoZSBtb21lbnQgdGhlIFZGSU8gY29yZSBpcyB0b2xkIHRvIGNyZWF0ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo1MS4xOTY1NjAxNTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDg2OlxcdHN0YXRpYyBpbnQgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSh2b2lkKVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0aW50IHJldDtcXG4gIDg5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2aWNlO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcXG4gIDkyOlxcdFxcdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxcbiAgOTM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocm9vdF9kZXZpY2UpO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRyZXQgPSBidXNfcmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9idXMpO1xcbiAgOTY6XFx0XFx0aWYgKHJldClcXG4gIDk3OlxcdFxcdFxcdGdvdG8gYnVzX3JlZ2lzdGVyX2VycjtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0bWF0cml4X2RldiA9IGt6YWxsb2Nfb2JqKCptYXRyaXhfZGV2KTtcXG4gMTAwOlxcdFxcdGlmICghbWF0cml4X2Rldikge1xcbiAxMDE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMTAyOlxcdFxcdFxcdGdvdG8gbWF0cml4X2FsbG9jX2VycjtcXG4gMTAzOlxcdFxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0LyogRmlsbCBpbiBjb25maWcgaW5mbyB2aWEgUFFBUChRQ0kpLCBpZiBhdmFpbGFibGUgKi9cXG4gMTA2OlxcdFxcdGlmICh0ZXN0X2ZhY2lsaXR5KDEyKSkge1xcbiAxMDc6XFx0XFx0XFx0cmV0ID0gYXBfcWNpKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VpbmZvKTtcXG4gMTA4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDEwOTpcXHRcXHRcXHRcXHRnb3RvIG1hdHJpeF9hbGxvY19lcnI7XFxuIDExMDpcXHRcXHR9XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiAxMTM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuIDExNDpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiJXNcXFwiLCBWRklPX0FQX0RFVl9OQU1FKTtcXG4gMTE3OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5wYXJlbnQgPSByb290X2RldmljZTtcXG4gMTE4OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5idXMgPSBcXHUwMDI2bWF0cml4X2J1cztcXG4gMTE5OlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5yZWxlYXNlID0gdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2U7XFxuIDEyMDpcXHRcXHRtYXRyaXhfZGV2LVxcdTAwM2V2ZmlvX2FwX2RydiA9IFxcdTAwMjZ2ZmlvX2FwX2RydjtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0cmV0ID0gZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiAxMjM6XFx0XFx0aWYgKHJldClcXG4gMTI0OlxcdFxcdFxcdGdvdG8gbWF0cml4X3JlZ19lcnI7XFxuIDEyNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NTEuMTk2NjI1NzA1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODc1NDM1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVW5kZXJzdGFuZGluZyBvZiB0aGUgTWF0cml4IERldmljZSBhbmQgVkZJTy1BUCBJbml0aWFsaXphdGlvbioqXG5cblJpZ2h0LCBzbyBgbWF0cml4X2RldmAgaXMgZXN0YWJsaXNoZWQgYXMgdGhlIGZ1bmRhbWVudGFsIHJvb3QgZGV2aWNlLiBBbmQgaXQncyBzZXQgdXAgdG8gbWFuYWdlIHRoZSBtZGV2cy4gQ29vbC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSd2ZSBnb3QgYSBmcmFtZXdvcmsgaGVyZS4gSXQncyBkZXNpZ25lZCB0byByZWdpc3RlciBhbiBtZGV2IHBhcmVudCBvbiBpdCwgd2hpY2ggbWVhbnMgd2UnbGwgYmUgYWJsZSB0byBjcmVhdGUgb3VyIG1kZXZzIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCdzIGdvb2QsIHByZWRpY3RhYmxlIGJlaGF2aW9yLiBFYXNpZXIgdG8gbWFuYWdlLCBzY3JpcHQsIGFuZCB1bmRlcnN0YW5kLiBJIGxpa2UgdGhhdC5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoaXMuIFRoYXQgYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgIGZ1bmN0aW9uLi4uIHRoYXQncyBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgYHZmaW9fYXBfaW5pdGAuIE9rYXksIHNvIHRoZSBtYXRyaXggZGV2aWNlIGlzIGNyZWF0ZWQgYXMgcGFydCBvZiB0aGUgVkZJTy1BUCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhhdCBjbGFyaWZpZXMgdGhlIHRpbWVsaW5lLiBJdCdzIGZ1bmRhbWVudGFsIHRvIGdldHRpbmcgdGhlIHdob2xlIFZGSU8tQVAgc3lzdGVtIHJ1bm5pbmcuIEdvdCBpdC4gTm93IEkgY2FuIHNlZSB0aGUgZmxvdyBmcm9tIHN0YXJ0dXAgdG8gYXZhaWxhYmlsaXR5IG9mIG1kZXZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NTQuNDg0MTcxMzA0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjc6XFx0c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRpbnQgcmV0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXQgPSB2ZmlvX2FwX2RiZl9pbmZvX2luaXQoKTtcXG4gMTcyOlxcdFxcdGlmIChyZXQpXFxuIDE3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cXG4gMTc2OlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxcbiAxNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldCA9IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUoKTtcXG4gMTgwOlxcdFxcdGlmIChyZXQpXFxuIDE4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRyZXQgPSBhcF9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XFxuIDE4NDpcXHRcXHRpZiAocmV0KSB7XFxuIDE4NTpcXHRcXHRcXHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xcbiAxODY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTg3OlxcdFxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0cmV0ID0gdmZpb19hcF9tZGV2X3JlZ2lzdGVyKCk7XFxuIDE5MDpcXHRcXHRpZiAocmV0KSB7XFxuIDE5MTpcXHRcXHRcXHRhcF9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYpO1xcbiAxOTI6XFx0XFx0XFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTk1OlxcdFxcdH1cXG4gMTk2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MTo1NC40ODQyNDExODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNjE3OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipBUCBJbnN0cnVjdGlvbiBBdmFpbGFiaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGdvdHRhIG1ha2Ugc3VyZSB0aGUgaGFyZHdhcmUncyBldmVuIGNhcGFibGUgb2Ygd2hhdCB3ZSdyZSBhYm91dCB0byBkby4gSSBzZWUgdGhpcyBgaWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHJldHVybiAtRU5PREVWO2AgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBjcnVjaWFsIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIHNhZmV0eSBjaGVjazsgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGV4ZWN1dGUgcHJpdmlsZWdlZCBpbnN0cnVjdGlvbnMgaWYgdGhlIENQVSBkb2Vzbid0IHN1cHBvcnQgdGhlbS4gVGhhdCByZXR1cm4gdmFsdWUsIGAtRU5PREVWYCwgYWxzbyBpbmRpY2F0ZXMgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSDigJMgbm8gZGV2aWNlIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUsIGVzc2VudGlhbGx5LiBTbywgYmVmb3JlIGFueXRoaW5nIGVsc2UsIEknbSBkaXZpbmcgaW4gdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoYXQgY2hlY2ssIHByZWNpc2VseSBob3cgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGZhY3RvcnMgaXQgY29uc2lkZXJzLiBJcyBpdCByZWFkaW5nIGEgQ1BVSUQgYml0PyBTb21lIG90aGVyIGNvbnRyb2wgcmVnaXN0ZXI/IFdoYXQncyB0aGUgZGV0ZWN0aW9uIGxvZ2ljPyBUaGlzIGluaXRpYWwgZ2F0ZWtlZXBpbmcgaXMgKmVzc2VudGlhbCogZm9yIGEgcm9idXN0IGFuZCBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbi4gR290dGEgZW5zdXJlIHdlJ3JlIGdyYWNlZnVsbHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhvc2UgaW5zdHJ1Y3Rpb25zIGFyZW4ndCBwcmVzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTE6NTcuOTAwNDIyOTIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyMDg1MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODAtLyoqXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Mi0gKlxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODU6c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTEwNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9jcnlwdG8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRU5BQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTI6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1My1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTk6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE2MC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU2LVxcdFxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjE1NzpcXHRcXHRcXHRyZXQgPSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgPyAwIDogLUVOWElPO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDE9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMDU6XFx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA2LVxcdFxcdGlmIChhcF9xY2koXFx1MDAyNmluZm8pID09IDApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDAtXFx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo2MDE6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjU4MjpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cXHRcXHRwcl93YXJuKFxcXCJUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc1LVxcdC8qIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFzcyB0aHJvdWdoLiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE3Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MDAuMTMyNTIxODQ1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjgxNjQ5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU3lzdGVtIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYWNjZXNzIHBvaW50IGluc3RydWN0aW9ucy4gIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmhgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYC4gIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIEFjY2VzcyBQb2ludCBpbnN0cnVjdGlvbnMgb24gdGhpcyBTLzM5MCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MDQuMzYwNjkwMTAyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHQvKipcXG4gIDgxOlxcdCAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXFxuICA4MjpcXHQgKlxcbiAgODM6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBBUCBpbnN0cnVjdGlvbnMgYXJlIGluc3RhbGxlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAgODQ6XFx0ICovXFxuICA4NTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxcbiAgODY6XFx0e1xcbiAgODc6XFx0XFx0dW5zaWduZWQgbG9uZyByZWcwID0gQVBfTUtRSUQoMCwgMCk7XFxuICA4ODpcXHRcXHR1bnNpZ25lZCBsb25nIHJlZzEgPSAwO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRhc20gdm9sYXRpbGUoXFxuICA5MTpcXHRcXHRcXHRcXFwiXFx0bGdyXFx0MCwlW3JlZzBdXFxcXG5cXFwiXFx0XFx0LyogcWlkIGludG8gZ3IwICovXFxuICA5MjpcXHRcXHRcXHRcXFwiXFx0bGdoaVxcdDEsMFxcXFxuXFxcIlxcdFxcdFxcdC8qIDAgaW50byBncjEgKi9cXG4gIDkzOlxcdFxcdFxcdFxcXCJcXHRsZ2hpXFx0MiwwXFxcXG5cXFwiXFx0XFx0XFx0LyogMCBpbnRvIGdyMiAqL1xcbiAgOTQ6XFx0XFx0XFx0XFxcIlxcdC5pbnNuXFx0cnJlLDB4YjJhZjAwMDAsMCwwXFxcXG5cXFwiXFx0LyogUFFBUChUQVBRKSAqL1xcbiAgOTU6XFx0XFx0XFx0XFxcIjA6XFx0bGFcXHQlW3JlZzFdLDFcXFxcblxcXCJcXHRcXHQvKiAxIGludG8gcmVnMSAqL1xcbiAgOTY6XFx0XFx0XFx0XFxcIjE6XFxcXG5cXFwiXFxuICA5NzpcXHRcXHRcXHRFWF9UQUJMRSgwYiwgMWIpXFxuICA5ODpcXHRcXHRcXHQ6IFtyZWcxXSBcXFwiK1xcdTAwMjZkXFxcIiAocmVnMSlcXG4gIDk5OlxcdFxcdFxcdDogW3JlZzBdIFxcXCJkXFxcIiAocmVnMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MDQuMzYwODY4OTkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzk5Mzk4MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEFQLVJlbGF0ZWQgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYFBRQVAoVEFQUSlgIGluc3RydWN0aW9uLiBUaGUgY29kZSBjaGVja3MgZm9yIGEgdHJhcCBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCBoYXBwZW5zLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSBHQ0Ugb3IgUUVNVT9cblxuRmlyc3QgdGhvdWdodCwgZG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBgUFFBUGA/IEkga25vdyBRRU1VIGhhcyBzb21lIHMzOTB4IEFQIGVtdWxhdGlvbiwgYnV0IGlzIGl0IG9uIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IHNvbWV0aGluZyB5b3UgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZT8gSSByZWNhbGwgdGhhdCBBUCBpbnN0cnVjdGlvbnMgdXN1YWxseSBuZWVkIHRoZSBob3N0IHRvIGVpdGhlciBoYXZlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gcGFzcyB0aHJvdWdoLCBvciBmb3IgUUVNVSBpdHNlbGYgdG8gZW11bGF0ZSB0aGVtLlxuXG5BbHJpZ2h0LCBRRU1VIGhhcyBgYXAtYnJpZGdlYCBhbmQgYGFwLW1hdHJpeGAgZGV2aWNlcywgYnV0IHRob3NlIGFyZSBmb3IgKnBhc3NpbmcgdGhyb3VnaCogaG9zdCBBUCBkZXZpY2VzLCBub3QgZW11bGF0aW5nIHRoZW0uIFNvLCBkb2VzIFFFTVUgZG8gc29mdHdhcmUgZW11bGF0aW9uIG9mIEFQIGRldmljZXM/IE5vcGUsIGl0J3MgVkZJTyBhbGwgdGhlIHdheSDigJMgdXNpbmcgYHZmaW8tYXBgIGZvciBwYXNzdGhyb3VnaCBvbmx5LiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZSB0byBiZWdpbiB3aXRoLCB0aGVuIGB2ZmlvX2FwX2luaXRgIHJldHVybnMgYC1FTk9ERVZgLiBUaGF0IG1lYW5zIHRoZSBtb2R1bGUgaXNuJ3QgbG9hZGVkIGFuZCB0aGUgbWRldiBkcml2ZXIgaXNuJ3QgcmVnaXN0ZXJlZCwgbWFraW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBBUCBoYXJkd2FyZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjazogaWYgSSBydW4gUUVNVSB3aXRoIGAtY3B1IG1heGAsIGRvZXMgdGhhdCBzZXQgdGhlIEFQIGZhY2lsaXR5PyBBbmQgaXMgdGhlcmUgYW55IEtWTSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIEFQPyBJIHJlbWVtYmVyIEtWTSBjYW4gaW50ZXJjZXB0IGBQUUFQYCwgYnV0IHBhc3NlcyBpdCB0byB0aGUgYHZmaW9fYXBgIGRyaXZlci4gV2FpdCwgdGhlIGB2ZmlvX2FwYCBkcml2ZXIgSVMgdGhlIGRyaXZlciBmb3IgaGFuZGxpbmcgUFFBUCBmb3IgZ3Vlc3RzISBCdXQgdGhhdCBydW5zIG9uIHRoZSAqaG9zdCouIElmIHRoZSBob3N0IGlzIGEgVk0gKGxpa2UgUUVNVSksIGNhbiBpdCBldmVuICpoYXZlKiBBUCBpbnN0cnVjdGlvbnM/IElmIHRoZSBob3N0IGlzIGEgUUVNVSBWTSwgaXQgY2FuIG9ubHkgaGF2ZSBBUCBpbnN0cnVjdGlvbnMgaWYgdGhlIEwwIGhvc3QgcGFzc2VkIHRoZW0gdGhyb3VnaC5cblxuTm93LCBzeXprYWxsZXIgaXMgdGhlIGNvbnRleHQgaGVyZSwgcmlnaHQ/IEl0IHJ1bnMgaW4gUUVNVSBvbiBHQ0UsIHdoaWNoIGlzIHVzdWFsbHkgeDg2XzY0IG9yIGFybTY0LCBidXQgbWF5YmUgczM5MHggb24gSUJNIENsb3VkLiBPa2F5LCBzbyBzeXprYWxsZXIgKmRvZXMqIHJ1biBzMzkweCBvbiBJQk0gQ2xvdWQgb3IgUUVNVS4gSWYgaXQncyBvbiBRRU1VIG9uIHg4Nl82NCAoVENHKSwgUUVNVSBkb2Vzbid0IGVtdWxhdGUgQVAuIElmIGl0J3MgS1ZNIG9uIHMzOTB4LCB0aGVuIG1heWJlLCAqbWF5YmUqIGlmIHRoZSBob3N0IGhhcyB0aGVtLlxuXG5CdXQgdGhlIHByb21wdCBlbXBoYXNpemVzIHRoaW5ncyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIG9yIGNvZGUgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIE5vdywgaXMgQVAgYSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBZZXMhIEFkanVuY3QgUHJvY2Vzc29ycyAoQ3J5cHRvRXhwcmVzcyBDYXJkcykgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIG9uIElCTSBaLiBUaGV5IGFyZSAqbm90KiBzb2Z0d2FyZS1lbXVsYXRlZCBieSBRRU1VLiBRRU1VIG9ubHkgZG9lcyBwYXNzdGhyb3VnaCB2aWEgVkZJTy5cblxuVGhlcmVmb3JlLCB0aGUgYHZmaW9fYXBgIGRyaXZlciBjYW4ndCBpbml0aWFsaXplIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IHJlYWwgcGh5c2ljYWwgQVAgY2FyZHMuIENvbmZpcm1pbmcgdGhpcywgaWYgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgcmV0dXJucyBmYWxzZSwgdGhlbiBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYC4gQ2FuIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHJldHVybiB0cnVlIGluIFFFTVUgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZT8gSSdtIHByZXR0eSBzdXJlIG5vdC4gRXNwZWNpYWxseSBpbiBRRU1VIFRDRyAoc29mdHdhcmUgZW11bGF0aW9uIG9mIHMzOTB4KSwgaXQgd291bGQgKm5ldmVyKiBlbXVsYXRlIEFQIGluc3RydWN0aW9ucy5cblxuQVAgaW5zdHJ1Y3Rpb25zIGxpa2UgUFFBUCBhcmUgc3VwZXIgc3BlY2lmaWMgdG8gSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMuIFRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZSBjcnlwdG8gY2FyZHMgaW4gUUVNVS4gUUVNVSBvbmx5IHByb3ZpZGVzIHRoZSBgdmZpby1hcGAgZGV2aWNlLCByZXF1aXJpbmcgYSBob3N0IFZGSU8gZGV2aWNlLiBTbywgYHZmaW9fYXBfaW5pdGAgaXMgZ29pbmcgdG8gZmFpbC4gV2FpdCwgd2hhdCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBhbiBzMzkweCBMUEFSIG9yIEtWTSB3aXRoIEFQIGNhcmRzPyBCdXQgdGhlIHByb21wdCBzdGF0ZXMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgQVAgY2FyZHMgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIVxuXG5TbyB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeSwgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgdGhlcmUgc29tZSBmYWtlIEFQIGRyaXZlciwgbGlrZSBhIHRlc3RpbmcgdXRpbGl0eT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MjoxNy43NjAyNzExODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTE4NjM2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFrZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MTguMTU5NDY2MDcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTY1NTY0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERldmljZSBEaXNjb3ZlcnkqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gYW55IGRlZXBlciBhbmFseXNpcywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXN0YWJsaXNoIGEgYmFzZWxpbmUuIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGltbWVkaWF0ZSBpbmRpY2F0aW9uIG9mIGEgc29mdHdhcmUgQVAgZGV2aWNlIHByZXNlbnQuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCwgYSBxdWljayBzY2FuIHRvIGRldGVybWluZSB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGludmVzdCBpbiBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIG9yIGFuYWx5c2lzLiBJdCdzIGFib3V0IGVmZmljaWVuY3k7IGlkZW50aWZ5aW5nIGEgc29mdHdhcmUgQVAgY3V0cyBkb3duIHNpZ25pZmljYW50bHkgb24gdGhlIHBvdGVudGlhbCBzY29wZSBvZiB0aGUgcHJvYmxlbSBzcGFjZSwgcGFydGljdWxhcmx5IGlmIEkga25vdyBob3cgdG8gc3BvdCB0aGUgY29tbW9uIGNoYXJhY3RlcmlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzo1MjoyMS41NzYwMjQ0ODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUxNjY5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdHdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUyOjIxLjY4NDU0NjQ5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc0OTMzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmZpb19hcCBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgY2FuIHdlIGJ5cGFzcyB0aGlzIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCBjaGVjaz8gTm9wZSwgdGhhdCdzIGlubGluZSBhc3NlbWJseSwgZXhwbGljaXRseSBsb29raW5nIGZvciBhIHRyYXAuIFNvLCB3aXRob3V0IGFjdHVhbCBBUCBoYXJkd2FyZSwgdGhhdCBjb2RlIGlzIGRlYWQgaW4gdGhlIHdhdGVyLiBXYWl0LCBhbSBJIHVuZGVyc3RhbmRpbmcgYHZmaW9fYXBgIGNvcnJlY3RseT8gSXMgaXQgKmZvciogdGhlIEFQIGhhcmR3YXJlIGl0c2VsZiwgb3IgaXMgaXQgdG8gbWFrZSB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlIHRvIFZNcz8gQWgsIGl0J3MgdGhlIGxhdHRlcjogaXQncyBhIFZGSU8gZHJpdmVyLCB3aGljaCBtZWFucyBpdCBkZW1hbmRzIHJlYWwsIHBoeXNpY2FsIEFQIGhhcmR3YXJlIG9uIHRoZSBob3N0LiBBbmQgc2luY2Ugc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdCDigJMgd2UncmUgdGFsa2luZyBDcnlwdG9FeHByZXNzIGNhcmRzIOKAkyBzeXprYWxsZXIgaW4gYSB0eXBpY2FsIHNldHVwIHdvbid0IGJlIGFibGUgdG8gdG91Y2ggdGhpcyBjb2RlLlxuXG5SaWdodCwgYmFjayB0byB0aGUgcGF0Y2guIEl0J3MgbW9kaWZ5aW5nIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIEJhc2ljYWxseSwgYSBsb2NraW5nIG9yZGVyIGNoYW5nZSB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQncyB0YWtpbmcgYGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW1gICpiZWZvcmUqIGl0IG1lc3NlcyB3aXRoIGBwcWFwX2hvb2tgLiBTb3VuZHMgZmluZSwgZnVuY3Rpb25hbGx5LCBidXQgc3RpbGwgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgQVAgaGFyZHdhcmUuXG5cbk5vdywgaXMgdGhlcmUgKmFueSogc2NlbmFyaW8gd2hlcmUgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBnZXRzIGNhbGxlZCB3aXRob3V0IHRoZSBBUCBoYXJkd2FyZSBiZWluZyBwcmVzZW50PyBCZXR0ZXIgY2hlY2sgYHZmaW9fYXBfbWRldl9vcGVuX2RldmljZWAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MjcuMjU5NDgyOTg5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzk4MDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwMzQ9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1MjpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTMte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM2MS1cXHQuaW5pdCA9IHZmaW9fYXBfbWRldl9pbml0X2RldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM2MjpcXHQub3Blbl9kZXZpY2UgPSB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2UsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNjMtXFx0LmNsb3NlX2RldmljZSA9IHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjUyOjI3LjMxMzQ3MDM4OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NTIxMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipWZmlvLUFQIERldmljZSBPcGVyYXRpb25zOiBBIFF1aWNrIFJ1bi1UaHJvdWdoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHZmaW9fYXBfbWF0cml4X2Rldl9vcHNgIGlzIGRpcmVjdGx5IHRpZWQgaW50byB0aGUgYHZmaW9fYXBfbWRldl9wcm9iZWAgZnVuY3Rpb24uIFNvLCBlc3NlbnRpYWxseSwgdGhlIGB2ZmlvX2FwX21hdHJpeF9kZXZfb3BzYCBzdHJ1Y3R1cmUgbGlrZWx5IGRlZmluZXMgdGhlIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgdXNlZCB3aGVuIHByb2Jpbmcgb3IgZGlzY292ZXJpbmcgYSBtZWRpYXRlZCBkZXZpY2UgKG1kZXYpIHdpdGhpbiB0aGUgVkZJTy1BUCBjb250ZXh0LlxuXG5UaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlIG5lZWQgYSBkZWZpbmVkIHNldCBvZiBhY3Rpb25zIG9yIGhhbmRsZXJzIOKAkyB0aGF0IGBfZGV2X29wc2Agc3RydWN0dXJlIOKAkyB0byBtYW5hZ2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIEFQIGRldmljZSB3aGVuIGl0J3MgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgZGlzY292ZXJlZC4gVGhlIGBfbWRldl9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvYmluZyBwcm9jZXNzLiBJdCB3b3VsZCBiZSBoaWdobHkgcHJvYmFibGUgdGhhdCBhIHByb2JlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZXNlIHN0cnVjdHVyZXMuIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvZGUgdG8gc2F5IG1vcmUgZm9yIGNlcnRhaW4sIGJ1dCB0aGlzIHNlZW1zIHRoZSBtb3N0IGxpa2VseSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTk1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MzAuNzM3OTk0OTY2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgxNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zNz1zdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfZmluZF9xdWV1ZShpbnQgYXBxbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fYXBfbWF0cml4X2Rldl9vcHM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM5LXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NzkwPXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTUtXFx0bWF0cml4X21kZXYgPSB2ZmlvX2FsbG9jX2RldmljZShhcF9tYXRyaXhfbWRldiwgdmRldiwgXFx1MDAyNm1kZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzk2OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk3LVxcdGlmIChJU19FUlIobWF0cml4X21kZXYpKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdmZpb19xdWV1ZV9hdHRyX2dyb3VwID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNjA6c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19hcF9tYXRyaXhfZGV2X29wcyA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM2MS1cXHQuaW5pdCA9IHZmaW9fYXBfbWRldl9pbml0X2RldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MzAuNzk2ODE2Mzc1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTY5MDYzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIHdoZXRoZXIgdGhlIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgZnVuY3Rpb24gY2FuIGV2ZXIgYWN0dWFsbHkgYmUgY2FsbGVkLCBwYXJ0aWN1bGFybHkgaW4gYW4gZW52aXJvbm1lbnQgbGFja2luZyBwaHlzaWNhbCBBUCBoYXJkd2FyZS5cblxuTXkgdHJhaW4gb2YgdGhvdWdodCBnb2VzIGxpa2UgdGhpczogYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgdHJpZ2dlcmVkIGR1cmluZyBtZGV2IGNyZWF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCB0aGUgY3J1Y2lhbCBsaW5rIHNlZW1zIHRvIGJlIHRoZSBtZGV2IHBhcmVudCByZWdpc3RyYXRpb24sIHdoaWNoIGhhcHBlbnMgaW4gYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAuIFRoaXMgZnVuY3Rpb24gaXMgaXRzZWxmIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX2luaXRgLCB3aGljaCB0aGVuIGNoZWNrcyBpZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYC4gVGhlIHJlYWxseSB0ZWxsaW5nIHBhcnQgaXMgdGhhdCBgdmZpb19hcF9pbml0YCBiYWlscyBvdXQgd2l0aCBgLUVOT0RFVmAgaWYgdGhvc2UgQVAgaW5zdHJ1Y3Rpb25zIGFyZW4ndCBhdmFpbGFibGUuIFRoYXQgbWVhbnMgdGhlIHBhcmVudCBkZXZpY2UgcmVnaXN0cmF0aW9uICpuZXZlciogaGFwcGVucyB3aXRob3V0IHRoZSByaWdodCBoYXJkd2FyZS4gQ29uc2VxdWVudGx5LCBubyBtZGV2IGNhbiBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIHBhcmVudCBpcyBuZXZlciByZWdpc3RlcmVkLCB0aGVyZWJ5IGJsb2NraW5nIHRoZSBlbnRpcmUgY2hhaW4uXG5cbk5vdywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlICpldmVyeSogcG9zc2libGUgY2FsbCBwYXRoIHRvIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBgdmZpb19hcF9vcHMuY2AgZmlsZS4gSXRzIG9ubHkgY2FsbGVyIGlzIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgLiBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYCBpcyBvbmx5IGNhbGxlZCB0aHJvdWdoIGB2ZmlvX2RldmljZV9vcHNgLiBUaGF0IGluIHR1cm4gaXMgZXhjbHVzaXZlbHkgdXNlZCBieSBgdmZpb19hcF9tZGV2X3Byb2JlYC4gVGhpcyBwcm9iaW5nIGlzIHBhcnQgb2YgYHZmaW9fYXBfbWF0cml4X2RyaXZlcmAsIHdoaWNoIGlzIGFsc28gcmVnaXN0ZXJlZCBpbiBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYCwgYW5kIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX2luaXRgLiBBcyB3ZSd2ZSBlc3RhYmxpc2hlZCwgdGhlIHBhdGggdGhyb3VnaCBgdmZpb19hcF9pbml0YCBoaW5nZXMgb24gYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAuXG5cbkdpdmVuIHRoYXQgdGhvcm91Z2ggdHJhY2luZywgSSdtIGNvbmZpZGVudCB0aGF0IGl0IGlzIGFic29sdXRlbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBBUCBoYXJkd2FyZS4gU3BlY2lmaWNhbGx5LCB0aGUgQ3J5cHRvRXhwcmVzcyBjYXJkcyBhcmUgcmVxdWlyZWQsIGFuZCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aG9zZS4gVGhlcmVmb3JlLCBJIHdpbGwgcmVzcG9uZCB3aXRoIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhlIGZ1bmN0aW9uIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB1bmRlciB0eXBpY2FsIHZpcnR1YWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc0OSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6NTI6MzguMDUzNzI1MTk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJQk0gQ3J5cHRvRXhwcmVzcyBjYXJkcyB0byBiZSBwcmVzZW50IG9uIHRoZSBob3N0IChjaGVja2VkIHZpYSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSUJNIENyeXB0b0V4cHJlc3MgY2FyZHMgdG8gYmUgcHJlc2VudCBvbiB0aGUgaG9zdCAoY2hlY2tlZCB2aWEgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowglcd8[1] Phase: Running StartedAt: 2026-07-29 23:52:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglcd8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-29 23:52:50 +0000 UTC FinishedAt: 2026-07-29 23:52:55 +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,}