Name: series-workflow2wzcf Phase: Succeeded StartedAt: 2026-06-30 13:07:51 +0000 UTC FinishedAt: 2026-06-30 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[0] Phase: Succeeded StartedAt: 2026-06-30 13:07:51 +0000 UTC FinishedAt: 2026-06-30 13:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 13:07:51 +0000 UTC FinishedAt: 2026-06-30 13:18:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIAL_MEN_Z135", "SERIAL_PCH_UART", "MCB", "MCB_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIAL_MEN_Z135", "SERIAL_PCH_UART", "MCB", "MCB_PCI" ], "series_id": "608645a5-23c3-4ea3-9e85-d8f55733a3d0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vcs_read", "vcs_write", "pch_uart_init_port", "pch_uart_exit_port", "men_z135_probe", "men_z135_remove", "rs_startup", "rs_shutdown" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklBTF9NRU5fWjEzNSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfUENIX1VBUlQmIzM0OywKICAgICYjMzQ7TUNCJiMzNDssCiAgICAmIzM0O01DQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2Y3NfcmVhZCYjMzQ7LAogICAgJiMzNDt2Y3Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfaW5pdF9wb3J0JiMzNDssCiAgICAmIzM0O3BjaF91YXJ0X2V4aXRfcG9ydCYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9wcm9iZSYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cnNfc3RhcnR1cCYjMzQ7LAogICAgJiMzNDtyc19zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbnMgKF9fZ2V0X2ZyZWVfcGFnZSwgZnJlZV9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoa21hbGxvYywga2ZyZWUpIGFjcm9zcyBzZXZlcmFsIHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMgKHZjX3NjcmVlbiwgcGNoX3VhcnQsIG1lbl96MTM1X3VhcnQsIGFtaXNlcmlhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IGFsbG9jYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTU5ODBjODEwMzg4ZTRiNWIyYjMyZDQ4YTMxYjFlNWE3NGZmMjMwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDEzOjE1OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcbmluZGV4IDgxZWFjYTc1MTU0MWFiLi4yOGFmMGZkOTgxODE4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuY1xuQEAgLTQ0MywyMyAmIzQzOzQ0MywyMyBAQCBzdGF0aWMgaW50IHJzX3N0YXJ0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbylcbiBcdHN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9IFx1MDAyNmluZm8tXHUwMDNldHBvcnQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRyZXR2YWw9MDtcbi1cdHVuc2lnbmVkIGxvbmcgcGFnZTtcbiYjNDM7XHR2b2lkICpidWZmZXI7XG4gXG4tXHRwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuLVx0aWYgKCFwYWdlKVxuJiM0MztcdGJ1ZmZlciA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXG4gXHRpZiAodHR5X3BvcnRfaW5pdGlhbGl6ZWQocG9ydCkpIHtcbi1cdFx0ZnJlZV9wYWdlKHBhZ2UpO1xuJiM0MztcdFx0a2ZyZWUoYnVmZmVyKTtcbiBcdFx0Z290byBlcnJvdXQ7XG4gXHR9XG4gXG4gXHRpZiAoaW5mby1cdTAwM2V4bWl0LmJ1Zilcbi1cdFx0ZnJlZV9wYWdlKHBhZ2UpO1xuJiM0MztcdFx0a2ZyZWUoYnVmZmVyKTtcbiBcdGVsc2Vcbi1cdFx0aW5mby1cdTAwM2V4bWl0LmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHBhZ2U7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXhtaXQuYnVmID0gYnVmZmVyO1xuIFxuICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTlxuIFx0cHJpbnRrKFwmIzM0O3N0YXJ0aW5nIHVwIHR0eXMlZCAuLi5cJiMzNDssIGluZm8tXHUwMDNlbGluZSk7XG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBzdGF0aWMgdm9pZCByc19zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKVxuIFx0ICovXG4gXHRmcmVlX2lycShJUlFfQU1JR0FfVkVSVEIsIGluZm8pO1xuIFxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWluZm8tXHUwMDNleG1pdC5idWYpO1xuJiM0MztcdGtmcmVlKGluZm8tXHUwMDNleG1pdC5idWYpO1xuIFx0aW5mby1cdTAwM2V4bWl0LmJ1ZiA9IE5VTEw7XG4gXG4gXHRpbmZvLVx1MDAzZUlFUiA9IDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcbmluZGV4IDZmYWQ1N2ZlZTkxMmMyLi45MTM4ZmEyOWQzMDFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R0eV9mbGlwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21jYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUVOX1oxMzVfTUFYX1BPUlRTXHRcdDEyXG4gI2RlZmluZSBNRU5fWjEzNV9CQVNFQ0xLXHRcdDI5NDkxMjAwXG5AQCAtODExLDcgJiM0Mzs4MTIsNyBAQCBzdGF0aWMgaW50IG1lbl96MTM1X3Byb2JlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2LFxuIFx0aWYgKCF1YXJ0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHVhcnQtXHUwMDNlcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcbiYjNDM7XHR1YXJ0LVx1MDAzZXJ4YnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCF1YXJ0LVx1MDAzZXJ4YnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC04NDEsNyAmIzQzOzg0Miw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXHUwMDNlcnhidWYpO1xuJiM0MztcdGtmcmVlKHVhcnQtXHUwMDNlcnhidWYpO1xuIFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBhZGQgVUFSVDogJWRcXG5cJiMzNDssIGVycik7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTg1OCw3ICYjNDM7ODU5LDcgQEAgc3RhdGljIHZvaWQgbWVuX3oxMzVfcmVtb3ZlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2KVxuIFxuIFx0bGluZS0tO1xuIFx0dWFydF9yZW1vdmVfb25lX3BvcnQoXHUwMDI2bWVuX3oxMzVfZHJpdmVyLCBcdTAwMjZ1YXJ0LVx1MDAzZXBvcnQpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB1YXJ0LVx1MDAzZXJ4YnVmKTtcbiYjNDM7XHRrZnJlZSh1YXJ0LVx1MDAzZXJ4YnVmKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtY2JfZGV2aWNlX2lkIG1lbl96MTM1X2lkc1tdID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmNcbmluZGV4IDgwZTMxYzRkOTUzNmQxLi41ZjdmMDczZjI4NWUxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xuQEAgLTE2NjIsNyAmIzQzOzE2NjIsNyBAQCBzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGlmIChwcml2ID09IE5VTEwpXG4gXHRcdGdvdG8gaW5pdF9wb3J0X2FsbG9jX2VycjtcbiBcbi1cdHJ4YnVmID0gKHVuc2lnbmVkIGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXJ4YnVmKVxuIFx0XHRnb3RvIGluaXRfcG9ydF9mcmVlX3R4YnVmO1xuIFxuQEAgLTE3MzUsNyAmIzQzOzE3MzUsNyBAQCBzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAjaWZkZWYgQ09ORklHX1NFUklBTF9QQ0hfVUFSVF9DT05TT0xFXG4gXHRwY2hfdWFydF9wb3J0c1tib2FyZC1cdTAwM2VsaW5lX25vXSA9IE5VTEw7XG4gI2VuZGlmXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcnhidWYpO1xuJiM0MztcdGtmcmVlKHJ4YnVmKTtcbiBpbml0X3BvcnRfZnJlZV90eGJ1ZjpcbiBcdGtmcmVlKHByaXYpO1xuIGluaXRfcG9ydF9hbGxvY19lcnI6XG5AQCAtMTc1MCw3ICYjNDM7MTc1MCw3IEBAIHN0YXRpYyB2b2lkIHBjaF91YXJ0X2V4aXRfcG9ydChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdilcbiBcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7dWFydCVkX3JlZ3NcJiMzNDssIHByaXYtXHUwMDNlcG9ydC5saW5lKTtcbiBcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7XG4gXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcdTAwMjZwY2hfdWFydF9kcml2ZXIsIFx1MDAyNnByaXYtXHUwMDNlcG9ydCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHJpdi1cdTAwM2VyeGJ1Zi5idWYpO1xuJiM0MztcdGtmcmVlKHByaXYtXHUwMDNlcnhidWYuYnVmKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGNoX3VhcnRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYyBiL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jXG5pbmRleCA3ZDQwZWFjYzIxYjNlOC4uYmYxNTAyZmQ1YmQ0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcbkBAIC01Myw4ICYjNDM7NTMsNiBAQFxuICNkZWZpbmUgSEVBREVSX1NJWkVcdDR1XG4gI2RlZmluZSBDT05fQlVGX1NJWkUgKElTX0VOQUJMRUQoQ09ORklHX0JBU0VfU01BTEwpID8gMjU2IDogUEFHRV9TSVpFKVxuIFxuLURFRklORV9GUkVFKGZyZWVfcGFnZV9wdHIsIHZvaWQgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX1QpKTtcbi1cbiAvKlxuICAqIE91ciBtaW5vciBzcGFjZTpcbiAgKlxuQEAgLTM3MSw3ICYjNDM7MzY5LDcgQEAgdmNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0bG9mZl90IHBvcztcbiBcdGJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTtcbiBcbi1cdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0Y2hhciAqY29uX2J1ZiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFjb25fYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC01OTYsNyAmIzQzOzU5NCw3IEBAIHZjc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRpZiAodXNlX3VuaWNvZGUoaW5vZGUpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRjaGFyICpjb25fYnVmIF9fZnJlZShmcmVlX3BhZ2VfcHRyKSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdGNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghY29uX2J1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VSSUFMX01FTl9aMTM1JiMzNDssCiAgICAmIzM0O1NFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICAgJiMzNDtNQ0ImIzM0OywKICAgICYjMzQ7TUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zjc19yZWFkJiMzNDssCiAgICAmIzM0O3Zjc193cml0ZSYjMzQ7LAogICAgJiMzNDtwY2hfdWFydF9pbml0X3BvcnQmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfZXhpdF9wb3J0JiMzNDssCiAgICAmIzM0O21lbl96MTM1X3Byb2JlJiMzNDssCiAgICAmIzM0O21lbl96MTM1X3JlbW92ZSYjMzQ7LAogICAgJiMzNDtyc19zdGFydHVwJiMzNDssCiAgICAmIzM0O3JzX3NodXRkb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoX19nZXRfZnJlZV9wYWdlLCBmcmVlX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zIChrbWFsbG9jLCBrZnJlZSkgYWNyb3NzIHNldmVyYWwgdHR5IGFuZCBzZXJpYWwgZHJpdmVycyAodmNfc2NyZWVuLCBwY2hfdWFydCwgbWVuX3oxMzVfdWFydCwgYW1pc2VyaWFsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY291bGQgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgaW52YWxpZCBmcmVlcywgb3IgYWxpZ25tZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBuZXcgYWxsb2NhdGlvbiBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1OTgwYzgxMDM4OGU0YjViMmIzMmQ0OGEzMWIxZTVhNzRmZjIzMDMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAxMzoxNTozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmMKaW5kZXggODFlYWNhNzUxNTQxYWIuLjI4YWYwZmQ5ODE4MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYwpAQCAtNDQzLDIzICYjNDM7NDQzLDIzIEBAIHN0YXRpYyBpbnQgcnNfc3RhcnR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKQogCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZhbXA7aW5mby0mZ3Q7dHBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJcmV0dmFsPTA7Ci0JdW5zaWduZWQgbG9uZyBwYWdlOwomIzQzOwl2b2lkICpidWZmZXI7CiAKLQlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkKJiM0MzsJYnVmZmVyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlpZiAodHR5X3BvcnRfaW5pdGlhbGl6ZWQocG9ydCkpIHsKLQkJZnJlZV9wYWdlKHBhZ2UpOwomIzQzOwkJa2ZyZWUoYnVmZmVyKTsKIAkJZ290byBlcnJvdXQ7CiAJfQogCiAJaWYgKGluZm8tJmd0O3htaXQuYnVmKQotCQlmcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlrZnJlZShidWZmZXIpOwogCWVsc2UKLQkJaW5mby0mZ3Q7eG1pdC5idWYgPSAodW5zaWduZWQgY2hhciAqKSBwYWdlOwomIzQzOwkJaW5mby0mZ3Q7eG1pdC5idWYgPSBidWZmZXI7CiAKICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTgogCXByaW50aygmIzM0O3N0YXJ0aW5nIHVwIHR0eXMlZCAuLi4mIzM0OywgaW5mby0mZ3Q7bGluZSk7CkBAIC01MzcsNyAmIzQzOzUzNyw3IEBAIHN0YXRpYyB2b2lkIHJzX3NodXRkb3duKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzZXJpYWxfc3RhdGUgKmluZm8pCiAJICovCiAJZnJlZV9pcnEoSVJRX0FNSUdBX1ZFUlRCLCBpbmZvKTsKIAotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylpbmZvLSZndDt4bWl0LmJ1Zik7CiYjNDM7CWtmcmVlKGluZm8tJmd0O3htaXQuYnVmKTsKIAlpbmZvLSZndDt4bWl0LmJ1ZiA9IE5VTEw7CiAKIAlpbmZvLSZndDtJRVIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmMKaW5kZXggNmZhZDU3ZmVlOTEyYzIuLjkxMzhmYTI5ZDMwMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWVuX3oxMzVfdWFydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmMKQEAgLTE2LDYgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHR5X2ZsaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tY2IuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogCiAjZGVmaW5lIE1FTl9aMTM1X01BWF9QT1JUUwkJMTIKICNkZWZpbmUgTUVOX1oxMzVfQkFTRUNMSwkJMjk0OTEyMDAKQEAgLTgxMSw3ICYjNDM7ODEyLDcgQEAgc3RhdGljIGludCBtZW5fejEzNV9wcm9iZShzdHJ1Y3QgbWNiX2RldmljZSAqbWRldiwKIAlpZiAoIXVhcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdWFydC0mZ3Q7cnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJdWFydC0mZ3Q7cnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1YXJ0LSZndDtyeGJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTg0MSw3ICYjNDM7ODQyLDcgQEAgc3RhdGljIGludCBtZW5fejEzNV9wcm9iZShzdHJ1Y3QgbWNiX2RldmljZSAqbWRldiwKIAlyZXR1cm4gMDsKIAogZXJyOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgdWFydC0mZ3Q7cnhidWYpOwomIzQzOwlrZnJlZSh1YXJ0LSZndDtyeGJ1Zik7CiAJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGFkZCBVQVJUOiAlZFxuJiMzNDssIGVycik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtODU4LDcgJiM0Mzs4NTksNyBAQCBzdGF0aWMgdm9pZCBtZW5fejEzNV9yZW1vdmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYpCiAKIAlsaW5lLS07CiAJdWFydF9yZW1vdmVfb25lX3BvcnQoJmFtcDttZW5fejEzNV9kcml2ZXIsICZhbXA7dWFydC0mZ3Q7cG9ydCk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB1YXJ0LSZndDtyeGJ1Zik7CiYjNDM7CWtmcmVlKHVhcnQtJmd0O3J4YnVmKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtY2JfZGV2aWNlX2lkIG1lbl96MTM1X2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwppbmRleCA4MGUzMWM0ZDk1MzZkMS4uNWY3ZjA3M2YyODVlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCkBAIC0xNjYyLDcgJiM0MzsxNjYyLDcgQEAgc3RhdGljIHN0cnVjdCBlZzIwdF9wb3J0ICpwY2hfdWFydF9pbml0X3BvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJaWYgKHByaXYgPT0gTlVMTCkKIAkJZ290byBpbml0X3BvcnRfYWxsb2NfZXJyOwogCi0JcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJcnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeGJ1ZikKIAkJZ290byBpbml0X3BvcnRfZnJlZV90eGJ1ZjsKIApAQCAtMTczNSw3ICYjNDM7MTczNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWcyMHRfcG9ydCAqcGNoX3VhcnRfaW5pdF9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogI2lmZGVmIENPTkZJR19TRVJJQUxfUENIX1VBUlRfQ09OU09MRQogCXBjaF91YXJ0X3BvcnRzW2JvYXJkLSZndDtsaW5lX25vXSA9IE5VTEw7CiAjZW5kaWYKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcnhidWYpOwomIzQzOwlrZnJlZShyeGJ1Zik7CiBpbml0X3BvcnRfZnJlZV90eGJ1ZjoKIAlrZnJlZShwcml2KTsKIGluaXRfcG9ydF9hbGxvY19lcnI6CkBAIC0xNzUwLDcgJiM0MzsxNzUwLDcgQEAgc3RhdGljIHZvaWQgcGNoX3VhcnRfZXhpdF9wb3J0KHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KQogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDt1YXJ0JWRfcmVncyYjMzQ7LCBwcml2LSZndDtwb3J0LmxpbmUpOwogCWRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7CiAJdWFydF9yZW1vdmVfb25lX3BvcnQoJmFtcDtwY2hfdWFydF9kcml2ZXIsICZhbXA7cHJpdi0mZ3Q7cG9ydCk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXByaXYtJmd0O3J4YnVmLmJ1Zik7CiYjNDM7CWtmcmVlKHByaXYtJmd0O3J4YnVmLmJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaF91YXJ0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYyBiL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jCmluZGV4IDdkNDBlYWNjMjFiM2U4Li5iZjE1MDJmZDViZDRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKQEAgLTUzLDggJiM0Mzs1Myw2IEBACiAjZGVmaW5lIEhFQURFUl9TSVpFCTR1CiAjZGVmaW5lIENPTl9CVUZfU0laRSAoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAyNTYgOiBQQUdFX1NJWkUpCiAKLURFRklORV9GUkVFKGZyZWVfcGFnZV9wdHIsIHZvaWQgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX1QpKTsKLQogLyoKICAqIE91ciBtaW5vciBzcGFjZToKICAqCkBAIC0zNzEsNyAmIzQzOzM2OSw3IEBAIHZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAlsb2ZmX3QgcG9zOwogCWJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTsKIAotCWNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CWNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbl9idWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01OTYsNyAmIzQzOzU5NCw3IEBAIHZjc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiAJaWYgKHVzZV91bmljb2RlKGlub2RlKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JY2hhciAqY29uX2J1ZiBfX2ZyZWUoZnJlZV9wYWdlX3B0cikgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJY2hhciAqY29uX2J1ZiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghY29uX2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEFQSSBSZXBsYWNlbWVudCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBwYXRjaCByZXBsYWNlcyBgX19nZXRfZnJlZV9wYWdlYCBhbmQgYGZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AvYGt6YWxsb2NgIGFuZCBga2ZyZWVgIGluIGEgZmV3IHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMsIHNwZWNpZmljYWxseSBgYW1pc2VyaWFsLmNgLCBgbWVuX3oxMzVfdWFydC5jYCwgYHBjaF91YXJ0LmNgLCBhbmQgYHZjX3NjcmVlbi5jYC4gSXQmIzM5O3MgYSByZWZhY3RvcmluZywgZWZmZWN0aXZlbHkgc3dhcHBpbmcgb25lIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZCBmb3IgYW5vdGhlciwgZ29pbmcgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IgdG8gdGhlIHNsYWIgYWxsb2NhdG9yLgoKVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBJdCYjMzk7cyBub3QgKmFkZGluZyogbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc3RhdGVzLCBqdXN0IGNoYW5naW5nICpob3cqIG1lbW9yeSBpcyBhY3F1aXJlZC4gSXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBBUEkgcmVwbGFjZW1lbnQgYXQgZmlyc3QgZ2xhbmNlLgoKQnV0IHdhaXQsIGlzIHRoaXMgcHVyZWx5IGRlY29yYXRpdmUsIG9yIGEgY2hhbmdlIHRvIG51bWVyaWMgY29uc3RhbnRzIHRoYXQgZG9lc24mIzM5O3QgZnVuY3Rpb25hbGx5IGFsdGVyIGZsb3c/IE5vLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IG1lbW9yeSBpcyBoYW5kbGVkLiBUaGUgY29yZSBsb2dpYyByZW1haW5zIHRoZSBzYW1lLCB0aG91Z2guIElzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZywgdGhvdWdoPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQmIzM5O3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpb24sIGNvbnN0YW50IGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuIEFuZCB0aGVzZSBkcml2ZXJzIGFyZS4uLgoKKiAgIGBhbWlzZXJpYWwuY2A6IEFtaWdhIHNlcmlhbCBwb3J0LiBMaWtlbHkgbm90IHJlYWNoYWJsZSBpbiB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLgoqICAgYG1lbl96MTM1X3VhcnQuY2A6IE1FTiBDaGFtZWxlb24gQnVzIFVBUlQuCiogICBgcGNoX3VhcnQuY2A6IEludGVsIFBDSC9MQVBJUyBVQVJULgoqICAgYHZjX3NjcmVlbi5jYDogVmlydHVhbCBjb25zb2xlIGRyaXZlciwgYC9kZXYvdmNzKmAuIFRoaXMgb25lIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuCgpPa2F5LCBzbyBgdmNfc2NyZWVuLmNgIGlzIHJlYWNoYWJsZS4gSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVwbGFjaW5nIGBfX2dldF9mcmVlX3BhZ2VgIHdpdGggYGttYWxsb2NgLiBUaGUgY29yZSAqbG9naWMqIGlzIGlkZW50aWNhbC4KCkJ1dCB3YWl0LCBpZiBpdCYjMzk7cyByZWFjaGFibGUga2VybmVsIGNvZGUsIGFuZCBkb2VzbiYjMzk7dCBmYWxsIGludG8gYW4gKmV4Y2x1c2lvbiogY3JpdGVyaWEsIHRoZSBndWlkZWxpbmVzIHN1Z2dlc3QgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7LgoKTGV0IG1lIHJlLXJlYWQgdGhlIHJlbGV2YW50IHBhcnQ6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKYHZjX3NjcmVlbi5jYCBpcyByZWFjaGFibGUuIGAvZGV2L3Zjc2AgaXMgYWNjZXNzaWJsZS4gU28gaXQgaXMgKmRlZmluaXRlbHkqIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhpcyBjb2RlLgoKSXMgaXQgKndvcnRoKiBmdXp6aW5nPyBUaGUgY2hhbmdlIGl0c2VsZiBpcyBxdWl0ZSB0cml2aWFsIC0ganVzdCBhbiBhbGxvY2F0b3Igc3dhcC4gSG93ZXZlciwgaXQgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MuIENvbnNpZGVyOiBpcyBga21hbGxvY2AgZ29pbmcgdG8gaGFuZGxlIGBQQUdFX1NJWkVgIGNvcnJlY3RseT8gWWVwLCBga21hbGxvYyhQQUdFX1NJWkUpYCBzaG91bGQgYmUgZmluZS4gV2hhdCBhYm91dCBhbGlnbm1lbnQ/IElzIHBhZ2UgYWxpZ25tZW50IG5lY2Vzc2FyeT8gYGttYWxsb2NgIGRvZXNuJiMzOTt0ICpndWFyYW50ZWUqIHBhZ2UgYWxpZ25tZW50OyBpdCYjMzk7cyBqdXN0IG5hdHVyYWwgYWxpZ25tZW50LiBJZiB0aGUgaGFyZHdhcmUgKm5lZWRzKiBwYWdlLWFsaWduZWQgbWVtb3J5LCB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgYnV0IGluIHRoZSBjYXNlIG9mIGB2Y19zY3JlZW4uY2AsIGl0JiMzOTtzIGp1c3QgZm9yIGJ1ZmZlcnMgdXNlZCB3aXRoIGBjb3B5X3RvX3VzZXJgIGFuZCBgY29weV9mcm9tX3VzZXJgIGFuZCBpc24mIzM5O3QgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZSBETUEuCgpUaGUgc3BlY2lmaWMgaW5zdGFuY2VzIGFyZToKCiogICBgYW1pc2VyaWFsLmNgOiBVc2VzIGBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIHJlcGxhY2luZyBgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpYC4KKiAgIGBtZW5fejEzNV91YXJ0LmNgOiBVc2VzIGBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpYC4KKiAgIGBwY2hfdWFydC5jYDogVXNlcyBga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpYC4KKiAgIGB2Y19zY3JlZW4uY2A6IFVzZXMgYGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAuCgpPa2F5LCBJIG5lZWQgdG8gY2hlY2sgYHZjX3NjcmVlbi5jYCBtb3JlIGNsb3NlbHkgYW5kIHZlcmlmeSBteSBhbGlnbm1lbnQgYXNzdW1wdGlvbnMuIEJ1dCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgYW5zd2VyIGlzIGxlYW5pbmcgdG93YXJkIFdvcnRoRnV6emluZz10cnVlLCBnaXZlbiB0aGF0IGAvZGV2L3Zjc2AgaXMgZWFzaWx5IGFjY2Vzc2libGUgYW5kIHRoZSBwYXRjaCBkb2VzIG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNzX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz0yMjc9c3RhdGljIGxvZmZfdCB2Y3NfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI0NC1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI0NTpzdGF0aWMgaW50IHZjc19yZWFkX2J1Zl91bmkoc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjQ2LVx0XHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkKVxuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI3Mi1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI3MzpzdGF0aWMgdm9pZCB2Y3NfcmVhZF9idWZfbm9hdHRyKGNvbnN0IHN0cnVjdCB2Y19kYXRhICp2YywgY2hhciAqY29uX2J1ZixcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI3NC1cdFx0dW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LCBib29sIHZpZXdlZClcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy0yOTItXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzoyOTM6c3RhdGljIHVuc2lnbmVkIGludCB2Y3NfcmVhZF9idWYoY29uc3Qgc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjk0LVx0XHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkLFxuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jPTM2MT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6MzYyOnZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTM2My17XG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDMwLVx0XHRpZiAodW5pX21vZGUpIHtcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQzMTpcdFx0XHRyZXQgPSB2Y3NfcmVhZF9idWZfdW5pKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy00MzItXHRcdFx0XHRcdHZpZXdlZCk7XG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM1LVx0XHR9IGVsc2UgaWYgKCFhdHRyKSB7XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo0MzY6XHRcdFx0dmNzX3JlYWRfYnVmX25vYXR0cih2YywgY29uX2J1ZiwgcG9zLCB0aGlzX3JvdW5kLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM3LVx0XHRcdFx0XHR2aWV3ZWQpO1xuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM4LVx0XHR9IGVsc2Uge1xuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NDM5Olx0XHRcdHRoaXNfcm91bmQgPSB2Y3NfcmVhZF9idWYodmMsIGNvbl9idWYsIHBvcywgdGhpc19yb3VuZCxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTQ0MC1cdFx0XHRcdFx0dmlld2VkLCBcdTAwMjZza2lwKTtcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz03NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmNzX2ZvcHMgPSB7XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy03NjItXHQubGxzZWVrXHRcdD0gdmNzX2xzZWVrLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NzYzOlx0LnJlYWRcdFx0PSB2Y3NfcmVhZCxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTc2NC1cdC53cml0ZVx0XHQ9IHZjc193cml0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB2Y3Nfd3JpdGVgKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZXh0ZW5kIG91ciBjaGVja3MuIFdlJiMzOTt2ZSBnb3QgdGhlIGNvcmUgZnVuY3Rpb24sIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSYjMzk7cmUgYWNjb3VudGluZyBmb3IgZWRnZSBjYXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGFueSB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgcHJvYmFibHkgc2hpZnQgb3VyIGZvY3VzIGZyb20ganVzdCB0aGUgaW5pdGlhbCB3cml0ZSBhbmQgZGlnIGRlZXBlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiBgdmNzX3dyaXRlYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyBgdmNzX3dyaXRlYCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHZlcnNpb24gY29udHJvbC4gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGludGVybmFsIGxvZ2dpbmcgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3JzIGdyYWNlZnVsbHkgYW5kIHJlcG9ydHMgdGhlbSBhcHByb3ByaWF0ZWx5LiBBcmUgd2UgZGVhbGluZyB3aXRoIHRlbXBvcmFyeSBmaWxlcyBvciBkaXJlY3QgZWRpdHM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2Ygcm9sbGJhY2sgYW5kIHJlY292ZXJ5IGluIHRoaXMgZnVuY3Rpb24/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IGFuZCAmIzM0O2FmdGVyJiMzNDsgc3RhdGUgb2YgdGhlIFZDUyBhZnRlciB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIGlmIGFueSBjbGVhbnVwIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHJvYnVzdCBhcyB3ZSYjMzk7ZCBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zjc193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jPTM2Mj12Y3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDcwLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NDcxOnN0YXRpYyB1MTYgKnZjc193cml0ZV9idWZfbm9hdHRyKHN0cnVjdCB2Y19kYXRhICp2YywgY29uc3QgY2hhciAqY29uX2J1ZixcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTQ3Mi1cdFx0dW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LCBib29sIHZpZXdlZCwgdTE2ICoqb3JnMClcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz01MDI9c3RhdGljIGlubGluZSB1MTYgdmNfY29tcGlsZV9sZTE2KHU4IGhpLCB1OCBsbylcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy01MTAtXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1MTE6c3RhdGljIHUxNiAqdmNzX3dyaXRlX2J1ZihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IGNoYXIgKmNvbl9idWYsXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy01MTItXHRcdHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCB2aWV3ZWQsIHUxNiAqKm9yZzApXG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM9NTgyPXN0YXRpYyBzc2l6ZV90XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1ODM6dmNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTU4NC17XG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjcxLVx0XHRpZiAoYXR0cilcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjY3MjpcdFx0XHRvcmcgPSB2Y3Nfd3JpdGVfYnVmKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy02NzMtXHRcdFx0XHRcdHZpZXdlZCwgXHUwMDI2b3JnMCk7XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy02NzQtXHRcdGVsc2VcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjY3NTpcdFx0XHRvcmcgPSB2Y3Nfd3JpdGVfYnVmX25vYXR0cih2YywgY29uX2J1ZiwgcG9zLCB0aGlzX3JvdW5kLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjc2LVx0XHRcdFx0XHR2aWV3ZWQsIFx1MDAyNm9yZzApO1xuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jPTc2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2Y3NfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy03NjMtXHQucmVhZFx0XHQ9IHZjc19yZWFkLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NzY0Olx0LndyaXRlXHRcdD0gdmNzX3dyaXRlLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzY1LVx0LnBvbGxcdFx0PSB2Y3NfcG9sbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBQYXRjaDogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyB3b3J0aCBteSB0aW1lIGZ1enppbmc/JiMzNDsgSXQgbG9va3MgbGlrZSBpdCB0b3VjaGVzIHNldmVyYWwgZGlmZmVyZW50IGFyZWFzLCBzcGVjaWZpY2FsbHkgYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgaW4gYHZjX3NjcmVlbi5jYCwgYHJzX3N0YXJ0dXBgIGFuZCBgcnNfc2h1dGRvd25gIGluIGBhbWlzZXJpYWwuY2AsIGBtZW5fejEzNV9wcm9iZWAgYW5kIGBtZW5fejEzNV9yZW1vdmVgIGluIGBtZW5fejEzNV91YXJ0LmNgLCBhbmQgYHBjaF91YXJ0X2luaXRfcG9ydGAgYW5kIGBwY2hfdWFydF9leGl0X3BvcnRgIGluIGBwY2hfdWFydC5jYC4gVGhhdCYjMzk7cyBhIGRlY2VudCBzcHJlYWQuCgpNeSBndXQgc2F5cyB5ZXMsIGl0JiMzOTtzIHdvcnRoIGEgbG9vay4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdl4oCUIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9u4oCUIGltbWVkaWF0ZWx5IHBlcmtzIG15IGVhcnMuIEJ1dCBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gRG9lcyB0aGlzICphY3R1YWxseSogaW1wYWN0IGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgSSBjYW4gZXhwbG9pdD8KCkFoYSEgVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqY2hhbmdlcyogaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBgX19nZXRfZnJlZV9wYWdlYCB0byBga21hbGxvY2AuIFRoYXQmIzM5O3MgYSAqc2lnbmlmaWNhbnQqIHNoaWZ0LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB1bmRlbmlhYmx5LCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYHZjX3NjcmVlbi5jYC4KCk5vdywgYmVmb3JlIEkgY29tbWl0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgY29uZmlnIG9wdGlvbiB0aGF0IG1ha2VzIHRoaXMgdW5yZWFjaGFibGUuIElzIGBDT05GSUdfVkdBX0NPTlNPTEVgIHJlcXVpcmVkPyBOby4gTG9va3MgbGlrZSBgdmNfc2NyZWVuLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19WVGAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgZHJpdmVycy90dHkvdnQvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjX3NjcmVlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L01ha2VmaWxlPTU9Rk9OVE1BUEZJTEUgPSBjcDQzNy51bmlcbmRyaXZlcnMvdHR5L3Z0L01ha2VmaWxlLTYtXG5kcml2ZXJzL3R0eS92dC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19WVClcdFx0XHQmIzQzOz0gdnRfaW9jdGwubyB2Y19zY3JlZW4ubyBcXFxuZHJpdmVycy90dHkvdnQvTWFrZWZpbGUtOC1cdFx0XHRcdFx0ICAgc2VsZWN0aW9uLm8ga2V5Ym9hcmQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYSBzeXpib3QgQ29uZmlndXJhdGlvbiBRdWVzdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0aGUgYXNzdW1lZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfVlRgIHdpdGhpbiBzeXpib3QmIzM5O3MgZW52aXJvbm1lbnQuIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpdCYjMzk7cyBlbmFibGVkOyBJJiMzOTt2ZSBzZWVuIGVub3VnaCBjcmFzaCByZXBvcnRzIGFuZCBkZWJ1Z2dpbmcgc2Vzc2lvbnMgdG8gaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIGEgc2FmZSBhc3N1bXB0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzY29wZSBvZiBzeXpib3QmIzM5O3MgdGVzdGluZy4KCk5vdywgdGhvdWdoLi4uIHdoYXQgYWJvdXQgYHBjaF91YXJ0LmNgPyBUaGF0JiMzOTtzIHRoZSByZWFsIGNydXggb2YgdGhlIGlzc3VlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdCBkcml2ZXIuIElzIGl0IGJlaGF2aW5nIGNvcnJlY3RseT8gQXJlIHRoZXJlIGtub3duIGlzc3Vlcz8gRG9lcyBpdHMgY29uZmlndXJhdGlvbiBhbGlnbiB3aXRoIHdoYXQgc3l6Ym90IGV4cGVjdHM/IFRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCByZXZpZXcgYW55IHJlY2VudCBidWcgcmVwb3J0cyByZWxhdGVkIHRvIFVBUlQgZHJpdmVycywgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGUgZGV2aWNlIHRyZWUgc2V0dGluZ3MgaW52b2x2ZWQgaW4gdGVzdGluZy4gVGhlIGludGVyYWN0aW9uIHdpdGggYENPTkZJR19WVGAgbWF5IGJlIGltcG9ydGFudCBoZXJlIC0gYXJlIHRoZXkgc29tZWhvdyBjb25mbGljdGluZz8gVGhpcyBpcyBhIHF1ZXN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgZXhwbG9yZWQuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2hfdWFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX1NFUklBTF9PV0wpXHRcdCYjNDM7PSBvd2wtdWFydC5vXG5kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX1NFUklBTF9QQ0hfVUFSVClcdFx0JiM0Mzs9IHBjaF91YXJ0Lm9cbmRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfU0VSSUFMX1BJQzMyKVx0XHQmIzQzOz0gcGljMzJfdWFydC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogQSBRdWljayBEaWFnbm9zdGljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyBhIHNwZWNpZmljIGZpbGU6IGBtZW5fejEzNV91YXJ0LmNgLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGtuZWUtamVyayByZWFjdGlvbiwgYWN0dWFsbHksIGJlY2F1c2UgdGhhdCBuYW1lIHJpbmdzIGEgYmVsbC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBVQVJUIGNvbW11bmljYXRpb24gZm9yIHRoZSBaMTM1IGJvYXJkIOKAkyBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXJlLiBUaGVyZSBpcyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdCBzb21lIG9mIHRoZSBzeW1wdG9tcyBJIGFtIHRyeWluZyB0byByZXNvbHZlIGFyZSBkZXNjcmliZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbl96MTM1X3VhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlPTUyPW9iai0kKENPTkZJR19TRVJJQUxfTUNGKVx0XHQmIzQzOz0gbWNmLm9cbmRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfU0VSSUFMX01FTl9aMTM1KVx0XHQmIzQzOz0gbWVuX3oxMzVfdWFydC5vXG5kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUtNTQtb2JqLSQoQ09ORklHX1NFUklBTF9NSUxCRUFVVF9VU0lPKVx0JiM0Mzs9IG1pbGJlYXV0X3VzaW8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkluaXRpYWwgSW5xdWlyeTogVW5wYWNraW5nIHRoZSAmIzM0O2FtaXNlcmlhbC5jJiMzNDsgQ29udW5kcnVtKioKCk15IGltbWVkaWF0ZSByZWFjdGlvbiB1cG9uIHNlZWluZyAmIzM0O2FtaXNlcmlhbC5jJiMzNDsgaXMgYSBzaGFycCBpbnRha2Ugb2YgYnJlYXRoLCBhIHN1YnRsZSBmdXJyb3dpbmcgb2YgdGhlIGJyb3cuICpXaGF0IGFib3V0IGl0PyogVGhlIHZlcnkgbmFtZSBpcyBldm9jYXRpdmUsIGhpbnRpbmcgYXQgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuIG9yIGEgdGhyZWFkIEkgbmVlZCB0byBwdWxsLiBJdCBzY3JlYW1zICYjMzQ7bG93LWxldmVsJiMzNDsgYW5kIGxpa2VseSBkZWFscyB3aXRoIHNlcmlhbGl6YXRpb24sIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBsaWJyYXJ5IG9yIHN0YW5kYXJkIGxpa2UgQU1JU2VyaWFsIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLiBUaGUgYC5gYyBleHRlbnNpb24gaW5zdGFudGx5IGZsYWdzIGl0IGFzIHNvdXJjZSBjb2RlLiBJcyB0aGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIHZ1bG5lcmFiaWxpdHk/IEEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQSBjcml0aWNhbCBwaWVjZSBpbiBhIGxhcmdlciBkaXN0cmlidXRlZCBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIG9uPyBNeSBtZW50YWwgY2hlY2tsaXN0IGJlZ2lucyB0byB0aWNrOgoKKiAgICoqU2VyaWFsaXphdGlvbiBmb3JtYXQqKjogV2hhdCYjMzk7cyBpdCBkb2luZz8gSXMgaXQgdXNpbmcgYSBwcm9wcmlldGFyeSBvciBzdGFuZGFyZGl6ZWQgbWV0aG9kPwoqICAgKipTZWN1cml0eSByaXNrcyoqOiBJZiBpdCYjMzk7cyBzZXJpYWxpemluZyB1bnRydXN0ZWQgZGF0YSwgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBmb3IgZGVzZXJpYWxpemF0aW9uIGF0dGFja3MuIEkgaGF2ZSB0byB0aGluayBhYm91dCBob3cgcm9idXN0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcy4KKiAgICoqUGVyZm9ybWFuY2UqKjogU2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY2FuIGJlIGluY3JlZGlibHkgc2xvdywgZXNwZWNpYWxseSBmb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIElzIHRoaXMgYSBib3R0bGVuZWNrIGluIG15IGN1cnJlbnQgcHJvamVjdD8gQ2FuIGl0IGJlIG9wdGltaXplZD8KKiAgICoqUG9ydGFiaWxpdHkqKjogSXMgaXQgY3Jvc3MtcGxhdGZvcm0/IERvZXMgaXQgaGFuZGxlIGVuZGlhbm5lc3MgY29ycmVjdGx5PwoqICAgKipWZXJzaW9uaW5nKio6IERvZXMgaXQgaGF2ZSBhbnkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzPwoqICAgKipFcnJvciBoYW5kbGluZyoqOiBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGR1cmluZyBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24/CgpNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nLCBwdWxsaW5nIHVwIHBvdGVudGlhbCBjb2RlIHNuaXBwZXRzLCBsaWJyYXJpZXMsIGFuZCBwYXN0IGRlYnVnZ2luZyBleHBlcmllbmNlcyByZWxhdGVkIHRvIHNlcmlhbGl6YXRpb24uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGZvcm0gYSBjb25jbHVzaXZlIHRob3VnaHQgYnV0IHRoaXMgY291bGQgYmUgYSBwb2ludCBvZiBlaXRoZXIgZXh0cmVtZSBpbXBvcnRhbmNlLCBvciBleHRyZW1lIHVuaW1wb3J0YW5jZS4gTXkgam9iIGlzIHRvIGZpbmQgb3V0LiBUaGlzIGlzIGEgdmVyeSBpbnRlcmVzdGluZyBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1pc2VyaWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1NFUklBTF9ERVZfQlVTKVx0JiM0Mzs9IHNlcmRldi9cbi0tXG5kcml2ZXJzL3R0eS9NYWtlZmlsZS0xOC0jIHR0eSBkcml2ZXJzXG5kcml2ZXJzL3R0eS9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUwpICYjNDM7PSBhbWlzZXJpYWwub1xuZHJpdmVycy90dHkvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX01PWEFfSU5URUxMSU8pXHQmIzQzOz0gbW94YS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBzZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uczogYFNFUklBTF9QQ0hfVUFSVGAsIGBTRVJJQUxfTUVOX1oxMzVgLCBhbmQgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYC4gVGhlIEFtaWdhIG9uZSBpcyBvdXQ7IG5vIHBvaW50IHRyeWluZyB0byB0ZXN0IHRoYXQgb24geDg2LiBgU0VSSUFMX1BDSF9VQVJUYCBzZWVtcyBsaWtlIHRoZSBvbmUgZm9yIHg4NiBzeXN0ZW1zIChzcGVjaWZpY2FsbHkgSW50ZWwmIzM5O3MgRUcyMFQgUENIKSwgYW5kIGBTRVJJQUxfTUVOX1oxMzVgIGlzIGZvciB0aGUgTUVOIENoYW1lbGVvbiBCdXMuCgpCdXQsIGlzIHRoaXMgcGF0Y2ggZXZlbiAqd29ydGgqIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gdGhlIGd1aWRlbGluZXMgc2F5IHRvIHNraXAgcGF0Y2hlcyB0aGF0IGFyZSBqdXN0IGRvY3MsIEtjb25maWcsIGNvbW1lbnRzLCBjb3NtZXRpYyBsb2dnaW5nLCBjaGFuZ2VzIHRvIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRob3NlIGNhdGVnb3JpZXMuIEl0JiMzOTtzIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlYCB3aXRoIGBrbWFsbG9jYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhhdCByZXBsYWNlbWVudCBxdWFsaWZ5IGFzIGEgJiMzNDtmdW5jdGlvbmFsJiMzNDsgY2hhbmdlPyBPbiB0aGUgc3VyZmFjZSwgdGhlIGxvZ2ljICphcHBlYXJzKiBpZGVudGljYWwuIEJ1dCwgaXQmIzM5O3MgYSBkaWZmZXJlbnQgYWxsb2NhdG9yLCByaWdodD8gQW55IGludHJvZHVjZWQgYnVncyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGludmFsaWQgZnJlZXMuIEZvciBpbnN0YW5jZSwgaW4gYHZjX3NjcmVlbi5jYCwgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhpczoKCmBgYGMKLQljaGFyICpjb25fYnVmIF9fZnJlZShmcmVlX3BhZ2VfcHRyKSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwomIzQzOwljaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CmBgYAoKRXNzZW50aWFsbHksIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGdvZXMgZnJvbSBgZnJlZV9wYWdlYCB0byBga2ZyZWVgLiBUaGF0JiMzOTtzICpkZWZpbml0ZWx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBTbywgeWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFdlIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcy4KCkZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLCBJJiMzOTttIHRoaW5raW5nIGB2Y3NfcmVhZGAsIGB2Y3Nfd3JpdGVgLCBgcGNoX3VhcnRfaW5pdF9wb3J0YCwgYHBjaF91YXJ0X2V4aXRfcG9ydGAsIGBtZW5fejEzNV9wcm9iZWAsIGFuZCBgbWVuX3oxMzVfcmVtb3ZlYC4gSG9sZCBvbiwgYHBjaF91YXJ0X2luaXRfcG9ydGAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZS4gSSBzaG91bGQgY2hlY2sgaWYgSSBjYW4gZW5hYmxlIGJvdGggYFNFUklBTF9QQ0hfVUFSVGAgYW5kIGBTRVJJQUxfTUVOX1oxMzVgLiBgU0VSSUFMX1BDSF9VQVJUYCBkZXBlbmRzIG9uIGBQQ0lgIGFuZCBgWDg2YCwgc28gdGhhdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiBBbmQgYFNFUklBTF9NRU5fWjEzNWAgbmVlZHMgYE1DQmAuIEdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnPTExNjE9Y29uZmlnIFNFUklBTF9BTFRFUkFfVUFSVF9DT05TT0xFXG4tLVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE2OC1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnOjExNjk6Y29uZmlnIFNFUklBTF9QQ0hfVUFSVFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgVUFSVFwmIzM0O1xuLS1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODQtXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4Ni1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjg4CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlcGVuZGVuY3kgQ2hlY2s6IFNFUklBTF9QQ0hfVUFSVCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZW5zdXJpbmcgdGhlIGBTRVJJQUxfUENIX1VBUlRgIG1vZHVsZSBpcyBwcm9wZXJseSBzZXQgdXAuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcywgYW5kIEkgd2FudCB0byBkbyB0aGlzIG1ldGhvZGljYWxseS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBsaXN0aW5nIHRoZW0sIGJ1dCB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFsbCBpbnRlcmFjdCBhbmQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyB3aXRoaW4gdGhvc2UgY29ubmVjdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcywga25vd2luZyB0aGUgY29kZSBpbnNpZGUgYW5kIG91dC4gQXJlIHRoZXJlIGFueSBsaWJyYXJpZXMsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvdGhlciBtb2R1bGVzIGl0IHJlbGllcyBvbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHk/IFRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnPTExNjE9Y29uZmlnIFNFUklBTF9BTFRFUkFfVUFSVF9DT05TT0xFXG4tLVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE2OC1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnOjExNjk6Y29uZmlnIFNFUklBTF9QQ0hfVUFSVFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgVUFSVFwmIzM0O1xuLS1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODQtXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4Ni1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNjk6XHRjb25maWcgU0VSSUFMX1BDSF9VQVJUXG4xMTcwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBFRzIwVCBQQ0gvTEFQSVMgU2VtaWNvbiBJT0goTUw3MjEzL01MNzIyMy9NTDc4MzEpIFVBUlRcJiMzNDtcbjExNzE6XHRcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiAoWDg2XzMyIHx8IE1JUFMgfHwgIENPTVBJTEVfVEVTVClcbjExNzI6XHRcdHNlbGVjdCBTRVJJQUxfQ09SRVxuMTE3MzpcdFx0aGVscFxuMTE3NDpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgUENIKFBsYXRmb3JtIGNvbnRyb2xsZXIgSHViKSBVQVJUIG9mIEludGVsIEVHMjBUXG4xMTc1Olx0XHQgIHdoaWNoIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkIHByb2Nlc3Nvci5cbjExNzY6XHRcdCAgRW5hYmxpbmcgUENIX0RNQSwgdGhpcyBQQ0ggVUFSVCB3b3JrcyBhcyBETUEgbW9kZS5cbjExNzc6XHRcbjExNzg6XHRcdCAgVGhpcyBkcml2ZXIgYWxzbyBjYW4gYmUgdXNlZCBmb3IgTEFQSVMgU2VtaWNvbmR1Y3RvciBJT0goSW5wdXQvXG4xMTc5Olx0XHQgIE91dHB1dCBIdWIpLCBNTDcyMTMsIE1MNzIyMyBhbmQgTUw3ODMxLlxuMTE4MDpcdFx0ICBNTDcyMTMgSU9IIGlzIGZvciBJVkkoSW4tVmVoaWNsZSBJbmZvdGFpbm1lbnQpIHVzZSwgTUw3MjIzIElPSCBpc1xuMTE4MTpcdFx0ICBmb3IgTVAoTWVkaWEgUGhvbmUpIHVzZSBhbmQgTUw3ODMxIElPSCBpcyBmb3IgZ2VuZXJhbCBwdXJwb3NlIHVzZS5cbjExODI6XHRcdCAgTUw3MjEzL01MNzIyMy9NTDc4MzEgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuXG4xMTgzOlx0XHQgIE1MNzIxMy9NTDcyMjMvTUw3ODMxIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILlxuMTE4NDpcdFxuMTE4NTpcdGNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuMTE4NjpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjb25zb2xlIG9uIEludGVsIEVHMjBUIFBDSCBVQVJUL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0hcJiMzNDtcbjExODc6XHRcdGRlcGVuZHMgb24gU0VSSUFMX1BDSF9VQVJUPXlcbjExODg6XHRcdHNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE1CgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBwcmVzZW5jZSBvZiBQQ0kgYW5kIGVpdGhlciBYODZfMzIsIE1JUFMsIG9yIENPTVBJTEVfVEVTVC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gc3l6Ym90LCB3aGVyZSBJIHVzdWFsbHkgc2VlIHRoZXNlIHRlc3RzIHJ1biwgaXMgdHlwaWNhbGx5IG9uIFg4Nl82NCBhcmNoaXRlY3R1cmUuIFRoYXQgcmFpc2VzIGEgcmVkIGZsYWcuIEl0IGxvb2tzIGxpa2UgYFNFUklBTF9QQ0hfVUFSVGAgbWlnaHQgb25seSBiZSBlbmFibGVkIGlmIGBDT01QSUxFX1RFU1RgIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIHVuY292ZXIgaG93IHRoaXMgY291bGQgZWZmZWN0IGEgdGVzdCBydW5uaW5nLiBJIHdpbGwgY2hlY2sgdGhlIGRlcGVuZGVuY3kgb2YgYFNFUklBTF9NRU5fWjEzNWAgYW5kIHNlZSBpZiB0aGUgc2FtZSBpcyB0cnVlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VSSUFMX01FTl9aMTM1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc9MTM3Mz1jb25maWcgU0VSSUFMX1NUX0FTQ19DT05TT0xFXG4tLVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTM3Ny1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnOjEzNzg6Y29uZmlnIFNFUklBTF9NRU5fWjEzNVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTM3OS1cdHRyaXN0YXRlIFwmIzM0O01FTiAxNnoxMzUgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYwOlx0XHRib29sIFwmIzM0O0NvbnNvbGUgb24gQWN0aW9ucyBTZW1pIE93bCBzZXJpYWwgcG9ydFwmIzM0O1xuMTQ2MTpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfT1dMPXlcbjE0NjI6XHRcdHNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFXG4xNDYzOlx0XHRzZWxlY3QgU0VSSUFMX0VBUkxZQ09OXG4xNDY0Olx0XHRkZWZhdWx0IHlcbjE0NjU6XHRcdGhlbHBcbjE0NjY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIEFjdGlvbnMgU2VtaWNvbmR1Y3RvciBTNTAwL1M5MDAgVUFSVFxuMTQ2NzpcdFx0ICBhcyB0aGUgc3lzdGVtIGNvbnNvbGUuXG4xNDY4Olx0XG4xNDY5Olx0Y29uZmlnIFNFUklBTF9SREFcbjE0NzA6XHRcdGJvb2wgXCYjMzQ7UkRBIE1pY3JvIHNlcmlhbCBwb3J0IHN1cHBvcnRcJiMzNDtcbjE0NzE6XHRcdGRlcGVuZHMgb24gQVJDSF9SREEgfHwgQ09NUElMRV9URVNUXG4xNDcyOlx0XHRzZWxlY3QgU0VSSUFMX0NPUkVcbjE0NzM6XHRcdGhlbHBcbjE0NzQ6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFJEQTg4MTBQTCBTb0MmIzM5O3MgVUFSVC5cbjE0NzU6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBvbi1ib2FyZCBzZXJpYWwgcG9ydC5cbjE0NzY6XHRcdCAgT3RoZXJ3aXNlLCBzYXkgJiMzOTtOJiMzOTsuXG4xNDc3Olx0XG4xNDc4Olx0Y29uZmlnIFNFUklBTF9SREFfQ09OU09MRVxuMTQ3OTpcdFx0Ym9vbCBcJiMzNDtDb25zb2xlIG9uIFJEQSBNaWNybyBzZXJpYWwgcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQgYW5kIHRoaW5raW5nIHRoaXM6CgoqKk1pbm9yIENvZGUgUmV2aWV3IENvcnJlY3Rpb24qKgoKU2hvb3QhIEkgd2FzIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSB0byBgU0VSSUFMX01FTl9aMTM1YCBhbmQgSSB0b3RhbGx5IGdyYWJiZWQgdGhlIHdyb25nIGxpbmUgbnVtYmVyLiBJIHdhcyBzY2FubmluZyB0aGUgZmlsZSwgdGhvdWdodCBJIHdhcyBvbiB0aGUgcmlnaHQgdHJhY2ssIGJ1dCBJIG1pc3JlYWQgaXQuIEl0JiMzOTtzIGFjdHVhbGx5IG5vdCBhdCBsaW5lIDEzNzU7IHRoZSBpbXBvcnRhbnQgYml0IG9mIGNvZGUgaXMgYXQgbGluZSAxMzc4LiBObyBiaWcgZGVhbCwgYnV0IEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gYmUgbW9yZSBjYXJlZnVsIHdpdGggdGhvc2UgcXVpY2sgbGluZSBjaGVja3MuIE5vdyB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3ODpcdGNvbmZpZyBTRVJJQUxfTUVOX1oxMzVcbjEzNzk6XHRcdHRyaXN0YXRlIFwmIzM0O01FTiAxNnoxMzUgU3VwcG9ydFwmIzM0O1xuMTM4MDpcdFx0c2VsZWN0IFNFUklBTF9DT1JFXG4xMzgxOlx0XHRkZXBlbmRzIG9uIE1DQlxuMTM4MjpcdFx0aGVscFxuMTM4MzpcdFx0ICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNRU4gMTZ6MTM1IEhpZ2ggU3BlZWQgVUFSVCBJUC1Db3JlXG4xMzg0Olx0XHQgIG9uIGEgTUNCIGNhcnJpZXIuXG4xMzg1Olx0XG4xMzg2Olx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWxkIGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuMTM4NzpcdFx0ICBtZW5fejEzNV91YXJ0LmtvXG4xMzg4Olx0XG4xMzg5Olx0Y29uZmlnIFNFUklBTF9TUFJEXG4xMzkwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBTcHJlYWR0cnVtIHNlcmlhbFwmIzM0O1xuMTM5MTpcdFx0c2VsZWN0IFNFUklBTF9DT1JFXG4xMzkyOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbjEzOTM6XHRcdGhlbHBcbjEzOTQ6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBTcHJlYWR0cnVtJiMzOTtzIHNlcmlhbC5cbjEzOTU6XHRcbjEzOTY6XHRjb25maWcgU0VSSUFMX1NQUkRfQ09OU09MRVxuMTM5NzpcdFx0Ym9vbCBcJiMzNDtTcHJlYWR0cnVtIFVBUlQgY29uc29sZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODQzCgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIFNlcmlhbCBQb3J0IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgU0VSSUFMX01FTl9aMTM1YC4gVGhhdCBjbGVhcmx5IGRlcGVuZHMgb24gYE1DQmAsIHdoaWNoIGlzIGV4cGVjdGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGJyb2FkZXIuIFdoYXQgYWJvdXQgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYD8gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGVzZSBzZXR0aW5ncyBpbnRlcmFjdC4gQW0gSSBpbmFkdmVydGVudGx5IGNyZWF0aW5nIGEgY29uZmxpY3QsIG9yIGEgcmVkdW5kYW50IGNvbmZpZ3VyYXRpb24/IEFyZSB0aGV5IGluZGVwZW5kZW50LCBvciBhcmUgdGhleSByZWxhdGVkIGluIGEgd2F5IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZz8gSXQmIzM5O3MgZXNzZW50aWFsIHRoYXQgSSBleGFtaW5lIHRoZSBicm9hZGVyIGNvbnRleHQgaGVyZS4gVGhpcyBjb3VsZCBiZSBhIG1vZHVsZSwgYSBkcml2ZXIsIG9yIGV2ZW4gc29tZXRoaW5nIGxvd2VyLWxldmVsOyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlcmFjdGlvbnMgbXVzdCBiZSBleGFtaW5lZCB2ZXJ5IGNhcmVmdWxseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTUlHQV9CVUlMVElOX1NFUklBTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVBXaXJlbGVzcyAzRyBVTVRTIFBDTUNJQSBjYXJkIHN1cHBvcnRcJiMzNDtcbiAyOTY6XHRcdGRlcGVuZHMgb24gUENNQ0lBIFx1MDAyNlx1MDAyNiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4gMjk3Olx0XHRzZWxlY3QgUFBQXG4gMjk4Olx0XHRoZWxwXG4gMjk5Olx0XHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDNHIFVNVFMgUENNQ0lBIGNhcmQgZnJvbSBJUFdpcmVsZXNzIGNvbXBhbnkuIEluXG4gMzAwOlx0XHQgIHNvbWUgY291bnRyaWVzIChmb3IgZXhhbXBsZSBDemVjaCBSZXB1YmxpYywgVC1Nb2JpbGUgSVNQKSB0aGlzIGNhcmRcbiAzMDE6XHRcdCAgaXMgc2hpcHBlZCBmb3Igc2VydmljZSBjYWxsZWQgVU1UUyA0Ry5cbiAzMDI6XHRcbiAzMDM6XHRjb25maWcgTl9HU01cbiAzMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0dTTSBNVVggbGluZSBkaXNjaXBsaW5lIHN1cHBvcnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbiAzMDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFRoaXMgbGluZSBkaXNjaXBsaW5lIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBHU00gTVVYIHByb3RvY29sIGFuZFxuIDMwODpcdFx0ICBwcmVzZW50cyB0aGUgbXV4IGFzIGEgc2V0IG9mIDYxIGluZGl2aWR1YWwgdHR5IGRldmljZXMuXG4gMzA5Olx0XG4gMzEwOlx0Y29uZmlnIE5PWk9NSVxuIDMxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SFNEUEEgQnJvYWRiYW5kIFdpcmVsZXNzIERhdGEgQ2FyZCAtIEdsb2JlIFRyb3R0ZXJcJiMzNDtcbiAzMTI6XHRcdGRlcGVuZHMgb24gUENJXG4gMzEzOlx0XHRoZWxwXG4gMzE0Olx0XHQgIElmIHlvdSBoYXZlIGEgSFNEUEEgZHJpdmVyIEJyb2FkYmFuZCBXaXJlbGVzcyBEYXRhIENhcmQgLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBBbWlnYSBTZXJpYWwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgQW1pZ2EgYnVpbHQtaW4gc2VyaWFsIHBvcnQsIGBBTUlHQV9CVUlMVElOX1NFUklBTGAsIGlzIGRlZmluZWQuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O2xsIGZpbmQgaXQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBwcm9iYWJseSB1bmRlciB0aGUgZHJpdmVycyBkaXJlY3RvcnksIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB0dHkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZHJpdmVycy90dHkvS2NvbmZpZ2AsIG9yIG1heWJlIGEgc2ltaWxhcmx5IG5hbWVkIGZpbGUgd2l0aGluIHRoYXQgdHJlZS4gSSYjMzk7bGwgc3RhcnQgdGhlcmUsIGFzIHRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBsb29raW5nIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGVybWluYWwgZGV2aWNlcyBhbmQgc2VyaWFsIHBvcnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgSSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQU1JR0FfQlVJTFRJTl9TRVJJQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXG4tLVxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05Ny1cbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk5LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIERldmljZSBEcml2ZXIgVGVzdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEtjb25maWcuZGV2aWNlc2AgZmlsZSB3aXRoaW4gdGhlIGBhcmNoL202OGtgIGRpcmVjdG9yeSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgbTY4ayBhcmNoaXRlY3R1cmUuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBkcml2ZXIgaW4gcXVlc3Rpb24sIHdoaWNoIHNlZW1zIHRvIGJlIGBhbWlzZXJpYWwuY2AsIGlzbiYjMzk7dCBnb2luZyB0byBiZSBkaXJlY3RseSB0ZXN0YWJsZSBvbiBhbiB4ODYgc3lzdGVtLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IHBvaW50LgoKTm93LCBJIHNlZSBgU0VSSUFMX1BDSF9VQVJUYCBtZW50aW9uZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQmIzM5O3MgdGVzdGFibGUuIEhtbSwgaXQgYXBwZWFycyB0aGF0IHRoaXMgY2FuIGJlIHRlc3RlZCBvbiB4ODZfMzIsIG9yIGF0IGxlYXN0IHdpdGggYENPTVBJTEVfVEVTVGAuIEhvd2V2ZXIsIHN5emJvdCwgd2hpY2ggaXMgdGhlIGZ1enplciB0aGF0JiMzOTtzIHR5cGljYWxseSB1c2VkLCBydW5zIG9uIHg4Nl82NCwgZG9lc24mIzM5O3QgaXQ/IFNvLCB1bmxlc3MgYENPTVBJTEVfVEVTVGAgaXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQgZm9yIGEgZ2l2ZW4gdGVzdCBydW4sIGl0JiMzOTtzIGxpa2VseSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIHdvbiYjMzk7dCBiZSB0cmlnZ2VyZWQuIEhvbGQgb24sIGlzbiYjMzk7dCBzeXpib3QgbmV2ZXIgcnVuIHdpdGggYENPTVBJTEVfVEVTVGA/IFJpZ2h0LiBTbywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgdGVzdGFibGUuCgpBaCwgSSBtaXNzZWQgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGhhcyBhIGRlcGVuZGVuY3k6IGBQQ0kgJmFtcDsmYW1wOyAoWDg2XzMyIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUKWAuIFRoaXMgY29uZmlybXMgdGhhdCBpdCYjMzk7cyAqbm90KiB0ZXN0YWJsZSBvbiB4ODZfNjQgdW5sZXNzIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIHdoaWNoLCBhcyBkaXNjdXNzZWQsIGlzIHVubGlrZWx5LiBHb3QgaXQuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgU0VSSUFMX01FTl9aMTM1YC4gSXQgZGVwZW5kcyBvbiBgTUNCYC4gYE1DQmAuLi4gdGhhdCYjMzk7cyB0aGUgTUVOIENoYW1lbGVvbiBCdXMsIHdoaWNoIGNhbiBiZSBQQ0ktYmFzZWQuIFNvLCBpZiBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBjb3JyZWN0bHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYE1DQmAuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHNlZSBpZiB0aGUgc2Vjb25kIGRldmljZSBpcyB0ZXN0YWJsZSBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQ0ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tY2IvS2NvbmZpZy01LVxuZHJpdmVycy9tY2IvS2NvbmZpZzo2Om1lbnVjb25maWcgTUNCXG5kcml2ZXJzL21jYi9LY29uZmlnLTctXHQgICB0cmlzdGF0ZSBcJiMzNDtNQ0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWNiL0tjb25maWc9MTk9aWYgTUNCXG5kcml2ZXJzL21jYi9LY29uZmlnOjIwOmNvbmZpZyBNQ0JfUENJXG5kcml2ZXJzL21jYi9LY29uZmlnLTIxLVx0ICAgdHJpc3RhdGUgXCYjMzQ7UENJIGJhc2VkIE1DQiBjYXJyaWVyXCYjMzQ7XG4tLVxuZHJpdmVycy9tY2IvS2NvbmZpZy0zMS1cbmRyaXZlcnMvbWNiL0tjb25maWc6MzI6Y29uZmlnIE1DQl9MUENcbmRyaXZlcnMvbWNiL0tjb25maWctMzMtXHQgICB0cmlzdGF0ZSBcJiMzNDtMUEMgKG5vbiBQQ0kpIGJhc2VkIE1DQiBjYXJyaWVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEyCgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDExOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBNQ0JgICpjYW4qIGJlIGVuYWJsZWQsIGJ1dCB0aGUgbW9zdCBlYXNpbHkgdGVzdGFibGUgcGFydCBvZiB0aGlzIGlzIGRlZmluaXRlbHkgYHZjX3NjcmVlbi5jYCwgZ2l2ZW4gdGhhdCBgQ09ORklHX1ZUYCBpcyBhbHJlYWR5IGVuYWJsZWQuIEdvb2QuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiBpbiBgdmNfc2NyZWVuLmNgLCBpdCYjMzk7cyBhIHNpbXBsZSBjaGFuZ2UsIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlYCB3aXRoIGBrbWFsbG9jYCwgYW5kIGBmcmVlX3BhZ2VfcHRyYCB3aXRoIGBrZnJlZWAuICBJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gIFllcywgaXQmIzM5O3MgYSAqZnVuY3Rpb25hbCogY2hhbmdlIOKAkyBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kuICBCdXQsIGRvZXMgaXQgYWx0ZXIgZXhlY3V0aW9uIGZsb3c/IE5vLCBpdCYjMzk7cyBub3QgY2hhbmdpbmcgdGhlICpob3cqIHRoZSBjb2RlICpkb2VzKiB0aGUgam9iLCBvbmx5IGhvdyBtZW1vcnkgaXMgaGFuZGxlZC4KCkhvd2V2ZXIsIGEgYnVnIGNvdWxkIHNsaXAgaW4gd2hlcmUgYGtmcmVlYCBnZXRzIGNhbGxlZCBvbiBtZW1vcnkgdGhhdCB3YXMgKnN1cHBvc2VkKiB0byBiZSBmcmVlZCBieSBgZnJlZV9wYWdlYCwgb3IgbWF5YmUgYGttYWxsb2NgIHJldHVybnMgdW5hbGlnbmVkIG1lbW9yeSAodGhvdWdoIHRoYXQmIzM5O3MgbGVzcyBsaWtlbHkgaW4gdGhpcyBzY2VuYXJpbykuCgpXYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgc3RhdGUgSSBkb24mIzM5O3QgbmVlZCB0byBmdXp6IGNoYW5nZXMgdGhhdCBhcmUgZG9jdW1lbnRhdGlvbiwga2NvbmZpZyBjaGFuZ2VzLCBsb2dnaW5nLCBvciBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24uIEFsc28sIEkgZG9uJiMzOTt0IG5lZWQgdG8gZnV6eiBjb2RlIHRoYXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGNsZWFybHkgZG9lc24mIzM5O3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlIGNhdGVnb3JpZXMuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgcGxhaW4gYW5kIHNpbXBsZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb24gc2V0LCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBmb3IgZm9jdXMgc3ltYm9scy4gYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgYXJlIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYHZjX3NjcmVlbi5jYC4gSSBzaG91bGQgYWxzbyBsb29rIGF0IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBzZXJpYWwgZHJpdmVycy4gYHBjaF91YXJ0X2luaXRfcG9ydGAsIGBwY2hfdWFydF9leGl0X3BvcnRgLCBgbWVuX3oxMzVfcHJvYmVgLCBgbWVuX3oxMzVfcmVtb3ZlYCwgYHJzX3N0YXJ0dXBgIGFuZCBgcnNfc2h1dGRvd25gIGxvb2sgcmVsZXZhbnQuCgpMZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWdzLiAgYFNFUklBTF9QQ0hfVUFSVGAsIGBTRVJJQUxfTUVOX1oxMzVgLCBgTUNCYCwgYE1DQl9QQ0lgLCBhbmQgYFZUYCAoYWxyZWFkeSBlbmFibGVkKS4gV2FpdCwgYFNFUklBTF9QQ0hfVUFSVGAgZGVwZW5kcyBvbiBgWDg2XzMyIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUYC4gSSBzaG91bGQgYXZvaWQgbGlzdGluZyBhbnl0aGluZyB0aGF0JiMzOTtzIHRvbyBnZW5lcmljLCBzbyBJIHdvbiYjMzk7dCBsaXN0IGFueSBvZiB0aGVzZSwgYnV0IEkgKmNhbiogbGlzdCB0aG9zZSB0aGF0IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLCByaWdodD8gU28sIGBTRVJJQUxfTUVOX1oxMzVgLCBgU0VSSUFMX1BDSF9VQVJUYCwgYW5kIG1heWJlIGBBTUlHQV9CVUlMVElOX1NFUklBTGAgKGV2ZW4gaWYgaXQmIzM5O3MgbTY4aywgc3l6Ym90IG1pZ2h0IHRlc3QgbTY4ayEpLgoKTGV0IG1lIGRvdWJsZS1jaGVjazogYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgKmFyZSogdGhlIGV4YWN0IGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgdmNfc2NyZWVuLmNgLCBhbmQgdGhlIG90aGVycyBhcmUgcmVsYXRlZC4gIEFyZSB0aGVzZSBob3QgcGF0aHM/IGB2Y3NfcmVhZGAgYW5kIGB2Y3Nfd3JpdGVgIGFyZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBgL2Rldi92Y3MqYC4gTm90IG5lY2Vzc2FyaWx5IGhvdCBsaWtlIGEgbmV0d29yayBzdGFjaywgYnV0IHRoZXkgKmNvdWxkKiBiZSBjYWxsZWQgZnJlcXVlbnRseS4gYHByb2JlYCwgYHJlbW92ZWAgYXJlIGRlZmluaXRlbHkgbm90IGhvdCBwYXRocy4gYHJzX3N0YXJ0dXBgIGFuZCBgcnNfc2h1dGRvd25gIGFyZW4mIzM5O3QgaG90IHBhdGhzIGVpdGhlci4KCk9rYXksIGxldCYjMzk7cyByZWZpbmUgdGhpcy4KCioqRm9jdXMgU3ltYm9sczoqKgoKKiAgIGB2Y3NfcmVhZGAKKiAgIGB2Y3Nfd3JpdGVgCiogICBgcGNoX3VhcnRfaW5pdF9wb3J0YAoqICAgYHBjaF91YXJ0X2V4aXRfcG9ydGAKKiAgIGBtZW5fejEzNV9wcm9iZWAKKiAgIGBtZW5fejEzNV9yZW1vdmVgCiogICBgcnNfc3RhcnR1cGAKKiAgIGByc19zaHV0ZG93bmAKCioqQ29uZmlnczoqKgoKKiAgIGBTRVJJQUxfTUVOX1oxMzVgCiogICBgU0VSSUFMX1BDSF9VQVJUYAoqICAgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYAoqICAgYE1DQmAKKiAgIGBNQ0JfUENJYAoKKipSZWFzb25pbmc6KioKClRoZSBwYXRjaCBpcyByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAvYGZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AvYGtmcmVlYC4gIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBhY3Jvc3MgbXVsdGlwbGUgdHR5L3NlcmlhbCBkcml2ZXJzLiAgVGhpcyBjaGFuZ2UgKmNvdWxkKiBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCB3aXRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQU1JR0FfQlVJTFRJTl9TRVJJQUw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VSSUFMX01FTl9aMTM1JiMzNDssCiAgICAmIzM0O1NFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICAgJiMzNDtBTUlHQV9CVUlMVElOX1NFUklBTCYjMzQ7LAogICAgJiMzNDtNQ0ImIzM0OywKICAgICYjMzQ7TUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zjc19yZWFkJiMzNDssCiAgICAmIzM0O3Zjc193cml0ZSYjMzQ7LAogICAgJiMzNDtwY2hfdWFydF9pbml0X3BvcnQmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfZXhpdF9wb3J0JiMzNDssCiAgICAmIzM0O21lbl96MTM1X3Byb2JlJiMzNDssCiAgICAmIzM0O21lbl96MTM1X3JlbW92ZSYjMzQ7LAogICAgJiMzNDtyc19zdGFydHVwJiMzNDssCiAgICAmIzM0O3JzX3NodXRkb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoX19nZXRfZnJlZV9wYWdlLCBmcmVlX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zIChrbWFsbG9jLCBrZnJlZSkgYWNyb3NzIHNldmVyYWwgdHR5IGFuZCBzZXJpYWwgZHJpdmVycyAodmNfc2NyZWVuLCBwY2hfdWFydCwgbWVuX3oxMzVfdWFydCwgYW1pc2VyaWFsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY291bGQgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgaW52YWxpZCBmcmVlcywgb3IgYWxpZ25tZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBuZXcgYWxsb2NhdGlvbiBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQU1JR0FfQlVJTFRJTl9TRVJJQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDEzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqVGhlIERlYnVnZ2luZyBEYW5jZTogTWlzc2luZyBTZXJpYWwgRGV2aWNlKioKCkFscmlnaHQsIHNvIHRoZSBidWlsZCBpcyBjb21wbGFpbmluZyBhYm91dCBhIG1pc3NpbmcgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYCBzeW1ib2wuIFRoYXQmIzM5O3MgbmV2ZXIgZnVuLiBGaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgbGVnaXRpbWF0ZSBjb25maWd1cmF0aW9uIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlc2AuIEkgdmFndWVseSByZWNhbGwgbWFraW5nIGNoYW5nZXMgaW4gdGhhdCBhcmVhIHJlbGF0ZWQgdG8gdGhlIHNlcmlhbCBwb3J0IGRlZmluaXRpb25zLiBJdCYjMzk7cyBwb3NzaWJsZSBJIG92ZXJsb29rZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgSSBtaXNzZWQuIEl0JiMzOTtzIHVubGlrZWx5IGEgc2ltcGxlIHR5cG8sIGJ1dCBJIGNhbuKAmXQgcnVsZSBhbnl0aGluZyBvdXQgd2l0aG91dCB2ZXJpZnlpbmcgdGhlIGRldGFpbHMuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIEtjb25maWcgYW5kIHNlZSBpZiB0aGUgbG9naWNhbCBzdHJ1Y3R1cmUgaXMgaW50YWN0LiBJcyBpdCBlbmFibGVkIGNvbmRpdGlvbmFsbHk/IElzIHRoZXJlIGEgbmVzdGVkIGRlcGVuZGVuY3kgdGhhdCYjMzk7cyBub3QgYmVpbmcgbWV0IGluIHRoZSBjdXJyZW50IGJ1aWxkIGVudmlyb25tZW50PyBHb3R0YSB0cmFjZSB0aGF0IHRocm91Z2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QU1JR0FfQlVJTFRJTl9TRVJJQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXG4tLVxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05Ny1cbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk5LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM9MTIxPWNvbmZpZyBTRVJJQUxfQ09OU09MRVxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy0xMjItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGVcJiMzNDtcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6MTIzOlx0ZGVwZW5kcyBvbiBBTUlHQV9CVUlMVElOX1NFUklBTD15XG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTEyNC1cdGhlbHBcbi0tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc9MjQ9Q09ORklHX1BST0NfSEFSRFdBUkU9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjI1OkNPTkZJR19BTUlHQV9CVUlMVElOX1NFUklBTD15XG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctMjYtQ09ORklHX1NFUklBTF9DT05TT0xFPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9NDI9Q09ORklHX0FUQVJJX0RTUDU2Sz1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NDM6Q09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXlcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy00NC1DT05GSUdfU0VSSUFMX0NPTlNPTEU9eVxuLS1cbmRyaXZlcnMvdHR5L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19TRVJJQUxfREVWX0JVUylcdCYjNDM7PSBzZXJkZXYvXG4tLVxuZHJpdmVycy90dHkvTWFrZWZpbGUtMTgtIyB0dHkgZHJpdmVyc1xuZHJpdmVycy90dHkvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSAmIzQzOz0gYW1pc2VyaWFsLm9cbmRyaXZlcnMvdHR5L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19NT1hBX0lOVEVMTElPKVx0JiM0Mzs9IG1veGEub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3MgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBDb25maWcgQ2hlY2sqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGBBTUlHQV9CVUlMVElOX1NFUklBTGAsIHNvbWV3aGVyZS4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMhIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBhcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzYC4gVGhhdCYjMzk7cyBzdHJhbmdlLCB0aGUgdG9vbCBJIHdhcyB1c2luZyBqdXN0IGZsYWdnZWQgaXQgYXMgbWlzc2luZy4gTm93LCB3aHkgd291bGQgaXQgc2F5IHRoYXQ/CgpIbW0sIEkgaGF2ZSBhIGZldyBpZGVhcy4gUGVyaGFwcyB0aGUgdG9vbCBpcyBvdmVybHkgZm9jdXNlZCBvbiB4ODYgY29uZmlndXJhdGlvbnMgYW5kIGRvZXNuJiMzOTt0IGNvbnNpZGVyIG90aGVyIGFyY2hpdGVjdHVyZXMsIG9yIG1heWJlIGl0cyBLY29uZmlnIHBhcnNpbmcgaXMgYSBsaXR0bGUgZmxhd2VkIGFuZCBtaXNzZWQgaXQsIG9yIG1heWJlIGl0JiMzOTtzIG9ubHkgY2hlY2tpbmcgb3B0aW9ucyBhdmFpbGFibGUgb24gbXkgY3VycmVudCBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlICh4ODZfNjQpLiBPbmUgb2YgdGhvc2Ugc2VlbXMgbGlrZWx5LCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgaXQgZXhpc3RzIGFuZCBJIGNhbiB1c2UgaXQuIE9rYXksIEkmIzM5O2xsIGp1c3QgcmVtb3ZlIGBBTUlHQV9CVUlMVElOX1NFUklBTGAgZnJvbSB0aGUgbGlzdCBmb3Igbm93OyBJIGNhbiBhbHdheXMgcmUtYWRkIGl0IGxhdGVyIGlmIG5lZWRlZC4gUHJvYmxlbSBzb2x2ZWQsIG1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklBTF9NRU5fWjEzNSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfUENIX1VBUlQmIzM0OywKICAgICYjMzQ7TUNCJiMzNDssCiAgICAmIzM0O01DQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2Y3NfcmVhZCYjMzQ7LAogICAgJiMzNDt2Y3Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfaW5pdF9wb3J0JiMzNDssCiAgICAmIzM0O3BjaF91YXJ0X2V4aXRfcG9ydCYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9wcm9iZSYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cnNfc3RhcnR1cCYjMzQ7LAogICAgJiMzNDtyc19zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbnMgKF9fZ2V0X2ZyZWVfcGFnZSwgZnJlZV9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoa21hbGxvYywga2ZyZWUpIGFjcm9zcyBzZXZlcmFsIHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMgKHZjX3NjcmVlbiwgcGNoX3VhcnQsIG1lbl96MTM1X3VhcnQsIGFtaXNlcmlhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IGFsbG9jYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRVJJQUxfTUVOX1oxMzUmIzM0OywKICAgICYjMzQ7U0VSSUFMX1BDSF9VQVJUJiMzNDssCiAgICAmIzM0O01DQiYjMzQ7LAogICAgJiMzNDtNQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmNzX3JlYWQmIzM0OywKICAgICYjMzQ7dmNzX3dyaXRlJiMzNDssCiAgICAmIzM0O3BjaF91YXJ0X2luaXRfcG9ydCYjMzQ7LAogICAgJiMzNDtwY2hfdWFydF9leGl0X3BvcnQmIzM0OywKICAgICYjMzQ7bWVuX3oxMzVfcHJvYmUmIzM0OywKICAgICYjMzQ7bWVuX3oxMzVfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3JzX3N0YXJ0dXAmIzM0OywKICAgICYjMzQ7cnNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE1OjM0LjI4MDMzNjEwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODM4NTc2Mjk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6MzQuMjgwMzQ3MDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY4MjA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNTk4MGM4MTAzODhlNGI1YjJiMzJkNDhhMzFiMWU1YTc0ZmYyMzAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDEzOjE1OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcXG5pbmRleCA4MWVhY2E3NTE1NDFhYi4uMjhhZjBmZDk4MTgxOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcXG4rKysgYi9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuY1xcbkBAIC00NDMsMjMgKzQ0MywyMyBAQCBzdGF0aWMgaW50IHJzX3N0YXJ0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbylcXG4gXFx0c3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gXFx1MDAyNmluZm8tXFx1MDAzZXRwb3J0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnRcXHRyZXR2YWw9MDtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYWdlO1xcbitcXHR2b2lkICpidWZmZXI7XFxuIFxcbi1cXHRwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXBhZ2UpXFxuK1xcdGJ1ZmZlciA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFidWZmZXIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKHR0eV9wb3J0X2luaXRpYWxpemVkKHBvcnQpKSB7XFxuLVxcdFxcdGZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0a2ZyZWUoYnVmZmVyKTtcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2V4bWl0LmJ1ZilcXG4tXFx0XFx0ZnJlZV9wYWdlKHBhZ2UpO1xcbitcXHRcXHRrZnJlZShidWZmZXIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGluZm8tXFx1MDAzZXhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTtcXG4rXFx0XFx0aW5mby1cXHUwMDNleG1pdC5idWYgPSBidWZmZXI7XFxuIFxcbiAjaWZkZWYgU0VSSUFMX0RFQlVHX09QRU5cXG4gXFx0cHJpbnRrKFxcXCJzdGFydGluZyB1cCB0dHlzJWQgLi4uXFxcIiwgaW5mby1cXHUwMDNlbGluZSk7XFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBzdGF0aWMgdm9pZCByc19zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKVxcbiBcXHQgKi9cXG4gXFx0ZnJlZV9pcnEoSVJRX0FNSUdBX1ZFUlRCLCBpbmZvKTtcXG4gXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylpbmZvLVxcdTAwM2V4bWl0LmJ1Zik7XFxuK1xcdGtmcmVlKGluZm8tXFx1MDAzZXhtaXQuYnVmKTtcXG4gXFx0aW5mby1cXHUwMDNleG1pdC5idWYgPSBOVUxMO1xcbiBcXG4gXFx0aW5mby1cXHUwMDNlSUVSID0gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcXG5pbmRleCA2ZmFkNTdmZWU5MTJjMi4uOTEzOGZhMjlkMzAxYjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xcbisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHR5X2ZsaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWNiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIE1FTl9aMTM1X01BWF9QT1JUU1xcdFxcdDEyXFxuICNkZWZpbmUgTUVOX1oxMzVfQkFTRUNMS1xcdFxcdDI5NDkxMjAwXFxuQEAgLTgxMSw3ICs4MTIsNyBAQCBzdGF0aWMgaW50IG1lbl96MTM1X3Byb2JlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2LFxcbiBcXHRpZiAoIXVhcnQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0dWFydC1cXHUwMDNlcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0dWFydC1cXHUwMDNlcnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghdWFydC1cXHUwMDNlcnhidWYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtODQxLDcgKzg0Miw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXFx1MDAzZXJ4YnVmKTtcXG4rXFx0a2ZyZWUodWFydC1cXHUwMDNlcnhidWYpO1xcbiBcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBhZGQgVUFSVDogJWRcXFxcblxcXCIsIGVycik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC04NTgsNyArODU5LDcgQEAgc3RhdGljIHZvaWQgbWVuX3oxMzVfcmVtb3ZlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2KVxcbiBcXG4gXFx0bGluZS0tO1xcbiBcXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcXHUwMDI2bWVuX3oxMzVfZHJpdmVyLCBcXHUwMDI2dWFydC1cXHUwMDNlcG9ydCk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgdWFydC1cXHUwMDNlcnhidWYpO1xcbitcXHRrZnJlZSh1YXJ0LVxcdTAwM2VyeGJ1Zik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWNiX2RldmljZV9pZCBtZW5fejEzNV9pZHNbXSA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xcbmluZGV4IDgwZTMxYzRkOTUzNmQxLi41ZjdmMDczZjI4NWUxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xcbisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jXFxuQEAgLTE2NjIsNyArMTY2Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWcyMHRfcG9ydCAqcGNoX3VhcnRfaW5pdF9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRpZiAocHJpdiA9PSBOVUxMKVxcbiBcXHRcXHRnb3RvIGluaXRfcG9ydF9hbGxvY19lcnI7XFxuIFxcbi1cXHRyeGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRyeGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFyeGJ1ZilcXG4gXFx0XFx0Z290byBpbml0X3BvcnRfZnJlZV90eGJ1ZjtcXG4gXFxuQEAgLTE3MzUsNyArMTczNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWcyMHRfcG9ydCAqcGNoX3VhcnRfaW5pdF9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAjaWZkZWYgQ09ORklHX1NFUklBTF9QQ0hfVUFSVF9DT05TT0xFXFxuIFxcdHBjaF91YXJ0X3BvcnRzW2JvYXJkLVxcdTAwM2VsaW5lX25vXSA9IE5VTEw7XFxuICNlbmRpZlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcnhidWYpO1xcbitcXHRrZnJlZShyeGJ1Zik7XFxuIGluaXRfcG9ydF9mcmVlX3R4YnVmOlxcbiBcXHRrZnJlZShwcml2KTtcXG4gaW5pdF9wb3J0X2FsbG9jX2VycjpcXG5AQCAtMTc1MCw3ICsxNzUwLDcgQEAgc3RhdGljIHZvaWQgcGNoX3VhcnRfZXhpdF9wb3J0KHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KVxcbiBcXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCJ1YXJ0JWRfcmVnc1xcXCIsIHByaXYtXFx1MDAzZXBvcnQubGluZSk7XFxuIFxcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7XFxuIFxcdHVhcnRfcmVtb3ZlX29uZV9wb3J0KFxcdTAwMjZwY2hfdWFydF9kcml2ZXIsIFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0KTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXByaXYtXFx1MDAzZXJ4YnVmLmJ1Zik7XFxuK1xcdGtmcmVlKHByaXYtXFx1MDAzZXJ4YnVmLmJ1Zik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBjaF91YXJ0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcXG5pbmRleCA3ZDQwZWFjYzIxYjNlOC4uYmYxNTAyZmQ1YmQ0YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcXG4rKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1xcbkBAIC01Myw4ICs1Myw2IEBAXFxuICNkZWZpbmUgSEVBREVSX1NJWkVcXHQ0dVxcbiAjZGVmaW5lIENPTl9CVUZfU0laRSAoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAyNTYgOiBQQUdFX1NJWkUpXFxuIFxcbi1ERUZJTkVfRlJFRShmcmVlX3BhZ2VfcHRyLCB2b2lkICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9UKSk7XFxuLVxcbiAvKlxcbiAgKiBPdXIgbWlub3Igc3BhY2U6XFxuICAqXFxuQEAgLTM3MSw3ICszNjksNyBAQCB2Y3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIFxcdGxvZmZfdCBwb3M7XFxuIFxcdGJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTtcXG4gXFxuLVxcdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XFxuK1xcdGNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFjb25fYnVmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTU5Niw3ICs1OTQsNyBAQCB2Y3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiBcXHRpZiAodXNlX3VuaWNvZGUoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRjaGFyICpjb25fYnVmIF9fZnJlZShmcmVlX3BhZ2VfcHRyKSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRjaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghY29uX2J1ZilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNTozNC45NjgyNDc5MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzY5NzgyNzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNTk4MGM4MTAzODhlNGI1YjJiMzJkNDhhMzFiMWU1YTc0ZmYyMzAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMTM6MTU6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYyBiL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jXG5pbmRleCA4MWVhY2E3NTE1NDFhYi4uMjhhZjBmZDk4MTgxOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuY1xuKysrIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcbkBAIC00NDMsMjMgKzQ0MywyMyBAQCBzdGF0aWMgaW50IHJzX3N0YXJ0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbylcbiBcdHN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9IFx1MDAyNmluZm8tXHUwMDNldHBvcnQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRyZXR2YWw9MDtcbi1cdHVuc2lnbmVkIGxvbmcgcGFnZTtcbitcdHZvaWQgKmJ1ZmZlcjtcbiBcbi1cdHBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXBhZ2UpXG4rXHRidWZmZXIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXG4gXHRpZiAodHR5X3BvcnRfaW5pdGlhbGl6ZWQocG9ydCkpIHtcbi1cdFx0ZnJlZV9wYWdlKHBhZ2UpO1xuK1x0XHRrZnJlZShidWZmZXIpO1xuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbiBcdGlmIChpbmZvLVx1MDAzZXhtaXQuYnVmKVxuLVx0XHRmcmVlX3BhZ2UocGFnZSk7XG4rXHRcdGtmcmVlKGJ1ZmZlcik7XG4gXHRlbHNlXG4tXHRcdGluZm8tXHUwMDNleG1pdC5idWYgPSAodW5zaWduZWQgY2hhciAqKSBwYWdlO1xuK1x0XHRpbmZvLVx1MDAzZXhtaXQuYnVmID0gYnVmZmVyO1xuIFxuICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTlxuIFx0cHJpbnRrKFwic3RhcnRpbmcgdXAgdHR5cyVkIC4uLlwiLCBpbmZvLVx1MDAzZWxpbmUpO1xuQEAgLTUzNyw3ICs1MzcsNyBAQCBzdGF0aWMgdm9pZCByc19zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKVxuIFx0ICovXG4gXHRmcmVlX2lycShJUlFfQU1JR0FfVkVSVEIsIGluZm8pO1xuIFxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWluZm8tXHUwMDNleG1pdC5idWYpO1xuK1x0a2ZyZWUoaW5mby1cdTAwM2V4bWl0LmJ1Zik7XG4gXHRpbmZvLVx1MDAzZXhtaXQuYnVmID0gTlVMTDtcbiBcbiBcdGluZm8tXHUwMDNlSUVSID0gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWVuX3oxMzVfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xuaW5kZXggNmZhZDU3ZmVlOTEyYzIuLjkxMzhmYTI5ZDMwMWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xuKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xuQEAgLTE2LDYgKzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90dHlfZmxpcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tY2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUVOX1oxMzVfTUFYX1BPUlRTXHRcdDEyXG4gI2RlZmluZSBNRU5fWjEzNV9CQVNFQ0xLXHRcdDI5NDkxMjAwXG5AQCAtODExLDcgKzgxMiw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXG4gXHRpZiAoIXVhcnQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dWFydC1cdTAwM2VyeGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuK1x0dWFydC1cdTAwM2VyeGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghdWFydC1cdTAwM2VyeGJ1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtODQxLDcgKzg0Miw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXHUwMDNlcnhidWYpO1xuK1x0a2ZyZWUodWFydC1cdTAwM2VyeGJ1Zik7XG4gXHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gYWRkIFVBUlQ6ICVkXFxuXCIsIGVycik7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTg1OCw3ICs4NTksNyBAQCBzdGF0aWMgdm9pZCBtZW5fejEzNV9yZW1vdmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYpXG4gXG4gXHRsaW5lLS07XG4gXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcdTAwMjZtZW5fejEzNV9kcml2ZXIsIFx1MDAyNnVhcnQtXHUwMDNlcG9ydCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXHUwMDNlcnhidWYpO1xuK1x0a2ZyZWUodWFydC1cdTAwM2VyeGJ1Zik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWNiX2RldmljZV9pZCBtZW5fejEzNV9pZHNbXSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jXG5pbmRleCA4MGUzMWM0ZDk1MzZkMS4uNWY3ZjA3M2YyODVlMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xuKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmNcbkBAIC0xNjYyLDcgKzE2NjIsNyBAQCBzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGlmIChwcml2ID09IE5VTEwpXG4gXHRcdGdvdG8gaW5pdF9wb3J0X2FsbG9jX2VycjtcbiBcbi1cdHJ4YnVmID0gKHVuc2lnbmVkIGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRyeGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghcnhidWYpXG4gXHRcdGdvdG8gaW5pdF9wb3J0X2ZyZWVfdHhidWY7XG4gXG5AQCAtMTczNSw3ICsxNzM1LDcgQEAgc3RhdGljIHN0cnVjdCBlZzIwdF9wb3J0ICpwY2hfdWFydF9pbml0X3BvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gI2lmZGVmIENPTkZJR19TRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuIFx0cGNoX3VhcnRfcG9ydHNbYm9hcmQtXHUwMDNlbGluZV9ub10gPSBOVUxMO1xuICNlbmRpZlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXJ4YnVmKTtcbitcdGtmcmVlKHJ4YnVmKTtcbiBpbml0X3BvcnRfZnJlZV90eGJ1ZjpcbiBcdGtmcmVlKHByaXYpO1xuIGluaXRfcG9ydF9hbGxvY19lcnI6XG5AQCAtMTc1MCw3ICsxNzUwLDcgQEAgc3RhdGljIHZvaWQgcGNoX3VhcnRfZXhpdF9wb3J0KHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KVxuIFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcInVhcnQlZF9yZWdzXCIsIHByaXYtXHUwMDNlcG9ydC5saW5lKTtcbiBcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7XG4gXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcdTAwMjZwY2hfdWFydF9kcml2ZXIsIFx1MDAyNnByaXYtXHUwMDNlcG9ydCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHJpdi1cdTAwM2VyeGJ1Zi5idWYpO1xuK1x0a2ZyZWUocHJpdi1cdTAwM2VyeGJ1Zi5idWYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwY2hfdWFydF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcbmluZGV4IDdkNDBlYWNjMjFiM2U4Li5iZjE1MDJmZDViZDRiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jXG4rKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1xuQEAgLTUzLDggKzUzLDYgQEBcbiAjZGVmaW5lIEhFQURFUl9TSVpFXHQ0dVxuICNkZWZpbmUgQ09OX0JVRl9TSVpFIChJU19FTkFCTEVEKENPTkZJR19CQVNFX1NNQUxMKSA/IDI1NiA6IFBBR0VfU0laRSlcbiBcbi1ERUZJTkVfRlJFRShmcmVlX3BhZ2VfcHRyLCB2b2lkICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9UKSk7XG4tXG4gLypcbiAgKiBPdXIgbWlub3Igc3BhY2U6XG4gICpcbkBAIC0zNzEsNyArMzY5LDcgQEAgdmNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0bG9mZl90IHBvcztcbiBcdGJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTtcbiBcbi1cdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRjaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWNvbl9idWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTU5Niw3ICs1OTQsNyBAQCB2Y3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0aWYgKHVzZV91bmljb2RlKGlub2RlKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0Y2hhciAqY29uX2J1ZiBfX2ZyZWUoZnJlZV9wYWdlX3B0cikgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcbitcdGNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghY29uX2J1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNTozNC45NjgyNTEwNDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM3MTM3Njc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEFQSSBSZXBsYWNlbWVudCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gVGhpcyBwYXRjaCByZXBsYWNlcyBgX19nZXRfZnJlZV9wYWdlYCBhbmQgYGZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AvYGt6YWxsb2NgIGFuZCBga2ZyZWVgIGluIGEgZmV3IHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMsIHNwZWNpZmljYWxseSBgYW1pc2VyaWFsLmNgLCBgbWVuX3oxMzVfdWFydC5jYCwgYHBjaF91YXJ0LmNgLCBhbmQgYHZjX3NjcmVlbi5jYC4gSXQncyBhIHJlZmFjdG9yaW5nLCBlZmZlY3RpdmVseSBzd2FwcGluZyBvbmUgbWVtb3J5IGFsbG9jYXRpb24gbWV0aG9kIGZvciBhbm90aGVyLCBnb2luZyBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciB0byB0aGUgc2xhYiBhbGxvY2F0b3IuXG5cblRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gSXQncyBub3QgKmFkZGluZyogbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc3RhdGVzLCBqdXN0IGNoYW5naW5nICpob3cqIG1lbW9yeSBpcyBhY3F1aXJlZC4gSXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBBUEkgcmVwbGFjZW1lbnQgYXQgZmlyc3QgZ2xhbmNlLlxuXG5CdXQgd2FpdCwgaXMgdGhpcyBwdXJlbHkgZGVjb3JhdGl2ZSwgb3IgYSBjaGFuZ2UgdG8gbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb2Vzbid0IGZ1bmN0aW9uYWxseSBhbHRlciBmbG93PyBObywgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBtZW1vcnkgaXMgaGFuZGxlZC4gVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZSwgdGhvdWdoLiBJcyBpdCB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcsIHRob3VnaD9cblxuSSBuZWVkIHRvIGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgaXQncyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGlvbiwgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZS4gQW5kIHRoZXNlIGRyaXZlcnMgYXJlLi4uXG5cbiogICBgYW1pc2VyaWFsLmNgOiBBbWlnYSBzZXJpYWwgcG9ydC4gTGlrZWx5IG5vdCByZWFjaGFibGUgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cbiogICBgbWVuX3oxMzVfdWFydC5jYDogTUVOIENoYW1lbGVvbiBCdXMgVUFSVC5cbiogICBgcGNoX3VhcnQuY2A6IEludGVsIFBDSC9MQVBJUyBVQVJULlxuKiAgIGB2Y19zY3JlZW4uY2A6IFZpcnR1YWwgY29uc29sZSBkcml2ZXIsIGAvZGV2L3ZjcypgLiBUaGlzIG9uZSBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLlxuXG5Pa2F5LCBzbyBgdmNfc2NyZWVuLmNgIGlzIHJlYWNoYWJsZS4gSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdy4gSXQncyBlc3NlbnRpYWxseSByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AuIFRoZSBjb3JlICpsb2dpYyogaXMgaWRlbnRpY2FsLlxuXG5CdXQgd2FpdCwgaWYgaXQncyByZWFjaGFibGUga2VybmVsIGNvZGUsIGFuZCBkb2Vzbid0IGZhbGwgaW50byBhbiAqZXhjbHVzaW9uKiBjcml0ZXJpYSwgdGhlIGd1aWRlbGluZXMgc3VnZ2VzdCBcIldvcnRoRnV6emluZz10cnVlXCIuXG5cbkxldCBtZSByZS1yZWFkIHRoZSByZWxldmFudCBwYXJ0OiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuYHZjX3NjcmVlbi5jYCBpcyByZWFjaGFibGUuIGAvZGV2L3Zjc2AgaXMgYWNjZXNzaWJsZS4gU28gaXQgaXMgKmRlZmluaXRlbHkqIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhpcyBjb2RlLlxuXG5JcyBpdCAqd29ydGgqIGZ1enppbmc/IFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHF1aXRlIHRyaXZpYWwgLSBqdXN0IGFuIGFsbG9jYXRvciBzd2FwLiBIb3dldmVyLCBpdCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUgYnVncy4gQ29uc2lkZXI6IGlzIGBrbWFsbG9jYCBnb2luZyB0byBoYW5kbGUgYFBBR0VfU0laRWAgY29ycmVjdGx5PyBZZXAsIGBrbWFsbG9jKFBBR0VfU0laRSlgIHNob3VsZCBiZSBmaW5lLiBXaGF0IGFib3V0IGFsaWdubWVudD8gSXMgcGFnZSBhbGlnbm1lbnQgbmVjZXNzYXJ5PyBga21hbGxvY2AgZG9lc24ndCAqZ3VhcmFudGVlKiBwYWdlIGFsaWdubWVudDsgaXQncyBqdXN0IG5hdHVyYWwgYWxpZ25tZW50LiBJZiB0aGUgaGFyZHdhcmUgKm5lZWRzKiBwYWdlLWFsaWduZWQgbWVtb3J5LCB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgYnV0IGluIHRoZSBjYXNlIG9mIGB2Y19zY3JlZW4uY2AsIGl0J3MganVzdCBmb3IgYnVmZmVycyB1c2VkIHdpdGggYGNvcHlfdG9fdXNlcmAgYW5kIGBjb3B5X2Zyb21fdXNlcmAgYW5kIGlzbid0IGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUgRE1BLlxuXG5UaGUgc3BlY2lmaWMgaW5zdGFuY2VzIGFyZTpcblxuKiAgIGBhbWlzZXJpYWwuY2A6IFVzZXMgYGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAgcmVwbGFjaW5nIGBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTClgLlxuKiAgIGBtZW5fejEzNV91YXJ0LmNgOiBVc2VzIGBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpYC5cbiogICBgcGNoX3VhcnQuY2A6IFVzZXMgYGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAuXG4qICAgYHZjX3NjcmVlbi5jYDogVXNlcyBga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpYC5cblxuT2theSwgSSBuZWVkIHRvIGNoZWNrIGB2Y19zY3JlZW4uY2AgbW9yZSBjbG9zZWx5IGFuZCB2ZXJpZnkgbXkgYWxpZ25tZW50IGFzc3VtcHRpb25zLiBCdXQgYmFzZWQgb24gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIGFuc3dlciBpcyBsZWFuaW5nIHRvd2FyZCBXb3J0aEZ1enppbmc9dHJ1ZSwgZ2l2ZW4gdGhhdCBgL2Rldi92Y3NgIGlzIGVhc2lseSBhY2Nlc3NpYmxlIGFuZCB0aGUgcGF0Y2ggZG9lcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6NTEuMzM5NjMxNTE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTU5ODAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y3NfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz0yMjc9c3RhdGljIGxvZmZfdCB2Y3NfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjQ0LVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI0NTpzdGF0aWMgaW50IHZjc19yZWFkX2J1Zl91bmkoc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI0Ni1cXHRcXHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkKVxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjcyLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI3MzpzdGF0aWMgdm9pZCB2Y3NfcmVhZF9idWZfbm9hdHRyKGNvbnN0IHN0cnVjdCB2Y19kYXRhICp2YywgY2hhciAqY29uX2J1ZixcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy0yNzQtXFx0XFx0dW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LCBib29sIHZpZXdlZClcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI5Mi1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzoyOTM6c3RhdGljIHVuc2lnbmVkIGludCB2Y3NfcmVhZF9idWYoY29uc3Qgc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI5NC1cXHRcXHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkLFxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM9MzYxPXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6MzYyOnZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy0zNjMte1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDMwLVxcdFxcdGlmICh1bmlfbW9kZSkge1xcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQzMTpcXHRcXHRcXHRyZXQgPSB2Y3NfcmVhZF9idWZfdW5pKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDMyLVxcdFxcdFxcdFxcdFxcdHZpZXdlZCk7XFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy00MzUtXFx0XFx0fSBlbHNlIGlmICghYXR0cikge1xcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQzNjpcXHRcXHRcXHR2Y3NfcmVhZF9idWZfbm9hdHRyKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM3LVxcdFxcdFxcdFxcdFxcdHZpZXdlZCk7XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM4LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NDM5OlxcdFxcdFxcdHRoaXNfcm91bmQgPSB2Y3NfcmVhZF9idWYodmMsIGNvbl9idWYsIHBvcywgdGhpc19yb3VuZCxcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy00NDAtXFx0XFx0XFx0XFx0XFx0dmlld2VkLCBcXHUwMDI2c2tpcCk7XFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz03NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmNzX2ZvcHMgPSB7XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzYyLVxcdC5sbHNlZWtcXHRcXHQ9IHZjc19sc2VlayxcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo3NjM6XFx0LnJlYWRcXHRcXHQ9IHZjc19yZWFkLFxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTc2NC1cXHQud3JpdGVcXHRcXHQ9IHZjc193cml0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6NTEuOTQyMDcxMTY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NTM4MjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGB2Y3Nfd3JpdGVgKipcblxuT2theSwgc28gd2UgbmVlZCB0byBleHRlbmQgb3VyIGNoZWNrcy4gV2UndmUgZ290IHRoZSBjb3JlIGZ1bmN0aW9uLCBidXQgd2UgbmVlZCB0byBlbnN1cmUgd2UncmUgYWNjb3VudGluZyBmb3IgZWRnZSBjYXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGFueSB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgcHJvYmFibHkgc2hpZnQgb3VyIGZvY3VzIGZyb20ganVzdCB0aGUgaW5pdGlhbCB3cml0ZSBhbmQgZGlnIGRlZXBlci4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGB2Y3Nfd3JpdGVgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IGB2Y3Nfd3JpdGVgIGlzIGltcGxlbWVudGVkLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGludGVyYWN0aW9uIHdpdGggdmVyc2lvbiBjb250cm9sLiBJIG5lZWQgdG8gY2hlY2sgaXRzIGludGVyYWN0aW9uIHdpdGggaW50ZXJuYWwgbG9nZ2luZyBhbmQgbG9ja2luZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMgZ3JhY2VmdWxseSBhbmQgcmVwb3J0cyB0aGVtIGFwcHJvcHJpYXRlbHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGVtcG9yYXJ5IGZpbGVzIG9yIGRpcmVjdCBlZGl0cz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiByb2xsYmFjayBhbmQgcmVjb3ZlcnkgaW4gdGhpcyBmdW5jdGlvbj8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgXCJiZWZvcmVcIiBhbmQgXCJhZnRlclwiIHN0YXRlIG9mIHRoZSBWQ1MgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBpZiBhbnkgY2xlYW51cCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHJvYnVzdCBhcyB3ZSdkIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNTo1NS43Mzc0NTY1NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzA0MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjc193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz0zNjI9dmNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDcwLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQ3MTpzdGF0aWMgdTE2ICp2Y3Nfd3JpdGVfYnVmX25vYXR0cihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IGNoYXIgKmNvbl9idWYsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDcyLVxcdFxcdHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCB2aWV3ZWQsIHUxNiAqKm9yZzApXFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz01MDI9c3RhdGljIGlubGluZSB1MTYgdmNfY29tcGlsZV9sZTE2KHU4IGhpLCB1OCBsbylcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTUxMC1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1MTE6c3RhdGljIHUxNiAqdmNzX3dyaXRlX2J1ZihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IGNoYXIgKmNvbl9idWYsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNTEyLVxcdFxcdHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCB2aWV3ZWQsIHUxNiAqKm9yZzApXFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz01ODI9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1ODM6dmNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy01ODQte1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjcxLVxcdFxcdGlmIChhdHRyKVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjY3MjpcXHRcXHRcXHRvcmcgPSB2Y3Nfd3JpdGVfYnVmKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjczLVxcdFxcdFxcdFxcdFxcdHZpZXdlZCwgXFx1MDAyNm9yZzApO1xcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTY3NC1cXHRcXHRlbHNlXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6Njc1OlxcdFxcdFxcdG9yZyA9IHZjc193cml0ZV9idWZfbm9hdHRyKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjc2LVxcdFxcdFxcdFxcdFxcdHZpZXdlZCwgXFx1MDAyNm9yZzApO1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM9NzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZjc19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzYzLVxcdC5yZWFkXFx0XFx0PSB2Y3NfcmVhZCxcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo3NjQ6XFx0LndyaXRlXFx0XFx0PSB2Y3Nfd3JpdGUsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzY1LVxcdC5wb2xsXFx0XFx0PSB2Y3NfcG9sbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6NTUuODYwMTY5NTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2NjU3MjM4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgUGF0Y2g6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIHdvcnRoIG15IHRpbWUgZnV6emluZz9cIiBJdCBsb29rcyBsaWtlIGl0IHRvdWNoZXMgc2V2ZXJhbCBkaWZmZXJlbnQgYXJlYXMsIHNwZWNpZmljYWxseSBgdmNzX3JlYWRgIGFuZCBgdmNzX3dyaXRlYCBpbiBgdmNfc2NyZWVuLmNgLCBgcnNfc3RhcnR1cGAgYW5kIGByc19zaHV0ZG93bmAgaW4gYGFtaXNlcmlhbC5jYCwgYG1lbl96MTM1X3Byb2JlYCBhbmQgYG1lbl96MTM1X3JlbW92ZWAgaW4gYG1lbl96MTM1X3VhcnQuY2AsIGFuZCBgcGNoX3VhcnRfaW5pdF9wb3J0YCBhbmQgYHBjaF91YXJ0X2V4aXRfcG9ydGAgaW4gYHBjaF91YXJ0LmNgLiBUaGF0J3MgYSBkZWNlbnQgc3ByZWFkLlxuXG5NeSBndXQgc2F5cyB5ZXMsIGl0J3Mgd29ydGggYSBsb29rLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZeKAlCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbuKAlCBpbW1lZGlhdGVseSBwZXJrcyBteSBlYXJzLiBCdXQgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIERvZXMgdGhpcyAqYWN0dWFsbHkqIGltcGFjdCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IEkgY2FuIGV4cGxvaXQ/XG5cbkFoYSEgVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqY2hhbmdlcyogaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBJdCdzIG1vdmluZyBmcm9tIGBfX2dldF9mcmVlX3BhZ2VgIHRvIGBrbWFsbG9jYC4gVGhhdCdzIGEgKnNpZ25pZmljYW50KiBzaGlmdC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB1bmRlbmlhYmx5LCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYHZjX3NjcmVlbi5jYC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQsIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIGNvbmZpZyBvcHRpb24gdGhhdCBtYWtlcyB0aGlzIHVucmVhY2hhYmxlLiBJcyBgQ09ORklHX1ZHQV9DT05TT0xFYCByZXF1aXJlZD8gTm8uIExvb2tzIGxpa2UgYHZjX3NjcmVlbi5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfVlRgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvdHR5L3Z0L01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjowMi4yMjY3NDY3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNzE2ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjX3NjcmVlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS92dC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC9NYWtlZmlsZT01PUZPTlRNQVBGSUxFID0gY3A0MzcudW5pXFxuZHJpdmVycy90dHkvdnQvTWFrZWZpbGUtNi1cXG5kcml2ZXJzL3R0eS92dC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19WVClcXHRcXHRcXHQrPSB2dF9pb2N0bC5vIHZjX3NjcmVlbi5vIFxcXFxcXG5kcml2ZXJzL3R0eS92dC9NYWtlZmlsZS04LVxcdFxcdFxcdFxcdFxcdCAgIHNlbGVjdGlvbi5vIGtleWJvYXJkLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjowMi4zNTg0NzM0ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE1MzQ1ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBzeXpib3QgQ29uZmlndXJhdGlvbiBRdWVzdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIHRoZSBhc3N1bWVkIGNvbmZpZ3VyYXRpb24gb2YgYENPTkZJR19WVGAgd2l0aGluIHN5emJvdCdzIGVudmlyb25tZW50LiBJJ20gcHJldHR5IGNvbmZpZGVudCBpdCdzIGVuYWJsZWQ7IEkndmUgc2VlbiBlbm91Z2ggY3Jhc2ggcmVwb3J0cyBhbmQgZGVidWdnaW5nIHNlc3Npb25zIHRvIGhhdmUgYSBnb29kIHNlbnNlIG9mIGhvdyB0aGF0J3MgaGFuZGxlZC4gSXQncyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZSwgc28gaXQncyBhIHNhZmUgYXNzdW1wdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2NvcGUgb2Ygc3l6Ym90J3MgdGVzdGluZy5cblxuTm93LCB0aG91Z2guLi4gd2hhdCBhYm91dCBgcGNoX3VhcnQuY2A/IFRoYXQncyB0aGUgcmVhbCBjcnV4IG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgZHJpdmVyLiBJcyBpdCBiZWhhdmluZyBjb3JyZWN0bHk/IEFyZSB0aGVyZSBrbm93biBpc3N1ZXM/IERvZXMgaXRzIGNvbmZpZ3VyYXRpb24gYWxpZ24gd2l0aCB3aGF0IHN5emJvdCBleHBlY3RzPyBUaGlzIHJlcXVpcmVzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgcmV2aWV3IGFueSByZWNlbnQgYnVnIHJlcG9ydHMgcmVsYXRlZCB0byBVQVJUIGRyaXZlcnMsIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGRldmljZSB0cmVlIHNldHRpbmdzIGludm9sdmVkIGluIHRlc3RpbmcuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIGBDT05GSUdfVlRgIG1heSBiZSBpbXBvcnRhbnQgaGVyZSAtIGFyZSB0aGV5IHNvbWVob3cgY29uZmxpY3Rpbmc/IFRoaXMgaXMgYSBxdWVzdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGV4cGxvcmVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjA2LjQ3Mzg1MjgzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMzIwNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaF91YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX1NFUklBTF9PV0wpXFx0XFx0Kz0gb3dsLXVhcnQub1xcbmRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfU0VSSUFMX1BDSF9VQVJUKVxcdFxcdCs9IHBjaF91YXJ0Lm9cXG5kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1NFUklBTF9QSUMzMilcXHRcXHQrPSBwaWMzMl91YXJ0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MDcuMDc2MTgzNDgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjMxMTY1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGViYXNlOiBBIFF1aWNrIERpYWdub3N0aWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyBhIHNwZWNpZmljIGZpbGU6IGBtZW5fejEzNV91YXJ0LmNgLiBJdCdzIGEgYml0IG9mIGEga25lZS1qZXJrIHJlYWN0aW9uLCBhY3R1YWxseSwgYmVjYXVzZSB0aGF0IG5hbWUgcmluZ3MgYSBiZWxsLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxpa2VseSByZWxhdGVzIHRvIFVBUlQgY29tbXVuaWNhdGlvbiBmb3IgdGhlIFoxMzUgYm9hcmQg4oCTIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGVyZS4gVGhlcmUgaXMgYSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgc29tZSBvZiB0aGUgc3ltcHRvbXMgSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZSBhcmUgZGVzY3JpYmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MTAuMzM5MzA2ODEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI5MjA4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVuX3oxMzVfdWFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlPTUyPW9iai0kKENPTkZJR19TRVJJQUxfTUNGKVxcdFxcdCs9IG1jZi5vXFxuZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19TRVJJQUxfTUVOX1oxMzUpXFx0XFx0Kz0gbWVuX3oxMzVfdWFydC5vXFxuZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlLTU0LW9iai0kKENPTkZJR19TRVJJQUxfTUlMQkVBVVRfVVNJTylcXHQrPSBtaWxiZWF1dF91c2lvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MTAuNTgyMjM1NTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTM3MTA5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkluaXRpYWwgSW5xdWlyeTogVW5wYWNraW5nIHRoZSBcImFtaXNlcmlhbC5jXCIgQ29udW5kcnVtKipcblxuTXkgaW1tZWRpYXRlIHJlYWN0aW9uIHVwb24gc2VlaW5nIFwiYW1pc2VyaWFsLmNcIiBpcyBhIHNoYXJwIGludGFrZSBvZiBicmVhdGgsIGEgc3VidGxlIGZ1cnJvd2luZyBvZiB0aGUgYnJvdy4gKldoYXQgYWJvdXQgaXQ/KiBUaGUgdmVyeSBuYW1lIGlzIGV2b2NhdGl2ZSwgaGludGluZyBhdCBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4gb3IgYSB0aHJlYWQgSSBuZWVkIHRvIHB1bGwuIEl0IHNjcmVhbXMgXCJsb3ctbGV2ZWxcIiBhbmQgbGlrZWx5IGRlYWxzIHdpdGggc2VyaWFsaXphdGlvbiwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGxpYnJhcnkgb3Igc3RhbmRhcmQgbGlrZSBBTUlTZXJpYWwgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24uIFRoZSBgLmBjIGV4dGVuc2lvbiBpbnN0YW50bHkgZmxhZ3MgaXQgYXMgc291cmNlIGNvZGUuIElzIHRoaXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgdnVsbmVyYWJpbGl0eT8gQSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBBIGNyaXRpY2FsIHBpZWNlIGluIGEgbGFyZ2VyIGRpc3RyaWJ1dGVkIHN5c3RlbSBJJ20gd29ya2luZyBvbj8gTXkgbWVudGFsIGNoZWNrbGlzdCBiZWdpbnMgdG8gdGljazpcblxuKiAgICoqU2VyaWFsaXphdGlvbiBmb3JtYXQqKjogV2hhdCdzIGl0IGRvaW5nPyBJcyBpdCB1c2luZyBhIHByb3ByaWV0YXJ5IG9yIHN0YW5kYXJkaXplZCBtZXRob2Q/XG4qICAgKipTZWN1cml0eSByaXNrcyoqOiBJZiBpdCdzIHNlcmlhbGl6aW5nIHVudHJ1c3RlZCBkYXRhLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnIGZvciBkZXNlcmlhbGl6YXRpb24gYXR0YWNrcy4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLlxuKiAgICoqUGVyZm9ybWFuY2UqKjogU2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY2FuIGJlIGluY3JlZGlibHkgc2xvdywgZXNwZWNpYWxseSBmb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIElzIHRoaXMgYSBib3R0bGVuZWNrIGluIG15IGN1cnJlbnQgcHJvamVjdD8gQ2FuIGl0IGJlIG9wdGltaXplZD9cbiogICAqKlBvcnRhYmlsaXR5Kio6IElzIGl0IGNyb3NzLXBsYXRmb3JtPyBEb2VzIGl0IGhhbmRsZSBlbmRpYW5uZXNzIGNvcnJlY3RseT9cbiogICAqKlZlcnNpb25pbmcqKjogRG9lcyBpdCBoYXZlIGFueSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc3N1ZXM/XG4qICAgKipFcnJvciBoYW5kbGluZyoqOiBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGR1cmluZyBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24/XG5cbk15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcsIHB1bGxpbmcgdXAgcG90ZW50aWFsIGNvZGUgc25pcHBldHMsIGxpYnJhcmllcywgYW5kIHBhc3QgZGVidWdnaW5nIGV4cGVyaWVuY2VzIHJlbGF0ZWQgdG8gc2VyaWFsaXphdGlvbi4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gZm9ybSBhIGNvbmNsdXNpdmUgdGhvdWdodCBidXQgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIGVpdGhlciBleHRyZW1lIGltcG9ydGFuY2UsIG9yIGV4dHJlbWUgdW5pbXBvcnRhbmNlLiBNeSBqb2IgaXMgdG8gZmluZCBvdXQuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MTcuNTc1OTUwODE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM2NzAxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1pc2VyaWFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdHR5L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19TRVJJQUxfREVWX0JVUylcXHQrPSBzZXJkZXYvXFxuLS1cXG5kcml2ZXJzL3R0eS9NYWtlZmlsZS0xOC0jIHR0eSBkcml2ZXJzXFxuZHJpdmVycy90dHkvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwub1xcbmRyaXZlcnMvdHR5L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19NT1hBX0lOVEVMTElPKVxcdCs9IG1veGEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjoxNy44Mzk2MzE4MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAwNzQyMjE1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbnM6IGBTRVJJQUxfUENIX1VBUlRgLCBgU0VSSUFMX01FTl9aMTM1YCwgYW5kIGBBTUlHQV9CVUlMVElOX1NFUklBTGAuIFRoZSBBbWlnYSBvbmUgaXMgb3V0OyBubyBwb2ludCB0cnlpbmcgdG8gdGVzdCB0aGF0IG9uIHg4Ni4gYFNFUklBTF9QQ0hfVUFSVGAgc2VlbXMgbGlrZSB0aGUgb25lIGZvciB4ODYgc3lzdGVtcyAoc3BlY2lmaWNhbGx5IEludGVsJ3MgRUcyMFQgUENIKSwgYW5kIGBTRVJJQUxfTUVOX1oxMzVgIGlzIGZvciB0aGUgTUVOIENoYW1lbGVvbiBCdXMuXG5cbkJ1dCwgaXMgdGhpcyBwYXRjaCBldmVuICp3b3J0aCogZnV6emluZz8gTGV0J3Mgc2VlLi4uIHRoZSBndWlkZWxpbmVzIHNheSB0byBza2lwIHBhdGNoZXMgdGhhdCBhcmUganVzdCBkb2NzLCBLY29uZmlnLCBjb21tZW50cywgY29zbWV0aWMgbG9nZ2luZywgY2hhbmdlcyB0byBjb25zdGFudHMgdGhhdCBkb24ndCBhZmZlY3QgZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gdGhvc2UgY2F0ZWdvcmllcy4gSXQncyByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhhdCByZXBsYWNlbWVudCBxdWFsaWZ5IGFzIGEgXCJmdW5jdGlvbmFsXCIgY2hhbmdlPyBPbiB0aGUgc3VyZmFjZSwgdGhlIGxvZ2ljICphcHBlYXJzKiBpZGVudGljYWwuIEJ1dCwgaXQncyBhIGRpZmZlcmVudCBhbGxvY2F0b3IsIHJpZ2h0PyBBbnkgaW50cm9kdWNlZCBidWdzIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCBsZWFrcywgb3IgaW52YWxpZCBmcmVlcy4gRm9yIGluc3RhbmNlLCBpbiBgdmNfc2NyZWVuLmNgLCB0aGV5J3JlIGNoYW5naW5nIHRoaXM6XG5cbmBgYGNcbi1cdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRjaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG5gYGBcblxuRXNzZW50aWFsbHksIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGdvZXMgZnJvbSBgZnJlZV9wYWdlYCB0byBga2ZyZWVgLiBUaGF0J3MgKmRlZmluaXRlbHkqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFNvLCB5ZXMsIHRoaXMgaXMgd29ydGggZnV6emluZy4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyByZWZhY3RvcmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbWVtb3J5IGxlYWtzIG9yIGNyYXNoZXMuXG5cbkZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLCBJJ20gdGhpbmtpbmcgYHZjc19yZWFkYCwgYHZjc193cml0ZWAsIGBwY2hfdWFydF9pbml0X3BvcnRgLCBgcGNoX3VhcnRfZXhpdF9wb3J0YCwgYG1lbl96MTM1X3Byb2JlYCwgYW5kIGBtZW5fejEzNV9yZW1vdmVgLiBIb2xkIG9uLCBgcGNoX3VhcnRfaW5pdF9wb3J0YCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIHByb2JlLiBJIHNob3VsZCBjaGVjayBpZiBJIGNhbiBlbmFibGUgYm90aCBgU0VSSUFMX1BDSF9VQVJUYCBhbmQgYFNFUklBTF9NRU5fWjEzNWAuIGBTRVJJQUxfUENIX1VBUlRgIGRlcGVuZHMgb24gYFBDSWAgYW5kIGBYODZgLCBzbyB0aGF0IHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuIEFuZCBgU0VSSUFMX01FTl9aMTM1YCBuZWVkcyBgTUNCYC4gR290IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjg5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjM3LjkxMzg1Njk0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NjAxNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRVJJQUxfUENIX1VBUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc9MTE2MT1jb25maWcgU0VSSUFMX0FMVEVSQV9VQVJUX0NPTlNPTEVcXG4tLVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExNjgtXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc6MTE2OTpjb25maWcgU0VSSUFMX1BDSF9VQVJUXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgRUcyMFQgUENIL0xBUElTIFNlbWljb24gSU9IKE1MNzIxMy9NTDcyMjMvTUw3ODMxKSBVQVJUXFxcIlxcbi0tXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4NC1cXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjozOC40NTM0NzE1NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNDA5MjUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlcGVuZGVuY3kgQ2hlY2s6IFNFUklBTF9QQ0hfVUFSVCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSBgU0VSSUFMX1BDSF9VQVJUYCBtb2R1bGUgaXMgcHJvcGVybHkgc2V0IHVwLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBJIHdhbnQgdG8gZG8gdGhpcyBtZXRob2RpY2FsbHkuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBsaXN0aW5nIHRoZW0sIGJ1dCB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFsbCBpbnRlcmFjdCBhbmQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyB3aXRoaW4gdGhvc2UgY29ubmVjdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcywga25vd2luZyB0aGUgY29kZSBpbnNpZGUgYW5kIG91dC4gQXJlIHRoZXJlIGFueSBsaWJyYXJpZXMsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvdGhlciBtb2R1bGVzIGl0IHJlbGllcyBvbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHk/IFRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4OCwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjQyLjA1NzU2ODEyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTcyNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRVJJQUxfUENIX1VBUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc9MTE2MT1jb25maWcgU0VSSUFMX0FMVEVSQV9VQVJUX0NPTlNPTEVcXG4tLVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExNjgtXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc6MTE2OTpjb25maWcgU0VSSUFMX1BDSF9VQVJUXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgRUcyMFQgUENIL0xBUElTIFNlbWljb24gSU9IKE1MNzIxMy9NTDcyMjMvTUw3ODMxKSBVQVJUXFxcIlxcbi0tXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4NC1cXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjo0Mi4yNjU1NDg4OTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNjksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNjk6XFx0Y29uZmlnIFNFUklBTF9QQ0hfVUFSVFxcbjExNzA6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgVUFSVFxcXCJcXG4xMTcxOlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IChYODZfMzIgfHwgTUlQUyB8fCAgQ09NUElMRV9URVNUKVxcbjExNzI6XFx0XFx0c2VsZWN0IFNFUklBTF9DT1JFXFxuMTE3MzpcXHRcXHRoZWxwXFxuMTE3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0goUGxhdGZvcm0gY29udHJvbGxlciBIdWIpIFVBUlQgb2YgSW50ZWwgRUcyMFRcXG4xMTc1OlxcdFxcdCAgd2hpY2ggaXMgYW4gSU9IKElucHV0L091dHB1dCBIdWIpIGZvciB4ODYgZW1iZWRkZWQgcHJvY2Vzc29yLlxcbjExNzY6XFx0XFx0ICBFbmFibGluZyBQQ0hfRE1BLCB0aGlzIFBDSCBVQVJUIHdvcmtzIGFzIERNQSBtb2RlLlxcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIExBUElTIFNlbWljb25kdWN0b3IgSU9IKElucHV0L1xcbjExNzk6XFx0XFx0ICBPdXRwdXQgSHViKSwgTUw3MjEzLCBNTDcyMjMgYW5kIE1MNzgzMS5cXG4xMTgwOlxcdFxcdCAgTUw3MjEzIElPSCBpcyBmb3IgSVZJKEluLVZlaGljbGUgSW5mb3RhaW5tZW50KSB1c2UsIE1MNzIyMyBJT0ggaXNcXG4xMTgxOlxcdFxcdCAgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UgYW5kIE1MNzgzMSBJT0ggaXMgZm9yIGdlbmVyYWwgcHVycG9zZSB1c2UuXFxuMTE4MjpcXHRcXHQgIE1MNzIxMy9NTDcyMjMvTUw3ODMxIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLlxcbjExODM6XFx0XFx0ICBNTDcyMTMvTUw3MjIzL01MNzgzMSBpcyBjb21wbGV0ZWx5IGNvbXBhdGlibGUgZm9yIEludGVsIEVHMjBUIFBDSC5cXG4xMTg0OlxcdFxcbjExODU6XFx0Y29uZmlnIFNFUklBTF9QQ0hfVUFSVF9DT05TT0xFXFxuMTE4NjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBjb25zb2xlIG9uIEludGVsIEVHMjBUIFBDSCBVQVJUL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0hcXFwiXFxuMTE4NzpcXHRcXHRkZXBlbmRzIG9uIFNFUklBTF9QQ0hfVUFSVD15XFxuMTE4ODpcXHRcXHRzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjo0Mi4yNjU3ODI5OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5ODk5OTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBwcmVzZW5jZSBvZiBQQ0kgYW5kIGVpdGhlciBYODZfMzIsIE1JUFMsIG9yIENPTVBJTEVfVEVTVC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gc3l6Ym90LCB3aGVyZSBJIHVzdWFsbHkgc2VlIHRoZXNlIHRlc3RzIHJ1biwgaXMgdHlwaWNhbGx5IG9uIFg4Nl82NCBhcmNoaXRlY3R1cmUuIFRoYXQgcmFpc2VzIGEgcmVkIGZsYWcuIEl0IGxvb2tzIGxpa2UgYFNFUklBTF9QQ0hfVUFSVGAgbWlnaHQgb25seSBiZSBlbmFibGVkIGlmIGBDT01QSUxFX1RFU1RgIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB3ZSBjYW4gdW5jb3ZlciBob3cgdGhpcyBjb3VsZCBlZmZlY3QgYSB0ZXN0IHJ1bm5pbmcuIEkgd2lsbCBjaGVjayB0aGUgZGVwZW5kZW5jeSBvZiBgU0VSSUFMX01FTl9aMTM1YCBhbmQgc2VlIGlmIHRoZSBzYW1lIGlzIHRydWUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjE1LCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6NDcuNTY0Nzg3NDQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4MDM1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFUklBTF9NRU5fWjEzNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZz0xMzczPWNvbmZpZyBTRVJJQUxfU1RfQVNDX0NPTlNPTEVcXG4tLVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTEzNzctXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc6MTM3ODpjb25maWcgU0VSSUFMX01FTl9aMTM1XFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTM3OS1cXHR0cmlzdGF0ZSBcXFwiTUVOIDE2ejEzNSBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjo0Ny43MzY1OTg2MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjA6XFx0XFx0Ym9vbCBcXFwiQ29uc29sZSBvbiBBY3Rpb25zIFNlbWkgT3dsIHNlcmlhbCBwb3J0XFxcIlxcbjE0NjE6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfT1dMPXlcXG4xNDYyOlxcdFxcdHNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFXFxuMTQ2MzpcXHRcXHRzZWxlY3QgU0VSSUFMX0VBUkxZQ09OXFxuMTQ2NDpcXHRcXHRkZWZhdWx0IHlcXG4xNDY1OlxcdFxcdGhlbHBcXG4xNDY2OlxcdFxcdCAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSBBY3Rpb25zIFNlbWljb25kdWN0b3IgUzUwMC9TOTAwIFVBUlRcXG4xNDY3OlxcdFxcdCAgYXMgdGhlIHN5c3RlbSBjb25zb2xlLlxcbjE0Njg6XFx0XFxuMTQ2OTpcXHRjb25maWcgU0VSSUFMX1JEQVxcbjE0NzA6XFx0XFx0Ym9vbCBcXFwiUkRBIE1pY3JvIHNlcmlhbCBwb3J0IHN1cHBvcnRcXFwiXFxuMTQ3MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUkRBIHx8IENPTVBJTEVfVEVTVFxcbjE0NzI6XFx0XFx0c2VsZWN0IFNFUklBTF9DT1JFXFxuMTQ3MzpcXHRcXHRoZWxwXFxuMTQ3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBSREE4ODEwUEwgU29DJ3MgVUFSVC5cXG4xNDc1OlxcdFxcdCAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgb24tYm9hcmQgc2VyaWFsIHBvcnQuXFxuMTQ3NjpcXHRcXHQgIE90aGVyd2lzZSwgc2F5ICdOJy5cXG4xNDc3OlxcdFxcbjE0Nzg6XFx0Y29uZmlnIFNFUklBTF9SREFfQ09OU09MRVxcbjE0Nzk6XFx0XFx0Ym9vbCBcXFwiQ29uc29sZSBvbiBSREEgTWljcm8gc2VyaWFsIHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjQ3LjczNjg0MzgyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAyOTYxMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0IGFuZCB0aGlua2luZyB0aGlzOlxuXG4qKk1pbm9yIENvZGUgUmV2aWV3IENvcnJlY3Rpb24qKlxuXG5TaG9vdCEgSSB3YXMgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb3IgcmVmZXJlbmNlIHRvIGBTRVJJQUxfTUVOX1oxMzVgIGFuZCBJIHRvdGFsbHkgZ3JhYmJlZCB0aGUgd3JvbmcgbGluZSBudW1iZXIuIEkgd2FzIHNjYW5uaW5nIHRoZSBmaWxlLCB0aG91Z2h0IEkgd2FzIG9uIHRoZSByaWdodCB0cmFjaywgYnV0IEkgbWlzcmVhZCBpdC4gSXQncyBhY3R1YWxseSBub3QgYXQgbGluZSAxMzc1OyB0aGUgaW1wb3J0YW50IGJpdCBvZiBjb2RlIGlzIGF0IGxpbmUgMTM3OC4gTm8gYmlnIGRlYWwsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGJlIG1vcmUgY2FyZWZ1bCB3aXRoIHRob3NlIHF1aWNrIGxpbmUgY2hlY2tzLiBOb3cgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6NTMuMDM5ODEwNjg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzc4OlxcdGNvbmZpZyBTRVJJQUxfTUVOX1oxMzVcXG4xMzc5OlxcdFxcdHRyaXN0YXRlIFxcXCJNRU4gMTZ6MTM1IFN1cHBvcnRcXFwiXFxuMTM4MDpcXHRcXHRzZWxlY3QgU0VSSUFMX0NPUkVcXG4xMzgxOlxcdFxcdGRlcGVuZHMgb24gTUNCXFxuMTM4MjpcXHRcXHRoZWxwXFxuMTM4MzpcXHRcXHQgIFNheSB5ZXMgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE1FTiAxNnoxMzUgSGlnaCBTcGVlZCBVQVJUIElQLUNvcmVcXG4xMzg0OlxcdFxcdCAgb24gYSBNQ0IgY2Fycmllci5cXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4xMzg3OlxcdFxcdCAgbWVuX3oxMzVfdWFydC5rb1xcbjEzODg6XFx0XFxuMTM4OTpcXHRjb25maWcgU0VSSUFMX1NQUkRcXG4xMzkwOlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTcHJlYWR0cnVtIHNlcmlhbFxcXCJcXG4xMzkxOlxcdFxcdHNlbGVjdCBTRVJJQUxfQ09SRVxcbjEzOTI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuMTM5MzpcXHRcXHRoZWxwXFxuMTM5NDpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgU3ByZWFkdHJ1bSdzIHNlcmlhbC5cXG4xMzk1OlxcdFxcbjEzOTY6XFx0Y29uZmlnIFNFUklBTF9TUFJEX0NPTlNPTEVcXG4xMzk3OlxcdFxcdGJvb2wgXFxcIlNwcmVhZHRydW0gVUFSVCBjb25zb2xlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjUzLjA0MDA0NDc0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk4OTY1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgU2VyaWFsIFBvcnQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgU0VSSUFMX01FTl9aMTM1YC4gVGhhdCBjbGVhcmx5IGRlcGVuZHMgb24gYE1DQmAsIHdoaWNoIGlzIGV4cGVjdGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGJyb2FkZXIuIFdoYXQgYWJvdXQgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYD8gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGVzZSBzZXR0aW5ncyBpbnRlcmFjdC4gQW0gSSBpbmFkdmVydGVudGx5IGNyZWF0aW5nIGEgY29uZmxpY3QsIG9yIGEgcmVkdW5kYW50IGNvbmZpZ3VyYXRpb24/IEFyZSB0aGV5IGluZGVwZW5kZW50LCBvciBhcmUgdGhleSByZWxhdGVkIGluIGEgd2F5IEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nPyBJdCdzIGVzc2VudGlhbCB0aGF0IEkgZXhhbWluZSB0aGUgYnJvYWRlciBjb250ZXh0IGhlcmUuIFRoaXMgY291bGQgYmUgYSBtb2R1bGUsIGEgZHJpdmVyLCBvciBldmVuIHNvbWV0aGluZyBsb3dlci1sZXZlbDsgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIG11c3QgYmUgZXhhbWluZWQgdmVyeSBjYXJlZnVsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDMsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjU4LjgzOTAxMzcyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5ODIwMTUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1JR0FfQlVJTFRJTl9TRVJJQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6NTkuMDM4ODQ0Njk0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3R0eS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5NTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVBXaXJlbGVzcyAzRyBVTVRTIFBDTUNJQSBjYXJkIHN1cHBvcnRcXFwiXFxuIDI5NjpcXHRcXHRkZXBlbmRzIG9uIFBDTUNJQSBcXHUwMDI2XFx1MDAyNiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEhBU19JT1BPUlRcXG4gMjk3OlxcdFxcdHNlbGVjdCBQUFBcXG4gMjk4OlxcdFxcdGhlbHBcXG4gMjk5OlxcdFxcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgM0cgVU1UUyBQQ01DSUEgY2FyZCBmcm9tIElQV2lyZWxlc3MgY29tcGFueS4gSW5cXG4gMzAwOlxcdFxcdCAgc29tZSBjb3VudHJpZXMgKGZvciBleGFtcGxlIEN6ZWNoIFJlcHVibGljLCBULU1vYmlsZSBJU1ApIHRoaXMgY2FyZFxcbiAzMDE6XFx0XFx0ICBpcyBzaGlwcGVkIGZvciBzZXJ2aWNlIGNhbGxlZCBVTVRTIDRHLlxcbiAzMDI6XFx0XFxuIDMwMzpcXHRjb25maWcgTl9HU01cXG4gMzA0OlxcdFxcdHRyaXN0YXRlIFxcXCJHU00gTVVYIGxpbmUgZGlzY2lwbGluZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpXFxcIlxcbiAzMDU6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMzA2OlxcdFxcdGhlbHBcXG4gMzA3OlxcdFxcdCAgVGhpcyBsaW5lIGRpc2NpcGxpbmUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEdTTSBNVVggcHJvdG9jb2wgYW5kXFxuIDMwODpcXHRcXHQgIHByZXNlbnRzIHRoZSBtdXggYXMgYSBzZXQgb2YgNjEgaW5kaXZpZHVhbCB0dHkgZGV2aWNlcy5cXG4gMzA5OlxcdFxcbiAzMTA6XFx0Y29uZmlnIE5PWk9NSVxcbiAzMTE6XFx0XFx0dHJpc3RhdGUgXFxcIkhTRFBBIEJyb2FkYmFuZCBXaXJlbGVzcyBEYXRhIENhcmQgLSBHbG9iZSBUcm90dGVyXFxcIlxcbiAzMTI6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gMzEzOlxcdFxcdGhlbHBcXG4gMzE0OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBIU0RQQSBkcml2ZXIgQnJvYWRiYW5kIFdpcmVsZXNzIERhdGEgQ2FyZCAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjU5LjAzOTA1NzkwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUyNDIzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQW1pZ2EgU2VyaWFsIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgQW1pZ2EgYnVpbHQtaW4gc2VyaWFsIHBvcnQsIGBBTUlHQV9CVUlMVElOX1NFUklBTGAsIGlzIGRlZmluZWQuIFRoaXMgbGlrZWx5IG1lYW5zIEknbGwgZmluZCBpdCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHByb2JhYmx5IHVuZGVyIHRoZSBkcml2ZXJzIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHR0eSBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3R0eS9LY29uZmlnYCwgb3IgbWF5YmUgYSBzaW1pbGFybHkgbmFtZWQgZmlsZSB3aXRoaW4gdGhhdCB0cmVlLiBJJ2xsIHN0YXJ0IHRoZXJlLCBhcyB0aGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBsb29raW5nIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGVybWluYWwgZGV2aWNlcyBhbmQgc2VyaWFsIHBvcnRzLiBMZXQncyBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTc6MDMuNTkxNDg0ODE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3NTI4NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBTUlHQV9CVUlMVElOX1NFUklBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk3LVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05OS1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTc6MDguMTg5MDI2MzYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTQ4MTc4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBEZXZpY2UgRHJpdmVyIFRlc3RhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgS2NvbmZpZy5kZXZpY2VzYCBmaWxlIHdpdGhpbiB0aGUgYGFyY2gvbTY4a2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRyaXZlciBpbiBxdWVzdGlvbiwgd2hpY2ggc2VlbXMgdG8gYmUgYGFtaXNlcmlhbC5jYCwgaXNuJ3QgZ29pbmcgdG8gYmUgZGlyZWN0bHkgdGVzdGFibGUgb24gYW4geDg2IHN5c3RlbS4gVGhhdCdzIGEga2V5IGZpcnN0IHBvaW50LlxuXG5Ob3csIEkgc2VlIGBTRVJJQUxfUENIX1VBUlRgIG1lbnRpb25lZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIHRlc3RhYmxlLiBIbW0sIGl0IGFwcGVhcnMgdGhhdCB0aGlzIGNhbiBiZSB0ZXN0ZWQgb24geDg2XzMyLCBvciBhdCBsZWFzdCB3aXRoIGBDT01QSUxFX1RFU1RgLiBIb3dldmVyLCBzeXpib3QsIHdoaWNoIGlzIHRoZSBmdXp6ZXIgdGhhdCdzIHR5cGljYWxseSB1c2VkLCBydW5zIG9uIHg4Nl82NCwgZG9lc24ndCBpdD8gU28sIHVubGVzcyBgQ09NUElMRV9URVNUYCBpcyBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgYSBnaXZlbiB0ZXN0IHJ1biwgaXQncyBsaWtlbHkgdGhhdCBgU0VSSUFMX1BDSF9VQVJUYCB3b24ndCBiZSB0cmlnZ2VyZWQuIEhvbGQgb24sIGlzbid0IHN5emJvdCBuZXZlciBydW4gd2l0aCBgQ09NUElMRV9URVNUYD8gUmlnaHQuIFNvLCB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIHRlc3RhYmxlLlxuXG5BaCwgSSBtaXNzZWQgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGhhcyBhIGRlcGVuZGVuY3k6IGBQQ0kgXHUwMDI2XHUwMDI2IChYODZfMzIgfHwgTUlQUyB8fCBDT01QSUxFX1RFU1QpYC4gVGhpcyBjb25maXJtcyB0aGF0IGl0J3MgKm5vdCogdGVzdGFibGUgb24geDg2XzY0IHVubGVzcyBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB3aGljaCwgYXMgZGlzY3Vzc2VkLCBpcyB1bmxpa2VseS4gR290IGl0LlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IGBTRVJJQUxfTUVOX1oxMzVgLiBJdCBkZXBlbmRzIG9uIGBNQ0JgLiBgTUNCYC4uLiB0aGF0J3MgdGhlIE1FTiBDaGFtZWxlb24gQnVzLCB3aGljaCBjYW4gYmUgUENJLWJhc2VkLiBTbywgaWYgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYE1DQmAuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHNlZSBpZiB0aGUgc2Vjb25kIGRldmljZSBpcyB0ZXN0YWJsZSBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzcyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjE0Ljg0Mzg0ODk1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzMzU5OTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21jYi9LY29uZmlnLTUtXFxuZHJpdmVycy9tY2IvS2NvbmZpZzo2Om1lbnVjb25maWcgTUNCXFxuZHJpdmVycy9tY2IvS2NvbmZpZy03LVxcdCAgIHRyaXN0YXRlIFxcXCJNQ0Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbWNiL0tjb25maWc9MTk9aWYgTUNCXFxuZHJpdmVycy9tY2IvS2NvbmZpZzoyMDpjb25maWcgTUNCX1BDSVxcbmRyaXZlcnMvbWNiL0tjb25maWctMjEtXFx0ICAgdHJpc3RhdGUgXFxcIlBDSSBiYXNlZCBNQ0IgY2FycmllclxcXCJcXG4tLVxcbmRyaXZlcnMvbWNiL0tjb25maWctMzEtXFxuZHJpdmVycy9tY2IvS2NvbmZpZzozMjpjb25maWcgTUNCX0xQQ1xcbmRyaXZlcnMvbWNiL0tjb25maWctMzMtXFx0ICAgdHJpc3RhdGUgXFxcIkxQQyAobm9uIFBDSSkgYmFzZWQgTUNCIGNhcnJpZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjE4LjY3NzQ2MTcyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzEyODQ0NDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBgTUNCYCAqY2FuKiBiZSBlbmFibGVkLCBidXQgdGhlIG1vc3QgZWFzaWx5IHRlc3RhYmxlIHBhcnQgb2YgdGhpcyBpcyBkZWZpbml0ZWx5IGB2Y19zY3JlZW4uY2AsIGdpdmVuIHRoYXQgYENPTkZJR19WVGAgaXMgYWxyZWFkeSBlbmFibGVkLiBHb29kLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiBpbiBgdmNfc2NyZWVuLmNgLCBpdCdzIGEgc2ltcGxlIGNoYW5nZSwgcmVwbGFjaW5nIGBfX2dldF9mcmVlX3BhZ2VgIHdpdGggYGttYWxsb2NgLCBhbmQgYGZyZWVfcGFnZV9wdHJgIHdpdGggYGtmcmVlYC4gIElzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyAgWWVzLCBpdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgaXQncyBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kuICBCdXQsIGRvZXMgaXQgYWx0ZXIgZXhlY3V0aW9uIGZsb3c/IE5vLCBpdCdzIG5vdCBjaGFuZ2luZyB0aGUgKmhvdyogdGhlIGNvZGUgKmRvZXMqIHRoZSBqb2IsIG9ubHkgaG93IG1lbW9yeSBpcyBoYW5kbGVkLlxuXG5Ib3dldmVyLCBhIGJ1ZyBjb3VsZCBzbGlwIGluIHdoZXJlIGBrZnJlZWAgZ2V0cyBjYWxsZWQgb24gbWVtb3J5IHRoYXQgd2FzICpzdXBwb3NlZCogdG8gYmUgZnJlZWQgYnkgYGZyZWVfcGFnZWAsIG9yIG1heWJlIGBrbWFsbG9jYCByZXR1cm5zIHVuYWxpZ25lZCBtZW1vcnkgKHRob3VnaCB0aGF0J3MgbGVzcyBsaWtlbHkgaW4gdGhpcyBzY2VuYXJpbykuXG5cbldhaXQsIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSBJIGRvbid0IG5lZWQgdG8gZnV6eiBjaGFuZ2VzIHRoYXQgYXJlIGRvY3VtZW50YXRpb24sIGtjb25maWcgY2hhbmdlcywgbG9nZ2luZywgb3IgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24uIEFsc28sIEkgZG9uJ3QgbmVlZCB0byBmdXp6IGNvZGUgdGhhdCdzIG5vdCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBjbGVhcmx5IGRvZXNuJ3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlIGNhdGVnb3JpZXMuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgcGxhaW4gYW5kIHNpbXBsZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb24gc2V0LCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzLiBgdmNzX3JlYWRgIGFuZCBgdmNzX3dyaXRlYCBhcmUgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgdmNfc2NyZWVuLmNgLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHNlcmlhbCBkcml2ZXJzLiBgcGNoX3VhcnRfaW5pdF9wb3J0YCwgYHBjaF91YXJ0X2V4aXRfcG9ydGAsIGBtZW5fejEzNV9wcm9iZWAsIGBtZW5fejEzNV9yZW1vdmVgLCBgcnNfc3RhcnR1cGAgYW5kIGByc19zaHV0ZG93bmAgbG9vayByZWxldmFudC5cblxuTGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWdzLiAgYFNFUklBTF9QQ0hfVUFSVGAsIGBTRVJJQUxfTUVOX1oxMzVgLCBgTUNCYCwgYE1DQl9QQ0lgLCBhbmQgYFZUYCAoYWxyZWFkeSBlbmFibGVkKS4gV2FpdCwgYFNFUklBTF9QQ0hfVUFSVGAgZGVwZW5kcyBvbiBgWDg2XzMyIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUYC4gSSBzaG91bGQgYXZvaWQgbGlzdGluZyBhbnl0aGluZyB0aGF0J3MgdG9vIGdlbmVyaWMsIHNvIEkgd29uJ3QgbGlzdCBhbnkgb2YgdGhlc2UsIGJ1dCBJICpjYW4qIGxpc3QgdGhvc2UgdGhhdCBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZSwgcmlnaHQ/IFNvLCBgU0VSSUFMX01FTl9aMTM1YCwgYFNFUklBTF9QQ0hfVUFSVGAsIGFuZCBtYXliZSBgQU1JR0FfQlVJTFRJTl9TRVJJQUxgIChldmVuIGlmIGl0J3MgbTY4aywgc3l6Ym90IG1pZ2h0IHRlc3QgbTY4ayEpLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrOiBgdmNzX3JlYWRgIGFuZCBgdmNzX3dyaXRlYCAqYXJlKiB0aGUgZXhhY3QgZnVuY3Rpb25zIG1vZGlmaWVkIGluIGB2Y19zY3JlZW4uY2AsIGFuZCB0aGUgb3RoZXJzIGFyZSByZWxhdGVkLiAgQXJlIHRoZXNlIGhvdCBwYXRocz8gYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgYXJlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGAvZGV2L3ZjcypgLiBOb3QgbmVjZXNzYXJpbHkgaG90IGxpa2UgYSBuZXR3b3JrIHN0YWNrLCBidXQgdGhleSAqY291bGQqIGJlIGNhbGxlZCBmcmVxdWVudGx5LiBgcHJvYmVgLCBgcmVtb3ZlYCBhcmUgZGVmaW5pdGVseSBub3QgaG90IHBhdGhzLiBgcnNfc3RhcnR1cGAgYW5kIGByc19zaHV0ZG93bmAgYXJlbid0IGhvdCBwYXRocyBlaXRoZXIuXG5cbk9rYXksIGxldCdzIHJlZmluZSB0aGlzLlxuXG4qKkZvY3VzIFN5bWJvbHM6KipcblxuKiAgIGB2Y3NfcmVhZGBcbiogICBgdmNzX3dyaXRlYFxuKiAgIGBwY2hfdWFydF9pbml0X3BvcnRgXG4qICAgYHBjaF91YXJ0X2V4aXRfcG9ydGBcbiogICBgbWVuX3oxMzVfcHJvYmVgXG4qICAgYG1lbl96MTM1X3JlbW92ZWBcbiogICBgcnNfc3RhcnR1cGBcbiogICBgcnNfc2h1dGRvd25gXG5cbioqQ29uZmlnczoqKlxuXG4qICAgYFNFUklBTF9NRU5fWjEzNWBcbiogICBgU0VSSUFMX1BDSF9VQVJUYFxuKiAgIGBBTUlHQV9CVUlMVElOX1NFUklBTGBcbiogICBgTUNCYFxuKiAgIGBNQ0JfUENJYFxuXG4qKlJlYXNvbmluZzoqKlxuXG5UaGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBfX2dldF9mcmVlX3BhZ2VgL2BmcmVlX3BhZ2VgIHdpdGggYGttYWxsb2NgL2BrZnJlZWAuICBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYWNyb3NzIG11bHRpcGxlIHR0eS9zZXJpYWwgZHJpdmVycy4gIFRoaXMgY2hhbmdlICpjb3VsZCogaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQgd2l0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMiwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjM1LjgwNTkxMDAzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODMyNzI4OCwiRXJyb3IiOiJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQU1JR0FfQlVJTFRJTl9TRVJJQUwiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VSSUFMX01FTl9aMTM1XCIsXG4gICAgXCJTRVJJQUxfUENIX1VBUlRcIixcbiAgICBcIkFNSUdBX0JVSUxUSU5fU0VSSUFMXCIsXG4gICAgXCJNQ0JcIixcbiAgICBcIk1DQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Y3NfcmVhZFwiLFxuICAgIFwidmNzX3dyaXRlXCIsXG4gICAgXCJwY2hfdWFydF9pbml0X3BvcnRcIixcbiAgICBcInBjaF91YXJ0X2V4aXRfcG9ydFwiLFxuICAgIFwibWVuX3oxMzVfcHJvYmVcIixcbiAgICBcIm1lbl96MTM1X3JlbW92ZVwiLFxuICAgIFwicnNfc3RhcnR1cFwiLFxuICAgIFwicnNfc2h1dGRvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbnMgKF9fZ2V0X2ZyZWVfcGFnZSwgZnJlZV9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoa21hbGxvYywga2ZyZWUpIGFjcm9zcyBzZXZlcmFsIHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMgKHZjX3NjcmVlbiwgcGNoX3VhcnQsIG1lbl96MTM1X3VhcnQsIGFtaXNlcmlhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IGFsbG9jYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBTUlHQV9CVUlMVElOX1NFUklBTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNzozNi4wMjQyNTk5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTczODkxNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipUaGUgRGVidWdnaW5nIERhbmNlOiBNaXNzaW5nIFNlcmlhbCBEZXZpY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYnVpbGQgaXMgY29tcGxhaW5pbmcgYWJvdXQgYSBtaXNzaW5nIGBBTUlHQV9CVUlMVElOX1NFUklBTGAgc3ltYm9sLiBUaGF0J3MgbmV2ZXIgZnVuLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgYSBsZWdpdGltYXRlIGNvbmZpZ3VyYXRpb24gaXNzdWUuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgYGFyY2gvbTY4ay9LY29uZmlnLmRldmljZXNgLiBJIHZhZ3VlbHkgcmVjYWxsIG1ha2luZyBjaGFuZ2VzIGluIHRoYXQgYXJlYSByZWxhdGVkIHRvIHRoZSBzZXJpYWwgcG9ydCBkZWZpbml0aW9ucy4gSXQncyBwb3NzaWJsZSBJIG92ZXJsb29rZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBJIG1pc3NlZC4gSXQncyB1bmxpa2VseSBhIHNpbXBsZSB0eXBvLCBidXQgSSBjYW7igJl0IHJ1bGUgYW55dGhpbmcgb3V0IHdpdGhvdXQgdmVyaWZ5aW5nIHRoZSBkZXRhaWxzLiBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBLY29uZmlnIGFuZCBzZWUgaWYgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIGlzIGludGFjdC4gSXMgaXQgZW5hYmxlZCBjb25kaXRpb25hbGx5PyBJcyB0aGVyZSBhIG5lc3RlZCBkZXBlbmRlbmN5IHRoYXQncyBub3QgYmVpbmcgbWV0IGluIHRoZSBjdXJyZW50IGJ1aWxkIGVudmlyb25tZW50PyBHb3R0YSB0cmFjZSB0aGF0IHRocm91Z2guIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjQwLjU5ODE1NjMyOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMjUyMjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBTUlHQV9CVUlMVElOX1NFUklBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk3LVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05OS1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM9MTIxPWNvbmZpZyBTRVJJQUxfQ09OU09MRVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXMtMTIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGVcXFwiXFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlczoxMjM6XFx0ZGVwZW5kcyBvbiBBTUlHQV9CVUlMVElOX1NFUklBTD15XFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy0xMjQtXFx0aGVscFxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTI0PUNPTkZJR19QUk9DX0hBUkRXQVJFPXlcXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6MjU6Q09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXlcXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctMjYtQ09ORklHX1NFUklBTF9DT05TT0xFPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZz00Mj1DT05GSUdfQVRBUklfRFNQNTZLPW1cXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NDM6Q09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctNDQtQ09ORklHX1NFUklBTF9DT05TT0xFPXlcXG4tLVxcbmRyaXZlcnMvdHR5L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19TRVJJQUxfREVWX0JVUylcXHQrPSBzZXJkZXYvXFxuLS1cXG5kcml2ZXJzL3R0eS9NYWtlZmlsZS0xOC0jIHR0eSBkcml2ZXJzXFxuZHJpdmVycy90dHkvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwub1xcbmRyaXZlcnMvdHR5L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19NT1hBX0lOVEVMTElPKVxcdCs9IG1veGEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNzo0NS41MjA2ODc1NzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk0NjMwOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBDb25maWcgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGNvdWxkIGhhdmUgc3dvcm4gSSBzYXcgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYCwgc29tZXdoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcyEgSXQncyByaWdodCB0aGVyZSBpbiBgYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlc2AuIFRoYXQncyBzdHJhbmdlLCB0aGUgdG9vbCBJIHdhcyB1c2luZyBqdXN0IGZsYWdnZWQgaXQgYXMgbWlzc2luZy4gTm93LCB3aHkgd291bGQgaXQgc2F5IHRoYXQ/XG5cbkhtbSwgSSBoYXZlIGEgZmV3IGlkZWFzLiBQZXJoYXBzIHRoZSB0b29sIGlzIG92ZXJseSBmb2N1c2VkIG9uIHg4NiBjb25maWd1cmF0aW9ucyBhbmQgZG9lc24ndCBjb25zaWRlciBvdGhlciBhcmNoaXRlY3R1cmVzLCBvciBtYXliZSBpdHMgS2NvbmZpZyBwYXJzaW5nIGlzIGEgbGl0dGxlIGZsYXdlZCBhbmQgbWlzc2VkIGl0LCBvciBtYXliZSBpdCdzIG9ubHkgY2hlY2tpbmcgb3B0aW9ucyBhdmFpbGFibGUgb24gbXkgY3VycmVudCBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgKHg4Nl82NCkuIE9uZSBvZiB0aG9zZSBzZWVtcyBsaWtlbHksIHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBpdCBleGlzdHMgYW5kIEkgY2FuIHVzZSBpdC4gT2theSwgSSdsbCBqdXN0IHJlbW92ZSBgQU1JR0FfQlVJTFRJTl9TRVJJQUxgIGZyb20gdGhlIGxpc3QgZm9yIG5vdzsgSSBjYW4gYWx3YXlzIHJlLWFkZCBpdCBsYXRlciBpZiBuZWVkZWQuIFByb2JsZW0gc29sdmVkLCBtb3Zpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzcyLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjUyLjQ2NzAwNjkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MDU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 13:07:51 +0000 UTC FinishedAt: 2026-06-30 13:17:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIAL_MEN_Z135", "SERIAL_PCH_UART", "MCB", "MCB_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIAL_MEN_Z135", "SERIAL_PCH_UART", "MCB", "MCB_PCI" ], "series_id": "608645a5-23c3-4ea3-9e85-d8f55733a3d0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vcs_read", "vcs_write", "pch_uart_init_port", "pch_uart_exit_port", "men_z135_probe", "men_z135_remove", "rs_startup", "rs_shutdown" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklBTF9NRU5fWjEzNSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfUENIX1VBUlQmIzM0OywKICAgICYjMzQ7TUNCJiMzNDssCiAgICAmIzM0O01DQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2Y3NfcmVhZCYjMzQ7LAogICAgJiMzNDt2Y3Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfaW5pdF9wb3J0JiMzNDssCiAgICAmIzM0O3BjaF91YXJ0X2V4aXRfcG9ydCYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9wcm9iZSYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cnNfc3RhcnR1cCYjMzQ7LAogICAgJiMzNDtyc19zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbnMgKF9fZ2V0X2ZyZWVfcGFnZSwgZnJlZV9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoa21hbGxvYywga2ZyZWUpIGFjcm9zcyBzZXZlcmFsIHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMgKHZjX3NjcmVlbiwgcGNoX3VhcnQsIG1lbl96MTM1X3VhcnQsIGFtaXNlcmlhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IGFsbG9jYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTU5ODBjODEwMzg4ZTRiNWIyYjMyZDQ4YTMxYjFlNWE3NGZmMjMwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDEzOjE1OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcbmluZGV4IDgxZWFjYTc1MTU0MWFiLi4yOGFmMGZkOTgxODE4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuY1xuQEAgLTQ0MywyMyAmIzQzOzQ0MywyMyBAQCBzdGF0aWMgaW50IHJzX3N0YXJ0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbylcbiBcdHN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9IFx1MDAyNmluZm8tXHUwMDNldHBvcnQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRyZXR2YWw9MDtcbi1cdHVuc2lnbmVkIGxvbmcgcGFnZTtcbiYjNDM7XHR2b2lkICpidWZmZXI7XG4gXG4tXHRwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuLVx0aWYgKCFwYWdlKVxuJiM0MztcdGJ1ZmZlciA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJ1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXG4gXHRpZiAodHR5X3BvcnRfaW5pdGlhbGl6ZWQocG9ydCkpIHtcbi1cdFx0ZnJlZV9wYWdlKHBhZ2UpO1xuJiM0MztcdFx0a2ZyZWUoYnVmZmVyKTtcbiBcdFx0Z290byBlcnJvdXQ7XG4gXHR9XG4gXG4gXHRpZiAoaW5mby1cdTAwM2V4bWl0LmJ1Zilcbi1cdFx0ZnJlZV9wYWdlKHBhZ2UpO1xuJiM0MztcdFx0a2ZyZWUoYnVmZmVyKTtcbiBcdGVsc2Vcbi1cdFx0aW5mby1cdTAwM2V4bWl0LmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHBhZ2U7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXhtaXQuYnVmID0gYnVmZmVyO1xuIFxuICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTlxuIFx0cHJpbnRrKFwmIzM0O3N0YXJ0aW5nIHVwIHR0eXMlZCAuLi5cJiMzNDssIGluZm8tXHUwMDNlbGluZSk7XG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBzdGF0aWMgdm9pZCByc19zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKVxuIFx0ICovXG4gXHRmcmVlX2lycShJUlFfQU1JR0FfVkVSVEIsIGluZm8pO1xuIFxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWluZm8tXHUwMDNleG1pdC5idWYpO1xuJiM0MztcdGtmcmVlKGluZm8tXHUwMDNleG1pdC5idWYpO1xuIFx0aW5mby1cdTAwM2V4bWl0LmJ1ZiA9IE5VTEw7XG4gXG4gXHRpbmZvLVx1MDAzZUlFUiA9IDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcbmluZGV4IDZmYWQ1N2ZlZTkxMmMyLi45MTM4ZmEyOWQzMDFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R0eV9mbGlwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21jYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUVOX1oxMzVfTUFYX1BPUlRTXHRcdDEyXG4gI2RlZmluZSBNRU5fWjEzNV9CQVNFQ0xLXHRcdDI5NDkxMjAwXG5AQCAtODExLDcgJiM0Mzs4MTIsNyBAQCBzdGF0aWMgaW50IG1lbl96MTM1X3Byb2JlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2LFxuIFx0aWYgKCF1YXJ0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHVhcnQtXHUwMDNlcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcbiYjNDM7XHR1YXJ0LVx1MDAzZXJ4YnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCF1YXJ0LVx1MDAzZXJ4YnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC04NDEsNyAmIzQzOzg0Miw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXHUwMDNlcnhidWYpO1xuJiM0MztcdGtmcmVlKHVhcnQtXHUwMDNlcnhidWYpO1xuIFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBhZGQgVUFSVDogJWRcXG5cJiMzNDssIGVycik7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTg1OCw3ICYjNDM7ODU5LDcgQEAgc3RhdGljIHZvaWQgbWVuX3oxMzVfcmVtb3ZlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2KVxuIFxuIFx0bGluZS0tO1xuIFx0dWFydF9yZW1vdmVfb25lX3BvcnQoXHUwMDI2bWVuX3oxMzVfZHJpdmVyLCBcdTAwMjZ1YXJ0LVx1MDAzZXBvcnQpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB1YXJ0LVx1MDAzZXJ4YnVmKTtcbiYjNDM7XHRrZnJlZSh1YXJ0LVx1MDAzZXJ4YnVmKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtY2JfZGV2aWNlX2lkIG1lbl96MTM1X2lkc1tdID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmNcbmluZGV4IDgwZTMxYzRkOTUzNmQxLi41ZjdmMDczZjI4NWUxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xuQEAgLTE2NjIsNyAmIzQzOzE2NjIsNyBAQCBzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGlmIChwcml2ID09IE5VTEwpXG4gXHRcdGdvdG8gaW5pdF9wb3J0X2FsbG9jX2VycjtcbiBcbi1cdHJ4YnVmID0gKHVuc2lnbmVkIGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXJ4YnVmKVxuIFx0XHRnb3RvIGluaXRfcG9ydF9mcmVlX3R4YnVmO1xuIFxuQEAgLTE3MzUsNyAmIzQzOzE3MzUsNyBAQCBzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAjaWZkZWYgQ09ORklHX1NFUklBTF9QQ0hfVUFSVF9DT05TT0xFXG4gXHRwY2hfdWFydF9wb3J0c1tib2FyZC1cdTAwM2VsaW5lX25vXSA9IE5VTEw7XG4gI2VuZGlmXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcnhidWYpO1xuJiM0MztcdGtmcmVlKHJ4YnVmKTtcbiBpbml0X3BvcnRfZnJlZV90eGJ1ZjpcbiBcdGtmcmVlKHByaXYpO1xuIGluaXRfcG9ydF9hbGxvY19lcnI6XG5AQCAtMTc1MCw3ICYjNDM7MTc1MCw3IEBAIHN0YXRpYyB2b2lkIHBjaF91YXJ0X2V4aXRfcG9ydChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdilcbiBcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7dWFydCVkX3JlZ3NcJiMzNDssIHByaXYtXHUwMDNlcG9ydC5saW5lKTtcbiBcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7XG4gXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcdTAwMjZwY2hfdWFydF9kcml2ZXIsIFx1MDAyNnByaXYtXHUwMDNlcG9ydCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHJpdi1cdTAwM2VyeGJ1Zi5idWYpO1xuJiM0MztcdGtmcmVlKHByaXYtXHUwMDNlcnhidWYuYnVmKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGNoX3VhcnRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYyBiL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jXG5pbmRleCA3ZDQwZWFjYzIxYjNlOC4uYmYxNTAyZmQ1YmQ0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcbkBAIC01Myw4ICYjNDM7NTMsNiBAQFxuICNkZWZpbmUgSEVBREVSX1NJWkVcdDR1XG4gI2RlZmluZSBDT05fQlVGX1NJWkUgKElTX0VOQUJMRUQoQ09ORklHX0JBU0VfU01BTEwpID8gMjU2IDogUEFHRV9TSVpFKVxuIFxuLURFRklORV9GUkVFKGZyZWVfcGFnZV9wdHIsIHZvaWQgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX1QpKTtcbi1cbiAvKlxuICAqIE91ciBtaW5vciBzcGFjZTpcbiAgKlxuQEAgLTM3MSw3ICYjNDM7MzY5LDcgQEAgdmNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0bG9mZl90IHBvcztcbiBcdGJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTtcbiBcbi1cdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0Y2hhciAqY29uX2J1ZiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFjb25fYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC01OTYsNyAmIzQzOzU5NCw3IEBAIHZjc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRpZiAodXNlX3VuaWNvZGUoaW5vZGUpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRjaGFyICpjb25fYnVmIF9fZnJlZShmcmVlX3BhZ2VfcHRyKSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdGNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghY29uX2J1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VSSUFMX01FTl9aMTM1JiMzNDssCiAgICAmIzM0O1NFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICAgJiMzNDtNQ0ImIzM0OywKICAgICYjMzQ7TUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zjc19yZWFkJiMzNDssCiAgICAmIzM0O3Zjc193cml0ZSYjMzQ7LAogICAgJiMzNDtwY2hfdWFydF9pbml0X3BvcnQmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfZXhpdF9wb3J0JiMzNDssCiAgICAmIzM0O21lbl96MTM1X3Byb2JlJiMzNDssCiAgICAmIzM0O21lbl96MTM1X3JlbW92ZSYjMzQ7LAogICAgJiMzNDtyc19zdGFydHVwJiMzNDssCiAgICAmIzM0O3JzX3NodXRkb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoX19nZXRfZnJlZV9wYWdlLCBmcmVlX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zIChrbWFsbG9jLCBrZnJlZSkgYWNyb3NzIHNldmVyYWwgdHR5IGFuZCBzZXJpYWwgZHJpdmVycyAodmNfc2NyZWVuLCBwY2hfdWFydCwgbWVuX3oxMzVfdWFydCwgYW1pc2VyaWFsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY291bGQgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgaW52YWxpZCBmcmVlcywgb3IgYWxpZ25tZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBuZXcgYWxsb2NhdGlvbiBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1OTgwYzgxMDM4OGU0YjViMmIzMmQ0OGEzMWIxZTVhNzRmZjIzMDMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAxMzoxNTozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmMKaW5kZXggODFlYWNhNzUxNTQxYWIuLjI4YWYwZmQ5ODE4MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYwpAQCAtNDQzLDIzICYjNDM7NDQzLDIzIEBAIHN0YXRpYyBpbnQgcnNfc3RhcnR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKQogCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZhbXA7aW5mby0mZ3Q7dHBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJcmV0dmFsPTA7Ci0JdW5zaWduZWQgbG9uZyBwYWdlOwomIzQzOwl2b2lkICpidWZmZXI7CiAKLQlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkKJiM0MzsJYnVmZmVyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlpZiAodHR5X3BvcnRfaW5pdGlhbGl6ZWQocG9ydCkpIHsKLQkJZnJlZV9wYWdlKHBhZ2UpOwomIzQzOwkJa2ZyZWUoYnVmZmVyKTsKIAkJZ290byBlcnJvdXQ7CiAJfQogCiAJaWYgKGluZm8tJmd0O3htaXQuYnVmKQotCQlmcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlrZnJlZShidWZmZXIpOwogCWVsc2UKLQkJaW5mby0mZ3Q7eG1pdC5idWYgPSAodW5zaWduZWQgY2hhciAqKSBwYWdlOwomIzQzOwkJaW5mby0mZ3Q7eG1pdC5idWYgPSBidWZmZXI7CiAKICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTgogCXByaW50aygmIzM0O3N0YXJ0aW5nIHVwIHR0eXMlZCAuLi4mIzM0OywgaW5mby0mZ3Q7bGluZSk7CkBAIC01MzcsNyAmIzQzOzUzNyw3IEBAIHN0YXRpYyB2b2lkIHJzX3NodXRkb3duKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzZXJpYWxfc3RhdGUgKmluZm8pCiAJICovCiAJZnJlZV9pcnEoSVJRX0FNSUdBX1ZFUlRCLCBpbmZvKTsKIAotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylpbmZvLSZndDt4bWl0LmJ1Zik7CiYjNDM7CWtmcmVlKGluZm8tJmd0O3htaXQuYnVmKTsKIAlpbmZvLSZndDt4bWl0LmJ1ZiA9IE5VTEw7CiAKIAlpbmZvLSZndDtJRVIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmMKaW5kZXggNmZhZDU3ZmVlOTEyYzIuLjkxMzhmYTI5ZDMwMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWVuX3oxMzVfdWFydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmMKQEAgLTE2LDYgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHR5X2ZsaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tY2IuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogCiAjZGVmaW5lIE1FTl9aMTM1X01BWF9QT1JUUwkJMTIKICNkZWZpbmUgTUVOX1oxMzVfQkFTRUNMSwkJMjk0OTEyMDAKQEAgLTgxMSw3ICYjNDM7ODEyLDcgQEAgc3RhdGljIGludCBtZW5fejEzNV9wcm9iZShzdHJ1Y3QgbWNiX2RldmljZSAqbWRldiwKIAlpZiAoIXVhcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdWFydC0mZ3Q7cnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJdWFydC0mZ3Q7cnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1YXJ0LSZndDtyeGJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTg0MSw3ICYjNDM7ODQyLDcgQEAgc3RhdGljIGludCBtZW5fejEzNV9wcm9iZShzdHJ1Y3QgbWNiX2RldmljZSAqbWRldiwKIAlyZXR1cm4gMDsKIAogZXJyOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgdWFydC0mZ3Q7cnhidWYpOwomIzQzOwlrZnJlZSh1YXJ0LSZndDtyeGJ1Zik7CiAJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGFkZCBVQVJUOiAlZFxuJiMzNDssIGVycik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtODU4LDcgJiM0Mzs4NTksNyBAQCBzdGF0aWMgdm9pZCBtZW5fejEzNV9yZW1vdmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYpCiAKIAlsaW5lLS07CiAJdWFydF9yZW1vdmVfb25lX3BvcnQoJmFtcDttZW5fejEzNV9kcml2ZXIsICZhbXA7dWFydC0mZ3Q7cG9ydCk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB1YXJ0LSZndDtyeGJ1Zik7CiYjNDM7CWtmcmVlKHVhcnQtJmd0O3J4YnVmKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtY2JfZGV2aWNlX2lkIG1lbl96MTM1X2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwppbmRleCA4MGUzMWM0ZDk1MzZkMS4uNWY3ZjA3M2YyODVlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCkBAIC0xNjYyLDcgJiM0MzsxNjYyLDcgQEAgc3RhdGljIHN0cnVjdCBlZzIwdF9wb3J0ICpwY2hfdWFydF9pbml0X3BvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJaWYgKHByaXYgPT0gTlVMTCkKIAkJZ290byBpbml0X3BvcnRfYWxsb2NfZXJyOwogCi0JcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJcnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeGJ1ZikKIAkJZ290byBpbml0X3BvcnRfZnJlZV90eGJ1ZjsKIApAQCAtMTczNSw3ICYjNDM7MTczNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWcyMHRfcG9ydCAqcGNoX3VhcnRfaW5pdF9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogI2lmZGVmIENPTkZJR19TRVJJQUxfUENIX1VBUlRfQ09OU09MRQogCXBjaF91YXJ0X3BvcnRzW2JvYXJkLSZndDtsaW5lX25vXSA9IE5VTEw7CiAjZW5kaWYKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcnhidWYpOwomIzQzOwlrZnJlZShyeGJ1Zik7CiBpbml0X3BvcnRfZnJlZV90eGJ1ZjoKIAlrZnJlZShwcml2KTsKIGluaXRfcG9ydF9hbGxvY19lcnI6CkBAIC0xNzUwLDcgJiM0MzsxNzUwLDcgQEAgc3RhdGljIHZvaWQgcGNoX3VhcnRfZXhpdF9wb3J0KHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KQogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDt1YXJ0JWRfcmVncyYjMzQ7LCBwcml2LSZndDtwb3J0LmxpbmUpOwogCWRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7CiAJdWFydF9yZW1vdmVfb25lX3BvcnQoJmFtcDtwY2hfdWFydF9kcml2ZXIsICZhbXA7cHJpdi0mZ3Q7cG9ydCk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXByaXYtJmd0O3J4YnVmLmJ1Zik7CiYjNDM7CWtmcmVlKHByaXYtJmd0O3J4YnVmLmJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaF91YXJ0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYyBiL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jCmluZGV4IDdkNDBlYWNjMjFiM2U4Li5iZjE1MDJmZDViZDRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKQEAgLTUzLDggJiM0Mzs1Myw2IEBACiAjZGVmaW5lIEhFQURFUl9TSVpFCTR1CiAjZGVmaW5lIENPTl9CVUZfU0laRSAoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAyNTYgOiBQQUdFX1NJWkUpCiAKLURFRklORV9GUkVFKGZyZWVfcGFnZV9wdHIsIHZvaWQgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX1QpKTsKLQogLyoKICAqIE91ciBtaW5vciBzcGFjZToKICAqCkBAIC0zNzEsNyAmIzQzOzM2OSw3IEBAIHZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAlsb2ZmX3QgcG9zOwogCWJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTsKIAotCWNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CWNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbl9idWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01OTYsNyAmIzQzOzU5NCw3IEBAIHZjc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiAJaWYgKHVzZV91bmljb2RlKGlub2RlKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JY2hhciAqY29uX2J1ZiBfX2ZyZWUoZnJlZV9wYWdlX3B0cikgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJY2hhciAqY29uX2J1ZiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghY29uX2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEFQSSBSZXBsYWNlbWVudCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBwYXRjaCByZXBsYWNlcyBgX19nZXRfZnJlZV9wYWdlYCBhbmQgYGZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AvYGt6YWxsb2NgIGFuZCBga2ZyZWVgIGluIGEgZmV3IHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMsIHNwZWNpZmljYWxseSBgYW1pc2VyaWFsLmNgLCBgbWVuX3oxMzVfdWFydC5jYCwgYHBjaF91YXJ0LmNgLCBhbmQgYHZjX3NjcmVlbi5jYC4gSXQmIzM5O3MgYSByZWZhY3RvcmluZywgZWZmZWN0aXZlbHkgc3dhcHBpbmcgb25lIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZCBmb3IgYW5vdGhlciwgZ29pbmcgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IgdG8gdGhlIHNsYWIgYWxsb2NhdG9yLgoKVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBJdCYjMzk7cyBub3QgKmFkZGluZyogbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc3RhdGVzLCBqdXN0IGNoYW5naW5nICpob3cqIG1lbW9yeSBpcyBhY3F1aXJlZC4gSXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBBUEkgcmVwbGFjZW1lbnQgYXQgZmlyc3QgZ2xhbmNlLgoKQnV0IHdhaXQsIGlzIHRoaXMgcHVyZWx5IGRlY29yYXRpdmUsIG9yIGEgY2hhbmdlIHRvIG51bWVyaWMgY29uc3RhbnRzIHRoYXQgZG9lc24mIzM5O3QgZnVuY3Rpb25hbGx5IGFsdGVyIGZsb3c/IE5vLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IG1lbW9yeSBpcyBoYW5kbGVkLiBUaGUgY29yZSBsb2dpYyByZW1haW5zIHRoZSBzYW1lLCB0aG91Z2guIElzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZywgdGhvdWdoPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQmIzM5O3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpb24sIGNvbnN0YW50IGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuIEFuZCB0aGVzZSBkcml2ZXJzIGFyZS4uLgoKKiAgIGBhbWlzZXJpYWwuY2A6IEFtaWdhIHNlcmlhbCBwb3J0LiBMaWtlbHkgbm90IHJlYWNoYWJsZSBpbiB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLgoqICAgYG1lbl96MTM1X3VhcnQuY2A6IE1FTiBDaGFtZWxlb24gQnVzIFVBUlQuCiogICBgcGNoX3VhcnQuY2A6IEludGVsIFBDSC9MQVBJUyBVQVJULgoqICAgYHZjX3NjcmVlbi5jYDogVmlydHVhbCBjb25zb2xlIGRyaXZlciwgYC9kZXYvdmNzKmAuIFRoaXMgb25lIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuCgpPa2F5LCBzbyBgdmNfc2NyZWVuLmNgIGlzIHJlYWNoYWJsZS4gSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVwbGFjaW5nIGBfX2dldF9mcmVlX3BhZ2VgIHdpdGggYGttYWxsb2NgLiBUaGUgY29yZSAqbG9naWMqIGlzIGlkZW50aWNhbC4KCkJ1dCB3YWl0LCBpZiBpdCYjMzk7cyByZWFjaGFibGUga2VybmVsIGNvZGUsIGFuZCBkb2VzbiYjMzk7dCBmYWxsIGludG8gYW4gKmV4Y2x1c2lvbiogY3JpdGVyaWEsIHRoZSBndWlkZWxpbmVzIHN1Z2dlc3QgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7LgoKTGV0IG1lIHJlLXJlYWQgdGhlIHJlbGV2YW50IHBhcnQ6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKYHZjX3NjcmVlbi5jYCBpcyByZWFjaGFibGUuIGAvZGV2L3Zjc2AgaXMgYWNjZXNzaWJsZS4gU28gaXQgaXMgKmRlZmluaXRlbHkqIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhpcyBjb2RlLgoKSXMgaXQgKndvcnRoKiBmdXp6aW5nPyBUaGUgY2hhbmdlIGl0c2VsZiBpcyBxdWl0ZSB0cml2aWFsIC0ganVzdCBhbiBhbGxvY2F0b3Igc3dhcC4gSG93ZXZlciwgaXQgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MuIENvbnNpZGVyOiBpcyBga21hbGxvY2AgZ29pbmcgdG8gaGFuZGxlIGBQQUdFX1NJWkVgIGNvcnJlY3RseT8gWWVwLCBga21hbGxvYyhQQUdFX1NJWkUpYCBzaG91bGQgYmUgZmluZS4gV2hhdCBhYm91dCBhbGlnbm1lbnQ/IElzIHBhZ2UgYWxpZ25tZW50IG5lY2Vzc2FyeT8gYGttYWxsb2NgIGRvZXNuJiMzOTt0ICpndWFyYW50ZWUqIHBhZ2UgYWxpZ25tZW50OyBpdCYjMzk7cyBqdXN0IG5hdHVyYWwgYWxpZ25tZW50LiBJZiB0aGUgaGFyZHdhcmUgKm5lZWRzKiBwYWdlLWFsaWduZWQgbWVtb3J5LCB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgYnV0IGluIHRoZSBjYXNlIG9mIGB2Y19zY3JlZW4uY2AsIGl0JiMzOTtzIGp1c3QgZm9yIGJ1ZmZlcnMgdXNlZCB3aXRoIGBjb3B5X3RvX3VzZXJgIGFuZCBgY29weV9mcm9tX3VzZXJgIGFuZCBpc24mIzM5O3QgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZSBETUEuCgpUaGUgc3BlY2lmaWMgaW5zdGFuY2VzIGFyZToKCiogICBgYW1pc2VyaWFsLmNgOiBVc2VzIGBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIHJlcGxhY2luZyBgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpYC4KKiAgIGBtZW5fejEzNV91YXJ0LmNgOiBVc2VzIGBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpYC4KKiAgIGBwY2hfdWFydC5jYDogVXNlcyBga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpYC4KKiAgIGB2Y19zY3JlZW4uY2A6IFVzZXMgYGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAuCgpPa2F5LCBJIG5lZWQgdG8gY2hlY2sgYHZjX3NjcmVlbi5jYCBtb3JlIGNsb3NlbHkgYW5kIHZlcmlmeSBteSBhbGlnbm1lbnQgYXNzdW1wdGlvbnMuIEJ1dCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgYW5zd2VyIGlzIGxlYW5pbmcgdG93YXJkIFdvcnRoRnV6emluZz10cnVlLCBnaXZlbiB0aGF0IGAvZGV2L3Zjc2AgaXMgZWFzaWx5IGFjY2Vzc2libGUgYW5kIHRoZSBwYXRjaCBkb2VzIG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNzX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz0yMjc9c3RhdGljIGxvZmZfdCB2Y3NfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI0NC1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI0NTpzdGF0aWMgaW50IHZjc19yZWFkX2J1Zl91bmkoc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjQ2LVx0XHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkKVxuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI3Mi1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI3MzpzdGF0aWMgdm9pZCB2Y3NfcmVhZF9idWZfbm9hdHRyKGNvbnN0IHN0cnVjdCB2Y19kYXRhICp2YywgY2hhciAqY29uX2J1ZixcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI3NC1cdFx0dW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LCBib29sIHZpZXdlZClcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy0yOTItXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzoyOTM6c3RhdGljIHVuc2lnbmVkIGludCB2Y3NfcmVhZF9idWYoY29uc3Qgc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjk0LVx0XHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkLFxuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jPTM2MT1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6MzYyOnZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTM2My17XG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDMwLVx0XHRpZiAodW5pX21vZGUpIHtcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQzMTpcdFx0XHRyZXQgPSB2Y3NfcmVhZF9idWZfdW5pKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy00MzItXHRcdFx0XHRcdHZpZXdlZCk7XG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM1LVx0XHR9IGVsc2UgaWYgKCFhdHRyKSB7XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo0MzY6XHRcdFx0dmNzX3JlYWRfYnVmX25vYXR0cih2YywgY29uX2J1ZiwgcG9zLCB0aGlzX3JvdW5kLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM3LVx0XHRcdFx0XHR2aWV3ZWQpO1xuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM4LVx0XHR9IGVsc2Uge1xuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NDM5Olx0XHRcdHRoaXNfcm91bmQgPSB2Y3NfcmVhZF9idWYodmMsIGNvbl9idWYsIHBvcywgdGhpc19yb3VuZCxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTQ0MC1cdFx0XHRcdFx0dmlld2VkLCBcdTAwMjZza2lwKTtcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz03NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmNzX2ZvcHMgPSB7XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy03NjItXHQubGxzZWVrXHRcdD0gdmNzX2xzZWVrLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NzYzOlx0LnJlYWRcdFx0PSB2Y3NfcmVhZCxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTc2NC1cdC53cml0ZVx0XHQ9IHZjc193cml0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB2Y3Nfd3JpdGVgKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZXh0ZW5kIG91ciBjaGVja3MuIFdlJiMzOTt2ZSBnb3QgdGhlIGNvcmUgZnVuY3Rpb24sIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSYjMzk7cmUgYWNjb3VudGluZyBmb3IgZWRnZSBjYXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGFueSB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgcHJvYmFibHkgc2hpZnQgb3VyIGZvY3VzIGZyb20ganVzdCB0aGUgaW5pdGlhbCB3cml0ZSBhbmQgZGlnIGRlZXBlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiBgdmNzX3dyaXRlYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyBgdmNzX3dyaXRlYCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHZlcnNpb24gY29udHJvbC4gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGludGVybmFsIGxvZ2dpbmcgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3JzIGdyYWNlZnVsbHkgYW5kIHJlcG9ydHMgdGhlbSBhcHByb3ByaWF0ZWx5LiBBcmUgd2UgZGVhbGluZyB3aXRoIHRlbXBvcmFyeSBmaWxlcyBvciBkaXJlY3QgZWRpdHM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2Ygcm9sbGJhY2sgYW5kIHJlY292ZXJ5IGluIHRoaXMgZnVuY3Rpb24/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IGFuZCAmIzM0O2FmdGVyJiMzNDsgc3RhdGUgb2YgdGhlIFZDUyBhZnRlciB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIGlmIGFueSBjbGVhbnVwIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHJvYnVzdCBhcyB3ZSYjMzk7ZCBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zjc193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jPTM2Mj12Y3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDcwLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NDcxOnN0YXRpYyB1MTYgKnZjc193cml0ZV9idWZfbm9hdHRyKHN0cnVjdCB2Y19kYXRhICp2YywgY29uc3QgY2hhciAqY29uX2J1ZixcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTQ3Mi1cdFx0dW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LCBib29sIHZpZXdlZCwgdTE2ICoqb3JnMClcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz01MDI9c3RhdGljIGlubGluZSB1MTYgdmNfY29tcGlsZV9sZTE2KHU4IGhpLCB1OCBsbylcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy01MTAtXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1MTE6c3RhdGljIHUxNiAqdmNzX3dyaXRlX2J1ZihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IGNoYXIgKmNvbl9idWYsXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy01MTItXHRcdHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCB2aWV3ZWQsIHUxNiAqKm9yZzApXG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM9NTgyPXN0YXRpYyBzc2l6ZV90XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1ODM6dmNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTU4NC17XG4tLVxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjcxLVx0XHRpZiAoYXR0cilcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjY3MjpcdFx0XHRvcmcgPSB2Y3Nfd3JpdGVfYnVmKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy02NzMtXHRcdFx0XHRcdHZpZXdlZCwgXHUwMDI2b3JnMCk7XG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy02NzQtXHRcdGVsc2VcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjY3NTpcdFx0XHRvcmcgPSB2Y3Nfd3JpdGVfYnVmX25vYXR0cih2YywgY29uX2J1ZiwgcG9zLCB0aGlzX3JvdW5kLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjc2LVx0XHRcdFx0XHR2aWV3ZWQsIFx1MDAyNm9yZzApO1xuLS1cbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jPTc2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2Y3NfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy03NjMtXHQucmVhZFx0XHQ9IHZjc19yZWFkLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NzY0Olx0LndyaXRlXHRcdD0gdmNzX3dyaXRlLFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzY1LVx0LnBvbGxcdFx0PSB2Y3NfcG9sbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBQYXRjaDogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyB3b3J0aCBteSB0aW1lIGZ1enppbmc/JiMzNDsgSXQgbG9va3MgbGlrZSBpdCB0b3VjaGVzIHNldmVyYWwgZGlmZmVyZW50IGFyZWFzLCBzcGVjaWZpY2FsbHkgYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgaW4gYHZjX3NjcmVlbi5jYCwgYHJzX3N0YXJ0dXBgIGFuZCBgcnNfc2h1dGRvd25gIGluIGBhbWlzZXJpYWwuY2AsIGBtZW5fejEzNV9wcm9iZWAgYW5kIGBtZW5fejEzNV9yZW1vdmVgIGluIGBtZW5fejEzNV91YXJ0LmNgLCBhbmQgYHBjaF91YXJ0X2luaXRfcG9ydGAgYW5kIGBwY2hfdWFydF9leGl0X3BvcnRgIGluIGBwY2hfdWFydC5jYC4gVGhhdCYjMzk7cyBhIGRlY2VudCBzcHJlYWQuCgpNeSBndXQgc2F5cyB5ZXMsIGl0JiMzOTtzIHdvcnRoIGEgbG9vay4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdl4oCUIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9u4oCUIGltbWVkaWF0ZWx5IHBlcmtzIG15IGVhcnMuIEJ1dCBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gRG9lcyB0aGlzICphY3R1YWxseSogaW1wYWN0IGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgSSBjYW4gZXhwbG9pdD8KCkFoYSEgVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqY2hhbmdlcyogaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBgX19nZXRfZnJlZV9wYWdlYCB0byBga21hbGxvY2AuIFRoYXQmIzM5O3MgYSAqc2lnbmlmaWNhbnQqIHNoaWZ0LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB1bmRlbmlhYmx5LCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYHZjX3NjcmVlbi5jYC4KCk5vdywgYmVmb3JlIEkgY29tbWl0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgY29uZmlnIG9wdGlvbiB0aGF0IG1ha2VzIHRoaXMgdW5yZWFjaGFibGUuIElzIGBDT05GSUdfVkdBX0NPTlNPTEVgIHJlcXVpcmVkPyBOby4gTG9va3MgbGlrZSBgdmNfc2NyZWVuLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19WVGAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgZHJpdmVycy90dHkvdnQvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjX3NjcmVlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L01ha2VmaWxlPTU9Rk9OVE1BUEZJTEUgPSBjcDQzNy51bmlcbmRyaXZlcnMvdHR5L3Z0L01ha2VmaWxlLTYtXG5kcml2ZXJzL3R0eS92dC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19WVClcdFx0XHQmIzQzOz0gdnRfaW9jdGwubyB2Y19zY3JlZW4ubyBcXFxuZHJpdmVycy90dHkvdnQvTWFrZWZpbGUtOC1cdFx0XHRcdFx0ICAgc2VsZWN0aW9uLm8ga2V5Ym9hcmQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYSBzeXpib3QgQ29uZmlndXJhdGlvbiBRdWVzdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0aGUgYXNzdW1lZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfVlRgIHdpdGhpbiBzeXpib3QmIzM5O3MgZW52aXJvbm1lbnQuIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpdCYjMzk7cyBlbmFibGVkOyBJJiMzOTt2ZSBzZWVuIGVub3VnaCBjcmFzaCByZXBvcnRzIGFuZCBkZWJ1Z2dpbmcgc2Vzc2lvbnMgdG8gaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIGEgc2FmZSBhc3N1bXB0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzY29wZSBvZiBzeXpib3QmIzM5O3MgdGVzdGluZy4KCk5vdywgdGhvdWdoLi4uIHdoYXQgYWJvdXQgYHBjaF91YXJ0LmNgPyBUaGF0JiMzOTtzIHRoZSByZWFsIGNydXggb2YgdGhlIGlzc3VlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdCBkcml2ZXIuIElzIGl0IGJlaGF2aW5nIGNvcnJlY3RseT8gQXJlIHRoZXJlIGtub3duIGlzc3Vlcz8gRG9lcyBpdHMgY29uZmlndXJhdGlvbiBhbGlnbiB3aXRoIHdoYXQgc3l6Ym90IGV4cGVjdHM/IFRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCByZXZpZXcgYW55IHJlY2VudCBidWcgcmVwb3J0cyByZWxhdGVkIHRvIFVBUlQgZHJpdmVycywgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGUgZGV2aWNlIHRyZWUgc2V0dGluZ3MgaW52b2x2ZWQgaW4gdGVzdGluZy4gVGhlIGludGVyYWN0aW9uIHdpdGggYENPTkZJR19WVGAgbWF5IGJlIGltcG9ydGFudCBoZXJlIC0gYXJlIHRoZXkgc29tZWhvdyBjb25mbGljdGluZz8gVGhpcyBpcyBhIHF1ZXN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgZXhwbG9yZWQuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2hfdWFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX1NFUklBTF9PV0wpXHRcdCYjNDM7PSBvd2wtdWFydC5vXG5kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX1NFUklBTF9QQ0hfVUFSVClcdFx0JiM0Mzs9IHBjaF91YXJ0Lm9cbmRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfU0VSSUFMX1BJQzMyKVx0XHQmIzQzOz0gcGljMzJfdWFydC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogQSBRdWljayBEaWFnbm9zdGljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyBhIHNwZWNpZmljIGZpbGU6IGBtZW5fejEzNV91YXJ0LmNgLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGtuZWUtamVyayByZWFjdGlvbiwgYWN0dWFsbHksIGJlY2F1c2UgdGhhdCBuYW1lIHJpbmdzIGEgYmVsbC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBVQVJUIGNvbW11bmljYXRpb24gZm9yIHRoZSBaMTM1IGJvYXJkIOKAkyBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXJlLiBUaGVyZSBpcyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdCBzb21lIG9mIHRoZSBzeW1wdG9tcyBJIGFtIHRyeWluZyB0byByZXNvbHZlIGFyZSBkZXNjcmliZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbl96MTM1X3VhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlPTUyPW9iai0kKENPTkZJR19TRVJJQUxfTUNGKVx0XHQmIzQzOz0gbWNmLm9cbmRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfU0VSSUFMX01FTl9aMTM1KVx0XHQmIzQzOz0gbWVuX3oxMzVfdWFydC5vXG5kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUtNTQtb2JqLSQoQ09ORklHX1NFUklBTF9NSUxCRUFVVF9VU0lPKVx0JiM0Mzs9IG1pbGJlYXV0X3VzaW8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkluaXRpYWwgSW5xdWlyeTogVW5wYWNraW5nIHRoZSAmIzM0O2FtaXNlcmlhbC5jJiMzNDsgQ29udW5kcnVtKioKCk15IGltbWVkaWF0ZSByZWFjdGlvbiB1cG9uIHNlZWluZyAmIzM0O2FtaXNlcmlhbC5jJiMzNDsgaXMgYSBzaGFycCBpbnRha2Ugb2YgYnJlYXRoLCBhIHN1YnRsZSBmdXJyb3dpbmcgb2YgdGhlIGJyb3cuICpXaGF0IGFib3V0IGl0PyogVGhlIHZlcnkgbmFtZSBpcyBldm9jYXRpdmUsIGhpbnRpbmcgYXQgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuIG9yIGEgdGhyZWFkIEkgbmVlZCB0byBwdWxsLiBJdCBzY3JlYW1zICYjMzQ7bG93LWxldmVsJiMzNDsgYW5kIGxpa2VseSBkZWFscyB3aXRoIHNlcmlhbGl6YXRpb24sIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBsaWJyYXJ5IG9yIHN0YW5kYXJkIGxpa2UgQU1JU2VyaWFsIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLiBUaGUgYC5gYyBleHRlbnNpb24gaW5zdGFudGx5IGZsYWdzIGl0IGFzIHNvdXJjZSBjb2RlLiBJcyB0aGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIHZ1bG5lcmFiaWxpdHk/IEEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQSBjcml0aWNhbCBwaWVjZSBpbiBhIGxhcmdlciBkaXN0cmlidXRlZCBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIG9uPyBNeSBtZW50YWwgY2hlY2tsaXN0IGJlZ2lucyB0byB0aWNrOgoKKiAgICoqU2VyaWFsaXphdGlvbiBmb3JtYXQqKjogV2hhdCYjMzk7cyBpdCBkb2luZz8gSXMgaXQgdXNpbmcgYSBwcm9wcmlldGFyeSBvciBzdGFuZGFyZGl6ZWQgbWV0aG9kPwoqICAgKipTZWN1cml0eSByaXNrcyoqOiBJZiBpdCYjMzk7cyBzZXJpYWxpemluZyB1bnRydXN0ZWQgZGF0YSwgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBmb3IgZGVzZXJpYWxpemF0aW9uIGF0dGFja3MuIEkgaGF2ZSB0byB0aGluayBhYm91dCBob3cgcm9idXN0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcy4KKiAgICoqUGVyZm9ybWFuY2UqKjogU2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY2FuIGJlIGluY3JlZGlibHkgc2xvdywgZXNwZWNpYWxseSBmb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIElzIHRoaXMgYSBib3R0bGVuZWNrIGluIG15IGN1cnJlbnQgcHJvamVjdD8gQ2FuIGl0IGJlIG9wdGltaXplZD8KKiAgICoqUG9ydGFiaWxpdHkqKjogSXMgaXQgY3Jvc3MtcGxhdGZvcm0/IERvZXMgaXQgaGFuZGxlIGVuZGlhbm5lc3MgY29ycmVjdGx5PwoqICAgKipWZXJzaW9uaW5nKio6IERvZXMgaXQgaGF2ZSBhbnkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzPwoqICAgKipFcnJvciBoYW5kbGluZyoqOiBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGR1cmluZyBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24/CgpNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nLCBwdWxsaW5nIHVwIHBvdGVudGlhbCBjb2RlIHNuaXBwZXRzLCBsaWJyYXJpZXMsIGFuZCBwYXN0IGRlYnVnZ2luZyBleHBlcmllbmNlcyByZWxhdGVkIHRvIHNlcmlhbGl6YXRpb24uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGZvcm0gYSBjb25jbHVzaXZlIHRob3VnaHQgYnV0IHRoaXMgY291bGQgYmUgYSBwb2ludCBvZiBlaXRoZXIgZXh0cmVtZSBpbXBvcnRhbmNlLCBvciBleHRyZW1lIHVuaW1wb3J0YW5jZS4gTXkgam9iIGlzIHRvIGZpbmQgb3V0LiBUaGlzIGlzIGEgdmVyeSBpbnRlcmVzdGluZyBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1pc2VyaWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1NFUklBTF9ERVZfQlVTKVx0JiM0Mzs9IHNlcmRldi9cbi0tXG5kcml2ZXJzL3R0eS9NYWtlZmlsZS0xOC0jIHR0eSBkcml2ZXJzXG5kcml2ZXJzL3R0eS9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUwpICYjNDM7PSBhbWlzZXJpYWwub1xuZHJpdmVycy90dHkvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX01PWEFfSU5URUxMSU8pXHQmIzQzOz0gbW94YS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBzZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uczogYFNFUklBTF9QQ0hfVUFSVGAsIGBTRVJJQUxfTUVOX1oxMzVgLCBhbmQgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYC4gVGhlIEFtaWdhIG9uZSBpcyBvdXQ7IG5vIHBvaW50IHRyeWluZyB0byB0ZXN0IHRoYXQgb24geDg2LiBgU0VSSUFMX1BDSF9VQVJUYCBzZWVtcyBsaWtlIHRoZSBvbmUgZm9yIHg4NiBzeXN0ZW1zIChzcGVjaWZpY2FsbHkgSW50ZWwmIzM5O3MgRUcyMFQgUENIKSwgYW5kIGBTRVJJQUxfTUVOX1oxMzVgIGlzIGZvciB0aGUgTUVOIENoYW1lbGVvbiBCdXMuCgpCdXQsIGlzIHRoaXMgcGF0Y2ggZXZlbiAqd29ydGgqIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gdGhlIGd1aWRlbGluZXMgc2F5IHRvIHNraXAgcGF0Y2hlcyB0aGF0IGFyZSBqdXN0IGRvY3MsIEtjb25maWcsIGNvbW1lbnRzLCBjb3NtZXRpYyBsb2dnaW5nLCBjaGFuZ2VzIHRvIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRob3NlIGNhdGVnb3JpZXMuIEl0JiMzOTtzIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlYCB3aXRoIGBrbWFsbG9jYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhhdCByZXBsYWNlbWVudCBxdWFsaWZ5IGFzIGEgJiMzNDtmdW5jdGlvbmFsJiMzNDsgY2hhbmdlPyBPbiB0aGUgc3VyZmFjZSwgdGhlIGxvZ2ljICphcHBlYXJzKiBpZGVudGljYWwuIEJ1dCwgaXQmIzM5O3MgYSBkaWZmZXJlbnQgYWxsb2NhdG9yLCByaWdodD8gQW55IGludHJvZHVjZWQgYnVncyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGludmFsaWQgZnJlZXMuIEZvciBpbnN0YW5jZSwgaW4gYHZjX3NjcmVlbi5jYCwgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhpczoKCmBgYGMKLQljaGFyICpjb25fYnVmIF9fZnJlZShmcmVlX3BhZ2VfcHRyKSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwomIzQzOwljaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CmBgYAoKRXNzZW50aWFsbHksIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGdvZXMgZnJvbSBgZnJlZV9wYWdlYCB0byBga2ZyZWVgLiBUaGF0JiMzOTtzICpkZWZpbml0ZWx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBTbywgeWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFdlIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcy4KCkZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLCBJJiMzOTttIHRoaW5raW5nIGB2Y3NfcmVhZGAsIGB2Y3Nfd3JpdGVgLCBgcGNoX3VhcnRfaW5pdF9wb3J0YCwgYHBjaF91YXJ0X2V4aXRfcG9ydGAsIGBtZW5fejEzNV9wcm9iZWAsIGFuZCBgbWVuX3oxMzVfcmVtb3ZlYC4gSG9sZCBvbiwgYHBjaF91YXJ0X2luaXRfcG9ydGAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZS4gSSBzaG91bGQgY2hlY2sgaWYgSSBjYW4gZW5hYmxlIGJvdGggYFNFUklBTF9QQ0hfVUFSVGAgYW5kIGBTRVJJQUxfTUVOX1oxMzVgLiBgU0VSSUFMX1BDSF9VQVJUYCBkZXBlbmRzIG9uIGBQQ0lgIGFuZCBgWDg2YCwgc28gdGhhdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiBBbmQgYFNFUklBTF9NRU5fWjEzNWAgbmVlZHMgYE1DQmAuIEdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnPTExNjE9Y29uZmlnIFNFUklBTF9BTFRFUkFfVUFSVF9DT05TT0xFXG4tLVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE2OC1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnOjExNjk6Y29uZmlnIFNFUklBTF9QQ0hfVUFSVFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgVUFSVFwmIzM0O1xuLS1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODQtXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4Ni1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjg4CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlcGVuZGVuY3kgQ2hlY2s6IFNFUklBTF9QQ0hfVUFSVCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZW5zdXJpbmcgdGhlIGBTRVJJQUxfUENIX1VBUlRgIG1vZHVsZSBpcyBwcm9wZXJseSBzZXQgdXAuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcywgYW5kIEkgd2FudCB0byBkbyB0aGlzIG1ldGhvZGljYWxseS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBsaXN0aW5nIHRoZW0sIGJ1dCB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFsbCBpbnRlcmFjdCBhbmQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyB3aXRoaW4gdGhvc2UgY29ubmVjdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcywga25vd2luZyB0aGUgY29kZSBpbnNpZGUgYW5kIG91dC4gQXJlIHRoZXJlIGFueSBsaWJyYXJpZXMsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvdGhlciBtb2R1bGVzIGl0IHJlbGllcyBvbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHk/IFRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnPTExNjE9Y29uZmlnIFNFUklBTF9BTFRFUkFfVUFSVF9DT05TT0xFXG4tLVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE2OC1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnOjExNjk6Y29uZmlnIFNFUklBTF9QQ0hfVUFSVFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgVUFSVFwmIzM0O1xuLS1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODQtXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4Ni1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNjk6XHRjb25maWcgU0VSSUFMX1BDSF9VQVJUXG4xMTcwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBFRzIwVCBQQ0gvTEFQSVMgU2VtaWNvbiBJT0goTUw3MjEzL01MNzIyMy9NTDc4MzEpIFVBUlRcJiMzNDtcbjExNzE6XHRcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiAoWDg2XzMyIHx8IE1JUFMgfHwgIENPTVBJTEVfVEVTVClcbjExNzI6XHRcdHNlbGVjdCBTRVJJQUxfQ09SRVxuMTE3MzpcdFx0aGVscFxuMTE3NDpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgUENIKFBsYXRmb3JtIGNvbnRyb2xsZXIgSHViKSBVQVJUIG9mIEludGVsIEVHMjBUXG4xMTc1Olx0XHQgIHdoaWNoIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkIHByb2Nlc3Nvci5cbjExNzY6XHRcdCAgRW5hYmxpbmcgUENIX0RNQSwgdGhpcyBQQ0ggVUFSVCB3b3JrcyBhcyBETUEgbW9kZS5cbjExNzc6XHRcbjExNzg6XHRcdCAgVGhpcyBkcml2ZXIgYWxzbyBjYW4gYmUgdXNlZCBmb3IgTEFQSVMgU2VtaWNvbmR1Y3RvciBJT0goSW5wdXQvXG4xMTc5Olx0XHQgIE91dHB1dCBIdWIpLCBNTDcyMTMsIE1MNzIyMyBhbmQgTUw3ODMxLlxuMTE4MDpcdFx0ICBNTDcyMTMgSU9IIGlzIGZvciBJVkkoSW4tVmVoaWNsZSBJbmZvdGFpbm1lbnQpIHVzZSwgTUw3MjIzIElPSCBpc1xuMTE4MTpcdFx0ICBmb3IgTVAoTWVkaWEgUGhvbmUpIHVzZSBhbmQgTUw3ODMxIElPSCBpcyBmb3IgZ2VuZXJhbCBwdXJwb3NlIHVzZS5cbjExODI6XHRcdCAgTUw3MjEzL01MNzIyMy9NTDc4MzEgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuXG4xMTgzOlx0XHQgIE1MNzIxMy9NTDcyMjMvTUw3ODMxIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILlxuMTE4NDpcdFxuMTE4NTpcdGNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuMTE4NjpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjb25zb2xlIG9uIEludGVsIEVHMjBUIFBDSCBVQVJUL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0hcJiMzNDtcbjExODc6XHRcdGRlcGVuZHMgb24gU0VSSUFMX1BDSF9VQVJUPXlcbjExODg6XHRcdHNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE1CgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBwcmVzZW5jZSBvZiBQQ0kgYW5kIGVpdGhlciBYODZfMzIsIE1JUFMsIG9yIENPTVBJTEVfVEVTVC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gc3l6Ym90LCB3aGVyZSBJIHVzdWFsbHkgc2VlIHRoZXNlIHRlc3RzIHJ1biwgaXMgdHlwaWNhbGx5IG9uIFg4Nl82NCBhcmNoaXRlY3R1cmUuIFRoYXQgcmFpc2VzIGEgcmVkIGZsYWcuIEl0IGxvb2tzIGxpa2UgYFNFUklBTF9QQ0hfVUFSVGAgbWlnaHQgb25seSBiZSBlbmFibGVkIGlmIGBDT01QSUxFX1RFU1RgIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIHVuY292ZXIgaG93IHRoaXMgY291bGQgZWZmZWN0IGEgdGVzdCBydW5uaW5nLiBJIHdpbGwgY2hlY2sgdGhlIGRlcGVuZGVuY3kgb2YgYFNFUklBTF9NRU5fWjEzNWAgYW5kIHNlZSBpZiB0aGUgc2FtZSBpcyB0cnVlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VSSUFMX01FTl9aMTM1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc9MTM3Mz1jb25maWcgU0VSSUFMX1NUX0FTQ19DT05TT0xFXG4tLVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTM3Ny1cbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnOjEzNzg6Y29uZmlnIFNFUklBTF9NRU5fWjEzNVxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTM3OS1cdHRyaXN0YXRlIFwmIzM0O01FTiAxNnoxMzUgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYwOlx0XHRib29sIFwmIzM0O0NvbnNvbGUgb24gQWN0aW9ucyBTZW1pIE93bCBzZXJpYWwgcG9ydFwmIzM0O1xuMTQ2MTpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfT1dMPXlcbjE0NjI6XHRcdHNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFXG4xNDYzOlx0XHRzZWxlY3QgU0VSSUFMX0VBUkxZQ09OXG4xNDY0Olx0XHRkZWZhdWx0IHlcbjE0NjU6XHRcdGhlbHBcbjE0NjY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIEFjdGlvbnMgU2VtaWNvbmR1Y3RvciBTNTAwL1M5MDAgVUFSVFxuMTQ2NzpcdFx0ICBhcyB0aGUgc3lzdGVtIGNvbnNvbGUuXG4xNDY4Olx0XG4xNDY5Olx0Y29uZmlnIFNFUklBTF9SREFcbjE0NzA6XHRcdGJvb2wgXCYjMzQ7UkRBIE1pY3JvIHNlcmlhbCBwb3J0IHN1cHBvcnRcJiMzNDtcbjE0NzE6XHRcdGRlcGVuZHMgb24gQVJDSF9SREEgfHwgQ09NUElMRV9URVNUXG4xNDcyOlx0XHRzZWxlY3QgU0VSSUFMX0NPUkVcbjE0NzM6XHRcdGhlbHBcbjE0NzQ6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFJEQTg4MTBQTCBTb0MmIzM5O3MgVUFSVC5cbjE0NzU6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBvbi1ib2FyZCBzZXJpYWwgcG9ydC5cbjE0NzY6XHRcdCAgT3RoZXJ3aXNlLCBzYXkgJiMzOTtOJiMzOTsuXG4xNDc3Olx0XG4xNDc4Olx0Y29uZmlnIFNFUklBTF9SREFfQ09OU09MRVxuMTQ3OTpcdFx0Ym9vbCBcJiMzNDtDb25zb2xlIG9uIFJEQSBNaWNybyBzZXJpYWwgcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQgYW5kIHRoaW5raW5nIHRoaXM6CgoqKk1pbm9yIENvZGUgUmV2aWV3IENvcnJlY3Rpb24qKgoKU2hvb3QhIEkgd2FzIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSB0byBgU0VSSUFMX01FTl9aMTM1YCBhbmQgSSB0b3RhbGx5IGdyYWJiZWQgdGhlIHdyb25nIGxpbmUgbnVtYmVyLiBJIHdhcyBzY2FubmluZyB0aGUgZmlsZSwgdGhvdWdodCBJIHdhcyBvbiB0aGUgcmlnaHQgdHJhY2ssIGJ1dCBJIG1pc3JlYWQgaXQuIEl0JiMzOTtzIGFjdHVhbGx5IG5vdCBhdCBsaW5lIDEzNzU7IHRoZSBpbXBvcnRhbnQgYml0IG9mIGNvZGUgaXMgYXQgbGluZSAxMzc4LiBObyBiaWcgZGVhbCwgYnV0IEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gYmUgbW9yZSBjYXJlZnVsIHdpdGggdGhvc2UgcXVpY2sgbGluZSBjaGVja3MuIE5vdyB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3ODpcdGNvbmZpZyBTRVJJQUxfTUVOX1oxMzVcbjEzNzk6XHRcdHRyaXN0YXRlIFwmIzM0O01FTiAxNnoxMzUgU3VwcG9ydFwmIzM0O1xuMTM4MDpcdFx0c2VsZWN0IFNFUklBTF9DT1JFXG4xMzgxOlx0XHRkZXBlbmRzIG9uIE1DQlxuMTM4MjpcdFx0aGVscFxuMTM4MzpcdFx0ICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNRU4gMTZ6MTM1IEhpZ2ggU3BlZWQgVUFSVCBJUC1Db3JlXG4xMzg0Olx0XHQgIG9uIGEgTUNCIGNhcnJpZXIuXG4xMzg1Olx0XG4xMzg2Olx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWxkIGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuMTM4NzpcdFx0ICBtZW5fejEzNV91YXJ0LmtvXG4xMzg4Olx0XG4xMzg5Olx0Y29uZmlnIFNFUklBTF9TUFJEXG4xMzkwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBTcHJlYWR0cnVtIHNlcmlhbFwmIzM0O1xuMTM5MTpcdFx0c2VsZWN0IFNFUklBTF9DT1JFXG4xMzkyOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbjEzOTM6XHRcdGhlbHBcbjEzOTQ6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBTcHJlYWR0cnVtJiMzOTtzIHNlcmlhbC5cbjEzOTU6XHRcbjEzOTY6XHRjb25maWcgU0VSSUFMX1NQUkRfQ09OU09MRVxuMTM5NzpcdFx0Ym9vbCBcJiMzNDtTcHJlYWR0cnVtIFVBUlQgY29uc29sZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODQzCgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIFNlcmlhbCBQb3J0IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgU0VSSUFMX01FTl9aMTM1YC4gVGhhdCBjbGVhcmx5IGRlcGVuZHMgb24gYE1DQmAsIHdoaWNoIGlzIGV4cGVjdGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGJyb2FkZXIuIFdoYXQgYWJvdXQgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYD8gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGVzZSBzZXR0aW5ncyBpbnRlcmFjdC4gQW0gSSBpbmFkdmVydGVudGx5IGNyZWF0aW5nIGEgY29uZmxpY3QsIG9yIGEgcmVkdW5kYW50IGNvbmZpZ3VyYXRpb24/IEFyZSB0aGV5IGluZGVwZW5kZW50LCBvciBhcmUgdGhleSByZWxhdGVkIGluIGEgd2F5IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZz8gSXQmIzM5O3MgZXNzZW50aWFsIHRoYXQgSSBleGFtaW5lIHRoZSBicm9hZGVyIGNvbnRleHQgaGVyZS4gVGhpcyBjb3VsZCBiZSBhIG1vZHVsZSwgYSBkcml2ZXIsIG9yIGV2ZW4gc29tZXRoaW5nIGxvd2VyLWxldmVsOyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlcmFjdGlvbnMgbXVzdCBiZSBleGFtaW5lZCB2ZXJ5IGNhcmVmdWxseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTUlHQV9CVUlMVElOX1NFUklBTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVBXaXJlbGVzcyAzRyBVTVRTIFBDTUNJQSBjYXJkIHN1cHBvcnRcJiMzNDtcbiAyOTY6XHRcdGRlcGVuZHMgb24gUENNQ0lBIFx1MDAyNlx1MDAyNiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4gMjk3Olx0XHRzZWxlY3QgUFBQXG4gMjk4Olx0XHRoZWxwXG4gMjk5Olx0XHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDNHIFVNVFMgUENNQ0lBIGNhcmQgZnJvbSBJUFdpcmVsZXNzIGNvbXBhbnkuIEluXG4gMzAwOlx0XHQgIHNvbWUgY291bnRyaWVzIChmb3IgZXhhbXBsZSBDemVjaCBSZXB1YmxpYywgVC1Nb2JpbGUgSVNQKSB0aGlzIGNhcmRcbiAzMDE6XHRcdCAgaXMgc2hpcHBlZCBmb3Igc2VydmljZSBjYWxsZWQgVU1UUyA0Ry5cbiAzMDI6XHRcbiAzMDM6XHRjb25maWcgTl9HU01cbiAzMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0dTTSBNVVggbGluZSBkaXNjaXBsaW5lIHN1cHBvcnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbiAzMDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFRoaXMgbGluZSBkaXNjaXBsaW5lIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBHU00gTVVYIHByb3RvY29sIGFuZFxuIDMwODpcdFx0ICBwcmVzZW50cyB0aGUgbXV4IGFzIGEgc2V0IG9mIDYxIGluZGl2aWR1YWwgdHR5IGRldmljZXMuXG4gMzA5Olx0XG4gMzEwOlx0Y29uZmlnIE5PWk9NSVxuIDMxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SFNEUEEgQnJvYWRiYW5kIFdpcmVsZXNzIERhdGEgQ2FyZCAtIEdsb2JlIFRyb3R0ZXJcJiMzNDtcbiAzMTI6XHRcdGRlcGVuZHMgb24gUENJXG4gMzEzOlx0XHRoZWxwXG4gMzE0Olx0XHQgIElmIHlvdSBoYXZlIGEgSFNEUEEgZHJpdmVyIEJyb2FkYmFuZCBXaXJlbGVzcyBEYXRhIENhcmQgLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBBbWlnYSBTZXJpYWwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgQW1pZ2EgYnVpbHQtaW4gc2VyaWFsIHBvcnQsIGBBTUlHQV9CVUlMVElOX1NFUklBTGAsIGlzIGRlZmluZWQuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O2xsIGZpbmQgaXQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBwcm9iYWJseSB1bmRlciB0aGUgZHJpdmVycyBkaXJlY3RvcnksIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB0dHkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZHJpdmVycy90dHkvS2NvbmZpZ2AsIG9yIG1heWJlIGEgc2ltaWxhcmx5IG5hbWVkIGZpbGUgd2l0aGluIHRoYXQgdHJlZS4gSSYjMzk7bGwgc3RhcnQgdGhlcmUsIGFzIHRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBsb29raW5nIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGVybWluYWwgZGV2aWNlcyBhbmQgc2VyaWFsIHBvcnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgSSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQU1JR0FfQlVJTFRJTl9TRVJJQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXG4tLVxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05Ny1cbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk5LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIERldmljZSBEcml2ZXIgVGVzdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEtjb25maWcuZGV2aWNlc2AgZmlsZSB3aXRoaW4gdGhlIGBhcmNoL202OGtgIGRpcmVjdG9yeSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgbTY4ayBhcmNoaXRlY3R1cmUuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBkcml2ZXIgaW4gcXVlc3Rpb24sIHdoaWNoIHNlZW1zIHRvIGJlIGBhbWlzZXJpYWwuY2AsIGlzbiYjMzk7dCBnb2luZyB0byBiZSBkaXJlY3RseSB0ZXN0YWJsZSBvbiBhbiB4ODYgc3lzdGVtLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IHBvaW50LgoKTm93LCBJIHNlZSBgU0VSSUFMX1BDSF9VQVJUYCBtZW50aW9uZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQmIzM5O3MgdGVzdGFibGUuIEhtbSwgaXQgYXBwZWFycyB0aGF0IHRoaXMgY2FuIGJlIHRlc3RlZCBvbiB4ODZfMzIsIG9yIGF0IGxlYXN0IHdpdGggYENPTVBJTEVfVEVTVGAuIEhvd2V2ZXIsIHN5emJvdCwgd2hpY2ggaXMgdGhlIGZ1enplciB0aGF0JiMzOTtzIHR5cGljYWxseSB1c2VkLCBydW5zIG9uIHg4Nl82NCwgZG9lc24mIzM5O3QgaXQ/IFNvLCB1bmxlc3MgYENPTVBJTEVfVEVTVGAgaXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQgZm9yIGEgZ2l2ZW4gdGVzdCBydW4sIGl0JiMzOTtzIGxpa2VseSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIHdvbiYjMzk7dCBiZSB0cmlnZ2VyZWQuIEhvbGQgb24sIGlzbiYjMzk7dCBzeXpib3QgbmV2ZXIgcnVuIHdpdGggYENPTVBJTEVfVEVTVGA/IFJpZ2h0LiBTbywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgdGVzdGFibGUuCgpBaCwgSSBtaXNzZWQgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGhhcyBhIGRlcGVuZGVuY3k6IGBQQ0kgJmFtcDsmYW1wOyAoWDg2XzMyIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUKWAuIFRoaXMgY29uZmlybXMgdGhhdCBpdCYjMzk7cyAqbm90KiB0ZXN0YWJsZSBvbiB4ODZfNjQgdW5sZXNzIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIHdoaWNoLCBhcyBkaXNjdXNzZWQsIGlzIHVubGlrZWx5LiBHb3QgaXQuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgU0VSSUFMX01FTl9aMTM1YC4gSXQgZGVwZW5kcyBvbiBgTUNCYC4gYE1DQmAuLi4gdGhhdCYjMzk7cyB0aGUgTUVOIENoYW1lbGVvbiBCdXMsIHdoaWNoIGNhbiBiZSBQQ0ktYmFzZWQuIFNvLCBpZiBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBjb3JyZWN0bHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYE1DQmAuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHNlZSBpZiB0aGUgc2Vjb25kIGRldmljZSBpcyB0ZXN0YWJsZSBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQ0ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tY2IvS2NvbmZpZy01LVxuZHJpdmVycy9tY2IvS2NvbmZpZzo2Om1lbnVjb25maWcgTUNCXG5kcml2ZXJzL21jYi9LY29uZmlnLTctXHQgICB0cmlzdGF0ZSBcJiMzNDtNQ0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWNiL0tjb25maWc9MTk9aWYgTUNCXG5kcml2ZXJzL21jYi9LY29uZmlnOjIwOmNvbmZpZyBNQ0JfUENJXG5kcml2ZXJzL21jYi9LY29uZmlnLTIxLVx0ICAgdHJpc3RhdGUgXCYjMzQ7UENJIGJhc2VkIE1DQiBjYXJyaWVyXCYjMzQ7XG4tLVxuZHJpdmVycy9tY2IvS2NvbmZpZy0zMS1cbmRyaXZlcnMvbWNiL0tjb25maWc6MzI6Y29uZmlnIE1DQl9MUENcbmRyaXZlcnMvbWNiL0tjb25maWctMzMtXHQgICB0cmlzdGF0ZSBcJiMzNDtMUEMgKG5vbiBQQ0kpIGJhc2VkIE1DQiBjYXJyaWVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEyCgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDExOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBNQ0JgICpjYW4qIGJlIGVuYWJsZWQsIGJ1dCB0aGUgbW9zdCBlYXNpbHkgdGVzdGFibGUgcGFydCBvZiB0aGlzIGlzIGRlZmluaXRlbHkgYHZjX3NjcmVlbi5jYCwgZ2l2ZW4gdGhhdCBgQ09ORklHX1ZUYCBpcyBhbHJlYWR5IGVuYWJsZWQuIEdvb2QuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiBpbiBgdmNfc2NyZWVuLmNgLCBpdCYjMzk7cyBhIHNpbXBsZSBjaGFuZ2UsIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlYCB3aXRoIGBrbWFsbG9jYCwgYW5kIGBmcmVlX3BhZ2VfcHRyYCB3aXRoIGBrZnJlZWAuICBJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gIFllcywgaXQmIzM5O3MgYSAqZnVuY3Rpb25hbCogY2hhbmdlIOKAkyBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kuICBCdXQsIGRvZXMgaXQgYWx0ZXIgZXhlY3V0aW9uIGZsb3c/IE5vLCBpdCYjMzk7cyBub3QgY2hhbmdpbmcgdGhlICpob3cqIHRoZSBjb2RlICpkb2VzKiB0aGUgam9iLCBvbmx5IGhvdyBtZW1vcnkgaXMgaGFuZGxlZC4KCkhvd2V2ZXIsIGEgYnVnIGNvdWxkIHNsaXAgaW4gd2hlcmUgYGtmcmVlYCBnZXRzIGNhbGxlZCBvbiBtZW1vcnkgdGhhdCB3YXMgKnN1cHBvc2VkKiB0byBiZSBmcmVlZCBieSBgZnJlZV9wYWdlYCwgb3IgbWF5YmUgYGttYWxsb2NgIHJldHVybnMgdW5hbGlnbmVkIG1lbW9yeSAodGhvdWdoIHRoYXQmIzM5O3MgbGVzcyBsaWtlbHkgaW4gdGhpcyBzY2VuYXJpbykuCgpXYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgc3RhdGUgSSBkb24mIzM5O3QgbmVlZCB0byBmdXp6IGNoYW5nZXMgdGhhdCBhcmUgZG9jdW1lbnRhdGlvbiwga2NvbmZpZyBjaGFuZ2VzLCBsb2dnaW5nLCBvciBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24uIEFsc28sIEkgZG9uJiMzOTt0IG5lZWQgdG8gZnV6eiBjb2RlIHRoYXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGNsZWFybHkgZG9lc24mIzM5O3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlIGNhdGVnb3JpZXMuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgcGxhaW4gYW5kIHNpbXBsZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb24gc2V0LCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBmb3IgZm9jdXMgc3ltYm9scy4gYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgYXJlIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYHZjX3NjcmVlbi5jYC4gSSBzaG91bGQgYWxzbyBsb29rIGF0IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBzZXJpYWwgZHJpdmVycy4gYHBjaF91YXJ0X2luaXRfcG9ydGAsIGBwY2hfdWFydF9leGl0X3BvcnRgLCBgbWVuX3oxMzVfcHJvYmVgLCBgbWVuX3oxMzVfcmVtb3ZlYCwgYHJzX3N0YXJ0dXBgIGFuZCBgcnNfc2h1dGRvd25gIGxvb2sgcmVsZXZhbnQuCgpMZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWdzLiAgYFNFUklBTF9QQ0hfVUFSVGAsIGBTRVJJQUxfTUVOX1oxMzVgLCBgTUNCYCwgYE1DQl9QQ0lgLCBhbmQgYFZUYCAoYWxyZWFkeSBlbmFibGVkKS4gV2FpdCwgYFNFUklBTF9QQ0hfVUFSVGAgZGVwZW5kcyBvbiBgWDg2XzMyIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUYC4gSSBzaG91bGQgYXZvaWQgbGlzdGluZyBhbnl0aGluZyB0aGF0JiMzOTtzIHRvbyBnZW5lcmljLCBzbyBJIHdvbiYjMzk7dCBsaXN0IGFueSBvZiB0aGVzZSwgYnV0IEkgKmNhbiogbGlzdCB0aG9zZSB0aGF0IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLCByaWdodD8gU28sIGBTRVJJQUxfTUVOX1oxMzVgLCBgU0VSSUFMX1BDSF9VQVJUYCwgYW5kIG1heWJlIGBBTUlHQV9CVUlMVElOX1NFUklBTGAgKGV2ZW4gaWYgaXQmIzM5O3MgbTY4aywgc3l6Ym90IG1pZ2h0IHRlc3QgbTY4ayEpLgoKTGV0IG1lIGRvdWJsZS1jaGVjazogYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgKmFyZSogdGhlIGV4YWN0IGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgdmNfc2NyZWVuLmNgLCBhbmQgdGhlIG90aGVycyBhcmUgcmVsYXRlZC4gIEFyZSB0aGVzZSBob3QgcGF0aHM/IGB2Y3NfcmVhZGAgYW5kIGB2Y3Nfd3JpdGVgIGFyZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBgL2Rldi92Y3MqYC4gTm90IG5lY2Vzc2FyaWx5IGhvdCBsaWtlIGEgbmV0d29yayBzdGFjaywgYnV0IHRoZXkgKmNvdWxkKiBiZSBjYWxsZWQgZnJlcXVlbnRseS4gYHByb2JlYCwgYHJlbW92ZWAgYXJlIGRlZmluaXRlbHkgbm90IGhvdCBwYXRocy4gYHJzX3N0YXJ0dXBgIGFuZCBgcnNfc2h1dGRvd25gIGFyZW4mIzM5O3QgaG90IHBhdGhzIGVpdGhlci4KCk9rYXksIGxldCYjMzk7cyByZWZpbmUgdGhpcy4KCioqRm9jdXMgU3ltYm9sczoqKgoKKiAgIGB2Y3NfcmVhZGAKKiAgIGB2Y3Nfd3JpdGVgCiogICBgcGNoX3VhcnRfaW5pdF9wb3J0YAoqICAgYHBjaF91YXJ0X2V4aXRfcG9ydGAKKiAgIGBtZW5fejEzNV9wcm9iZWAKKiAgIGBtZW5fejEzNV9yZW1vdmVgCiogICBgcnNfc3RhcnR1cGAKKiAgIGByc19zaHV0ZG93bmAKCioqQ29uZmlnczoqKgoKKiAgIGBTRVJJQUxfTUVOX1oxMzVgCiogICBgU0VSSUFMX1BDSF9VQVJUYAoqICAgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYAoqICAgYE1DQmAKKiAgIGBNQ0JfUENJYAoKKipSZWFzb25pbmc6KioKClRoZSBwYXRjaCBpcyByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAvYGZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AvYGtmcmVlYC4gIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBhY3Jvc3MgbXVsdGlwbGUgdHR5L3NlcmlhbCBkcml2ZXJzLiAgVGhpcyBjaGFuZ2UgKmNvdWxkKiBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCB3aXRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQU1JR0FfQlVJTFRJTl9TRVJJQUw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VSSUFMX01FTl9aMTM1JiMzNDssCiAgICAmIzM0O1NFUklBTF9QQ0hfVUFSVCYjMzQ7LAogICAgJiMzNDtBTUlHQV9CVUlMVElOX1NFUklBTCYjMzQ7LAogICAgJiMzNDtNQ0ImIzM0OywKICAgICYjMzQ7TUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zjc19yZWFkJiMzNDssCiAgICAmIzM0O3Zjc193cml0ZSYjMzQ7LAogICAgJiMzNDtwY2hfdWFydF9pbml0X3BvcnQmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfZXhpdF9wb3J0JiMzNDssCiAgICAmIzM0O21lbl96MTM1X3Byb2JlJiMzNDssCiAgICAmIzM0O21lbl96MTM1X3JlbW92ZSYjMzQ7LAogICAgJiMzNDtyc19zdGFydHVwJiMzNDssCiAgICAmIzM0O3JzX3NodXRkb3duJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoX19nZXRfZnJlZV9wYWdlLCBmcmVlX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zIChrbWFsbG9jLCBrZnJlZSkgYWNyb3NzIHNldmVyYWwgdHR5IGFuZCBzZXJpYWwgZHJpdmVycyAodmNfc2NyZWVuLCBwY2hfdWFydCwgbWVuX3oxMzVfdWFydCwgYW1pc2VyaWFsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY291bGQgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgaW52YWxpZCBmcmVlcywgb3IgYWxpZ25tZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBuZXcgYWxsb2NhdGlvbiBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQU1JR0FfQlVJTFRJTl9TRVJJQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDEzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqVGhlIERlYnVnZ2luZyBEYW5jZTogTWlzc2luZyBTZXJpYWwgRGV2aWNlKioKCkFscmlnaHQsIHNvIHRoZSBidWlsZCBpcyBjb21wbGFpbmluZyBhYm91dCBhIG1pc3NpbmcgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYCBzeW1ib2wuIFRoYXQmIzM5O3MgbmV2ZXIgZnVuLiBGaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgbGVnaXRpbWF0ZSBjb25maWd1cmF0aW9uIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlc2AuIEkgdmFndWVseSByZWNhbGwgbWFraW5nIGNoYW5nZXMgaW4gdGhhdCBhcmVhIHJlbGF0ZWQgdG8gdGhlIHNlcmlhbCBwb3J0IGRlZmluaXRpb25zLiBJdCYjMzk7cyBwb3NzaWJsZSBJIG92ZXJsb29rZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgSSBtaXNzZWQuIEl0JiMzOTtzIHVubGlrZWx5IGEgc2ltcGxlIHR5cG8sIGJ1dCBJIGNhbuKAmXQgcnVsZSBhbnl0aGluZyBvdXQgd2l0aG91dCB2ZXJpZnlpbmcgdGhlIGRldGFpbHMuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIEtjb25maWcgYW5kIHNlZSBpZiB0aGUgbG9naWNhbCBzdHJ1Y3R1cmUgaXMgaW50YWN0LiBJcyBpdCBlbmFibGVkIGNvbmRpdGlvbmFsbHk/IElzIHRoZXJlIGEgbmVzdGVkIGRlcGVuZGVuY3kgdGhhdCYjMzk7cyBub3QgYmVpbmcgbWV0IGluIHRoZSBjdXJyZW50IGJ1aWxkIGVudmlyb25tZW50PyBHb3R0YSB0cmFjZSB0aGF0IHRocm91Z2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QU1JR0FfQlVJTFRJTl9TRVJJQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXG4tLVxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05Ny1cbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk5LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM9MTIxPWNvbmZpZyBTRVJJQUxfQ09OU09MRVxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy0xMjItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGVcJiMzNDtcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6MTIzOlx0ZGVwZW5kcyBvbiBBTUlHQV9CVUlMVElOX1NFUklBTD15XG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTEyNC1cdGhlbHBcbi0tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc9MjQ9Q09ORklHX1BST0NfSEFSRFdBUkU9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjI1OkNPTkZJR19BTUlHQV9CVUlMVElOX1NFUklBTD15XG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctMjYtQ09ORklHX1NFUklBTF9DT05TT0xFPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9NDI9Q09ORklHX0FUQVJJX0RTUDU2Sz1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NDM6Q09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXlcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy00NC1DT05GSUdfU0VSSUFMX0NPTlNPTEU9eVxuLS1cbmRyaXZlcnMvdHR5L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19TRVJJQUxfREVWX0JVUylcdCYjNDM7PSBzZXJkZXYvXG4tLVxuZHJpdmVycy90dHkvTWFrZWZpbGUtMTgtIyB0dHkgZHJpdmVyc1xuZHJpdmVycy90dHkvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSAmIzQzOz0gYW1pc2VyaWFsLm9cbmRyaXZlcnMvdHR5L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19NT1hBX0lOVEVMTElPKVx0JiM0Mzs9IG1veGEub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3MgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBDb25maWcgQ2hlY2sqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGBBTUlHQV9CVUlMVElOX1NFUklBTGAsIHNvbWV3aGVyZS4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMhIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBhcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzYC4gVGhhdCYjMzk7cyBzdHJhbmdlLCB0aGUgdG9vbCBJIHdhcyB1c2luZyBqdXN0IGZsYWdnZWQgaXQgYXMgbWlzc2luZy4gTm93LCB3aHkgd291bGQgaXQgc2F5IHRoYXQ/CgpIbW0sIEkgaGF2ZSBhIGZldyBpZGVhcy4gUGVyaGFwcyB0aGUgdG9vbCBpcyBvdmVybHkgZm9jdXNlZCBvbiB4ODYgY29uZmlndXJhdGlvbnMgYW5kIGRvZXNuJiMzOTt0IGNvbnNpZGVyIG90aGVyIGFyY2hpdGVjdHVyZXMsIG9yIG1heWJlIGl0cyBLY29uZmlnIHBhcnNpbmcgaXMgYSBsaXR0bGUgZmxhd2VkIGFuZCBtaXNzZWQgaXQsIG9yIG1heWJlIGl0JiMzOTtzIG9ubHkgY2hlY2tpbmcgb3B0aW9ucyBhdmFpbGFibGUgb24gbXkgY3VycmVudCBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlICh4ODZfNjQpLiBPbmUgb2YgdGhvc2Ugc2VlbXMgbGlrZWx5LCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgaXQgZXhpc3RzIGFuZCBJIGNhbiB1c2UgaXQuIE9rYXksIEkmIzM5O2xsIGp1c3QgcmVtb3ZlIGBBTUlHQV9CVUlMVElOX1NFUklBTGAgZnJvbSB0aGUgbGlzdCBmb3Igbm93OyBJIGNhbiBhbHdheXMgcmUtYWRkIGl0IGxhdGVyIGlmIG5lZWRlZC4gUHJvYmxlbSBzb2x2ZWQsIG1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklBTF9NRU5fWjEzNSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfUENIX1VBUlQmIzM0OywKICAgICYjMzQ7TUNCJiMzNDssCiAgICAmIzM0O01DQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2Y3NfcmVhZCYjMzQ7LAogICAgJiMzNDt2Y3Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGNoX3VhcnRfaW5pdF9wb3J0JiMzNDssCiAgICAmIzM0O3BjaF91YXJ0X2V4aXRfcG9ydCYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9wcm9iZSYjMzQ7LAogICAgJiMzNDttZW5fejEzNV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cnNfc3RhcnR1cCYjMzQ7LAogICAgJiMzNDtyc19zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbnMgKF9fZ2V0X2ZyZWVfcGFnZSwgZnJlZV9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoa21hbGxvYywga2ZyZWUpIGFjcm9zcyBzZXZlcmFsIHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMgKHZjX3NjcmVlbiwgcGNoX3VhcnQsIG1lbl96MTM1X3VhcnQsIGFtaXNlcmlhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IGFsbG9jYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRVJJQUxfTUVOX1oxMzUmIzM0OywKICAgICYjMzQ7U0VSSUFMX1BDSF9VQVJUJiMzNDssCiAgICAmIzM0O01DQiYjMzQ7LAogICAgJiMzNDtNQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmNzX3JlYWQmIzM0OywKICAgICYjMzQ7dmNzX3dyaXRlJiMzNDssCiAgICAmIzM0O3BjaF91YXJ0X2luaXRfcG9ydCYjMzQ7LAogICAgJiMzNDtwY2hfdWFydF9leGl0X3BvcnQmIzM0OywKICAgICYjMzQ7bWVuX3oxMzVfcHJvYmUmIzM0OywKICAgICYjMzQ7bWVuX3oxMzVfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3JzX3N0YXJ0dXAmIzM0OywKICAgICYjMzQ7cnNfc2h1dGRvd24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE1OjM0LjI4MDMzNjEwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODM4NTc2Mjk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6MzQuMjgwMzQ3MDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY4MjA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNTk4MGM4MTAzODhlNGI1YjJiMzJkNDhhMzFiMWU1YTc0ZmYyMzAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDEzOjE1OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcXG5pbmRleCA4MWVhY2E3NTE1NDFhYi4uMjhhZjBmZDk4MTgxOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcXG4rKysgYi9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuY1xcbkBAIC00NDMsMjMgKzQ0MywyMyBAQCBzdGF0aWMgaW50IHJzX3N0YXJ0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbylcXG4gXFx0c3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gXFx1MDAyNmluZm8tXFx1MDAzZXRwb3J0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnRcXHRyZXR2YWw9MDtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYWdlO1xcbitcXHR2b2lkICpidWZmZXI7XFxuIFxcbi1cXHRwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXBhZ2UpXFxuK1xcdGJ1ZmZlciA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFidWZmZXIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKHR0eV9wb3J0X2luaXRpYWxpemVkKHBvcnQpKSB7XFxuLVxcdFxcdGZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0a2ZyZWUoYnVmZmVyKTtcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2V4bWl0LmJ1ZilcXG4tXFx0XFx0ZnJlZV9wYWdlKHBhZ2UpO1xcbitcXHRcXHRrZnJlZShidWZmZXIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGluZm8tXFx1MDAzZXhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTtcXG4rXFx0XFx0aW5mby1cXHUwMDNleG1pdC5idWYgPSBidWZmZXI7XFxuIFxcbiAjaWZkZWYgU0VSSUFMX0RFQlVHX09QRU5cXG4gXFx0cHJpbnRrKFxcXCJzdGFydGluZyB1cCB0dHlzJWQgLi4uXFxcIiwgaW5mby1cXHUwMDNlbGluZSk7XFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBzdGF0aWMgdm9pZCByc19zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKVxcbiBcXHQgKi9cXG4gXFx0ZnJlZV9pcnEoSVJRX0FNSUdBX1ZFUlRCLCBpbmZvKTtcXG4gXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylpbmZvLVxcdTAwM2V4bWl0LmJ1Zik7XFxuK1xcdGtmcmVlKGluZm8tXFx1MDAzZXhtaXQuYnVmKTtcXG4gXFx0aW5mby1cXHUwMDNleG1pdC5idWYgPSBOVUxMO1xcbiBcXG4gXFx0aW5mby1cXHUwMDNlSUVSID0gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcXG5pbmRleCA2ZmFkNTdmZWU5MTJjMi4uOTEzOGZhMjlkMzAxYjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xcbisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZW5fejEzNV91YXJ0LmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHR5X2ZsaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWNiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIE1FTl9aMTM1X01BWF9QT1JUU1xcdFxcdDEyXFxuICNkZWZpbmUgTUVOX1oxMzVfQkFTRUNMS1xcdFxcdDI5NDkxMjAwXFxuQEAgLTgxMSw3ICs4MTIsNyBAQCBzdGF0aWMgaW50IG1lbl96MTM1X3Byb2JlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2LFxcbiBcXHRpZiAoIXVhcnQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0dWFydC1cXHUwMDNlcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0dWFydC1cXHUwMDNlcnhidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghdWFydC1cXHUwMDNlcnhidWYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtODQxLDcgKzg0Miw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXFx1MDAzZXJ4YnVmKTtcXG4rXFx0a2ZyZWUodWFydC1cXHUwMDNlcnhidWYpO1xcbiBcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBhZGQgVUFSVDogJWRcXFxcblxcXCIsIGVycik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC04NTgsNyArODU5LDcgQEAgc3RhdGljIHZvaWQgbWVuX3oxMzVfcmVtb3ZlKHN0cnVjdCBtY2JfZGV2aWNlICptZGV2KVxcbiBcXG4gXFx0bGluZS0tO1xcbiBcXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcXHUwMDI2bWVuX3oxMzVfZHJpdmVyLCBcXHUwMDI2dWFydC1cXHUwMDNlcG9ydCk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgdWFydC1cXHUwMDNlcnhidWYpO1xcbitcXHRrZnJlZSh1YXJ0LVxcdTAwM2VyeGJ1Zik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWNiX2RldmljZV9pZCBtZW5fejEzNV9pZHNbXSA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xcbmluZGV4IDgwZTMxYzRkOTUzNmQxLi41ZjdmMDczZjI4NWUxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xcbisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jXFxuQEAgLTE2NjIsNyArMTY2Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWcyMHRfcG9ydCAqcGNoX3VhcnRfaW5pdF9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRpZiAocHJpdiA9PSBOVUxMKVxcbiBcXHRcXHRnb3RvIGluaXRfcG9ydF9hbGxvY19lcnI7XFxuIFxcbi1cXHRyeGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRyeGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFyeGJ1ZilcXG4gXFx0XFx0Z290byBpbml0X3BvcnRfZnJlZV90eGJ1ZjtcXG4gXFxuQEAgLTE3MzUsNyArMTczNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZWcyMHRfcG9ydCAqcGNoX3VhcnRfaW5pdF9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAjaWZkZWYgQ09ORklHX1NFUklBTF9QQ0hfVUFSVF9DT05TT0xFXFxuIFxcdHBjaF91YXJ0X3BvcnRzW2JvYXJkLVxcdTAwM2VsaW5lX25vXSA9IE5VTEw7XFxuICNlbmRpZlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcnhidWYpO1xcbitcXHRrZnJlZShyeGJ1Zik7XFxuIGluaXRfcG9ydF9mcmVlX3R4YnVmOlxcbiBcXHRrZnJlZShwcml2KTtcXG4gaW5pdF9wb3J0X2FsbG9jX2VycjpcXG5AQCAtMTc1MCw3ICsxNzUwLDcgQEAgc3RhdGljIHZvaWQgcGNoX3VhcnRfZXhpdF9wb3J0KHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KVxcbiBcXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCJ1YXJ0JWRfcmVnc1xcXCIsIHByaXYtXFx1MDAzZXBvcnQubGluZSk7XFxuIFxcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7XFxuIFxcdHVhcnRfcmVtb3ZlX29uZV9wb3J0KFxcdTAwMjZwY2hfdWFydF9kcml2ZXIsIFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0KTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXByaXYtXFx1MDAzZXJ4YnVmLmJ1Zik7XFxuK1xcdGtmcmVlKHByaXYtXFx1MDAzZXJ4YnVmLmJ1Zik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBjaF91YXJ0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcXG5pbmRleCA3ZDQwZWFjYzIxYjNlOC4uYmYxNTAyZmQ1YmQ0YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcXG4rKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1xcbkBAIC01Myw4ICs1Myw2IEBAXFxuICNkZWZpbmUgSEVBREVSX1NJWkVcXHQ0dVxcbiAjZGVmaW5lIENPTl9CVUZfU0laRSAoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAyNTYgOiBQQUdFX1NJWkUpXFxuIFxcbi1ERUZJTkVfRlJFRShmcmVlX3BhZ2VfcHRyLCB2b2lkICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9UKSk7XFxuLVxcbiAvKlxcbiAgKiBPdXIgbWlub3Igc3BhY2U6XFxuICAqXFxuQEAgLTM3MSw3ICszNjksNyBAQCB2Y3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIFxcdGxvZmZfdCBwb3M7XFxuIFxcdGJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTtcXG4gXFxuLVxcdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XFxuK1xcdGNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFjb25fYnVmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTU5Niw3ICs1OTQsNyBAQCB2Y3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiBcXHRpZiAodXNlX3VuaWNvZGUoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRjaGFyICpjb25fYnVmIF9fZnJlZShmcmVlX3BhZ2VfcHRyKSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRjaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghY29uX2J1ZilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNTozNC45NjgyNDc5MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzY5NzgyNzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNTk4MGM4MTAzODhlNGI1YjJiMzJkNDhhMzFiMWU1YTc0ZmYyMzAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMTM6MTU6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYyBiL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jXG5pbmRleCA4MWVhY2E3NTE1NDFhYi4uMjhhZjBmZDk4MTgxOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuY1xuKysrIGIvZHJpdmVycy90dHkvYW1pc2VyaWFsLmNcbkBAIC00NDMsMjMgKzQ0MywyMyBAQCBzdGF0aWMgaW50IHJzX3N0YXJ0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbylcbiBcdHN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9IFx1MDAyNmluZm8tXHUwMDNldHBvcnQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRyZXR2YWw9MDtcbi1cdHVuc2lnbmVkIGxvbmcgcGFnZTtcbitcdHZvaWQgKmJ1ZmZlcjtcbiBcbi1cdHBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXBhZ2UpXG4rXHRidWZmZXIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJ1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXG4gXHRpZiAodHR5X3BvcnRfaW5pdGlhbGl6ZWQocG9ydCkpIHtcbi1cdFx0ZnJlZV9wYWdlKHBhZ2UpO1xuK1x0XHRrZnJlZShidWZmZXIpO1xuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbiBcdGlmIChpbmZvLVx1MDAzZXhtaXQuYnVmKVxuLVx0XHRmcmVlX3BhZ2UocGFnZSk7XG4rXHRcdGtmcmVlKGJ1ZmZlcik7XG4gXHRlbHNlXG4tXHRcdGluZm8tXHUwMDNleG1pdC5idWYgPSAodW5zaWduZWQgY2hhciAqKSBwYWdlO1xuK1x0XHRpbmZvLVx1MDAzZXhtaXQuYnVmID0gYnVmZmVyO1xuIFxuICNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTlxuIFx0cHJpbnRrKFwic3RhcnRpbmcgdXAgdHR5cyVkIC4uLlwiLCBpbmZvLVx1MDAzZWxpbmUpO1xuQEAgLTUzNyw3ICs1MzcsNyBAQCBzdGF0aWMgdm9pZCByc19zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvKVxuIFx0ICovXG4gXHRmcmVlX2lycShJUlFfQU1JR0FfVkVSVEIsIGluZm8pO1xuIFxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWluZm8tXHUwMDNleG1pdC5idWYpO1xuK1x0a2ZyZWUoaW5mby1cdTAwM2V4bWl0LmJ1Zik7XG4gXHRpbmZvLVx1MDAzZXhtaXQuYnVmID0gTlVMTDtcbiBcbiBcdGluZm8tXHUwMDNlSUVSID0gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWVuX3oxMzVfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xuaW5kZXggNmZhZDU3ZmVlOTEyYzIuLjkxMzhmYTI5ZDMwMWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xuKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21lbl96MTM1X3VhcnQuY1xuQEAgLTE2LDYgKzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90dHlfZmxpcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tY2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUVOX1oxMzVfTUFYX1BPUlRTXHRcdDEyXG4gI2RlZmluZSBNRU5fWjEzNV9CQVNFQ0xLXHRcdDI5NDkxMjAwXG5AQCAtODExLDcgKzgxMiw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXG4gXHRpZiAoIXVhcnQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dWFydC1cdTAwM2VyeGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuK1x0dWFydC1cdTAwM2VyeGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghdWFydC1cdTAwM2VyeGJ1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtODQxLDcgKzg0Miw3IEBAIHN0YXRpYyBpbnQgbWVuX3oxMzVfcHJvYmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXHUwMDNlcnhidWYpO1xuK1x0a2ZyZWUodWFydC1cdTAwM2VyeGJ1Zik7XG4gXHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gYWRkIFVBUlQ6ICVkXFxuXCIsIGVycik7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTg1OCw3ICs4NTksNyBAQCBzdGF0aWMgdm9pZCBtZW5fejEzNV9yZW1vdmUoc3RydWN0IG1jYl9kZXZpY2UgKm1kZXYpXG4gXG4gXHRsaW5lLS07XG4gXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcdTAwMjZtZW5fejEzNV9kcml2ZXIsIFx1MDAyNnVhcnQtXHUwMDNlcG9ydCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHVhcnQtXHUwMDNlcnhidWYpO1xuK1x0a2ZyZWUodWFydC1cdTAwM2VyeGJ1Zik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWNiX2RldmljZV9pZCBtZW5fejEzNV9pZHNbXSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jXG5pbmRleCA4MGUzMWM0ZDk1MzZkMS4uNWY3ZjA3M2YyODVlMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuY1xuKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmNcbkBAIC0xNjYyLDcgKzE2NjIsNyBAQCBzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGlmIChwcml2ID09IE5VTEwpXG4gXHRcdGdvdG8gaW5pdF9wb3J0X2FsbG9jX2VycjtcbiBcbi1cdHJ4YnVmID0gKHVuc2lnbmVkIGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRyeGJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghcnhidWYpXG4gXHRcdGdvdG8gaW5pdF9wb3J0X2ZyZWVfdHhidWY7XG4gXG5AQCAtMTczNSw3ICsxNzM1LDcgQEAgc3RhdGljIHN0cnVjdCBlZzIwdF9wb3J0ICpwY2hfdWFydF9pbml0X3BvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gI2lmZGVmIENPTkZJR19TRVJJQUxfUENIX1VBUlRfQ09OU09MRVxuIFx0cGNoX3VhcnRfcG9ydHNbYm9hcmQtXHUwMDNlbGluZV9ub10gPSBOVUxMO1xuICNlbmRpZlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXJ4YnVmKTtcbitcdGtmcmVlKHJ4YnVmKTtcbiBpbml0X3BvcnRfZnJlZV90eGJ1ZjpcbiBcdGtmcmVlKHByaXYpO1xuIGluaXRfcG9ydF9hbGxvY19lcnI6XG5AQCAtMTc1MCw3ICsxNzUwLDcgQEAgc3RhdGljIHZvaWQgcGNoX3VhcnRfZXhpdF9wb3J0KHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KVxuIFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcInVhcnQlZF9yZWdzXCIsIHByaXYtXHUwMDNlcG9ydC5saW5lKTtcbiBcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUobmFtZSwgTlVMTCk7XG4gXHR1YXJ0X3JlbW92ZV9vbmVfcG9ydChcdTAwMjZwY2hfdWFydF9kcml2ZXIsIFx1MDAyNnByaXYtXHUwMDNlcG9ydCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHJpdi1cdTAwM2VyeGJ1Zi5idWYpO1xuK1x0a2ZyZWUocHJpdi1cdTAwM2VyeGJ1Zi5idWYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwY2hfdWFydF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmNcbmluZGV4IDdkNDBlYWNjMjFiM2U4Li5iZjE1MDJmZDViZDRiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jXG4rKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1xuQEAgLTUzLDggKzUzLDYgQEBcbiAjZGVmaW5lIEhFQURFUl9TSVpFXHQ0dVxuICNkZWZpbmUgQ09OX0JVRl9TSVpFIChJU19FTkFCTEVEKENPTkZJR19CQVNFX1NNQUxMKSA/IDI1NiA6IFBBR0VfU0laRSlcbiBcbi1ERUZJTkVfRlJFRShmcmVlX3BhZ2VfcHRyLCB2b2lkICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9UKSk7XG4tXG4gLypcbiAgKiBPdXIgbWlub3Igc3BhY2U6XG4gICpcbkBAIC0zNzEsNyArMzY5LDcgQEAgdmNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0bG9mZl90IHBvcztcbiBcdGJvb2wgdmlld2VkLCBhdHRyLCB1bmlfbW9kZTtcbiBcbi1cdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRjaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWNvbl9idWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTU5Niw3ICs1OTQsNyBAQCB2Y3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0aWYgKHVzZV91bmljb2RlKGlub2RlKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0Y2hhciAqY29uX2J1ZiBfX2ZyZWUoZnJlZV9wYWdlX3B0cikgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcbitcdGNoYXIgKmNvbl9idWYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghY29uX2J1ZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNTozNC45NjgyNTEwNDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM3MTM3Njc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEFQSSBSZXBsYWNlbWVudCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gVGhpcyBwYXRjaCByZXBsYWNlcyBgX19nZXRfZnJlZV9wYWdlYCBhbmQgYGZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AvYGt6YWxsb2NgIGFuZCBga2ZyZWVgIGluIGEgZmV3IHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMsIHNwZWNpZmljYWxseSBgYW1pc2VyaWFsLmNgLCBgbWVuX3oxMzVfdWFydC5jYCwgYHBjaF91YXJ0LmNgLCBhbmQgYHZjX3NjcmVlbi5jYC4gSXQncyBhIHJlZmFjdG9yaW5nLCBlZmZlY3RpdmVseSBzd2FwcGluZyBvbmUgbWVtb3J5IGFsbG9jYXRpb24gbWV0aG9kIGZvciBhbm90aGVyLCBnb2luZyBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciB0byB0aGUgc2xhYiBhbGxvY2F0b3IuXG5cblRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gSXQncyBub3QgKmFkZGluZyogbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc3RhdGVzLCBqdXN0IGNoYW5naW5nICpob3cqIG1lbW9yeSBpcyBhY3F1aXJlZC4gSXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBBUEkgcmVwbGFjZW1lbnQgYXQgZmlyc3QgZ2xhbmNlLlxuXG5CdXQgd2FpdCwgaXMgdGhpcyBwdXJlbHkgZGVjb3JhdGl2ZSwgb3IgYSBjaGFuZ2UgdG8gbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb2Vzbid0IGZ1bmN0aW9uYWxseSBhbHRlciBmbG93PyBObywgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBtZW1vcnkgaXMgaGFuZGxlZC4gVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZSwgdGhvdWdoLiBJcyBpdCB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcsIHRob3VnaD9cblxuSSBuZWVkIHRvIGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgaXQncyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGlvbiwgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZS4gQW5kIHRoZXNlIGRyaXZlcnMgYXJlLi4uXG5cbiogICBgYW1pc2VyaWFsLmNgOiBBbWlnYSBzZXJpYWwgcG9ydC4gTGlrZWx5IG5vdCByZWFjaGFibGUgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cbiogICBgbWVuX3oxMzVfdWFydC5jYDogTUVOIENoYW1lbGVvbiBCdXMgVUFSVC5cbiogICBgcGNoX3VhcnQuY2A6IEludGVsIFBDSC9MQVBJUyBVQVJULlxuKiAgIGB2Y19zY3JlZW4uY2A6IFZpcnR1YWwgY29uc29sZSBkcml2ZXIsIGAvZGV2L3ZjcypgLiBUaGlzIG9uZSBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLlxuXG5Pa2F5LCBzbyBgdmNfc2NyZWVuLmNgIGlzIHJlYWNoYWJsZS4gSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdy4gSXQncyBlc3NlbnRpYWxseSByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AuIFRoZSBjb3JlICpsb2dpYyogaXMgaWRlbnRpY2FsLlxuXG5CdXQgd2FpdCwgaWYgaXQncyByZWFjaGFibGUga2VybmVsIGNvZGUsIGFuZCBkb2Vzbid0IGZhbGwgaW50byBhbiAqZXhjbHVzaW9uKiBjcml0ZXJpYSwgdGhlIGd1aWRlbGluZXMgc3VnZ2VzdCBcIldvcnRoRnV6emluZz10cnVlXCIuXG5cbkxldCBtZSByZS1yZWFkIHRoZSByZWxldmFudCBwYXJ0OiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuYHZjX3NjcmVlbi5jYCBpcyByZWFjaGFibGUuIGAvZGV2L3Zjc2AgaXMgYWNjZXNzaWJsZS4gU28gaXQgaXMgKmRlZmluaXRlbHkqIHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhpcyBjb2RlLlxuXG5JcyBpdCAqd29ydGgqIGZ1enppbmc/IFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHF1aXRlIHRyaXZpYWwgLSBqdXN0IGFuIGFsbG9jYXRvciBzd2FwLiBIb3dldmVyLCBpdCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUgYnVncy4gQ29uc2lkZXI6IGlzIGBrbWFsbG9jYCBnb2luZyB0byBoYW5kbGUgYFBBR0VfU0laRWAgY29ycmVjdGx5PyBZZXAsIGBrbWFsbG9jKFBBR0VfU0laRSlgIHNob3VsZCBiZSBmaW5lLiBXaGF0IGFib3V0IGFsaWdubWVudD8gSXMgcGFnZSBhbGlnbm1lbnQgbmVjZXNzYXJ5PyBga21hbGxvY2AgZG9lc24ndCAqZ3VhcmFudGVlKiBwYWdlIGFsaWdubWVudDsgaXQncyBqdXN0IG5hdHVyYWwgYWxpZ25tZW50LiBJZiB0aGUgaGFyZHdhcmUgKm5lZWRzKiBwYWdlLWFsaWduZWQgbWVtb3J5LCB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgYnV0IGluIHRoZSBjYXNlIG9mIGB2Y19zY3JlZW4uY2AsIGl0J3MganVzdCBmb3IgYnVmZmVycyB1c2VkIHdpdGggYGNvcHlfdG9fdXNlcmAgYW5kIGBjb3B5X2Zyb21fdXNlcmAgYW5kIGlzbid0IGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUgRE1BLlxuXG5UaGUgc3BlY2lmaWMgaW5zdGFuY2VzIGFyZTpcblxuKiAgIGBhbWlzZXJpYWwuY2A6IFVzZXMgYGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAgcmVwbGFjaW5nIGBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTClgLlxuKiAgIGBtZW5fejEzNV91YXJ0LmNgOiBVc2VzIGBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpYC5cbiogICBgcGNoX3VhcnQuY2A6IFVzZXMgYGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAuXG4qICAgYHZjX3NjcmVlbi5jYDogVXNlcyBga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpYC5cblxuT2theSwgSSBuZWVkIHRvIGNoZWNrIGB2Y19zY3JlZW4uY2AgbW9yZSBjbG9zZWx5IGFuZCB2ZXJpZnkgbXkgYWxpZ25tZW50IGFzc3VtcHRpb25zLiBCdXQgYmFzZWQgb24gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIGFuc3dlciBpcyBsZWFuaW5nIHRvd2FyZCBXb3J0aEZ1enppbmc9dHJ1ZSwgZ2l2ZW4gdGhhdCBgL2Rldi92Y3NgIGlzIGVhc2lseSBhY2Nlc3NpYmxlIGFuZCB0aGUgcGF0Y2ggZG9lcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6NTEuMzM5NjMxNTE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTU5ODAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y3NfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz0yMjc9c3RhdGljIGxvZmZfdCB2Y3NfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjQ0LVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI0NTpzdGF0aWMgaW50IHZjc19yZWFkX2J1Zl91bmkoc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI0Ni1cXHRcXHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkKVxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtMjcyLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjI3MzpzdGF0aWMgdm9pZCB2Y3NfcmVhZF9idWZfbm9hdHRyKGNvbnN0IHN0cnVjdCB2Y19kYXRhICp2YywgY2hhciAqY29uX2J1ZixcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy0yNzQtXFx0XFx0dW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LCBib29sIHZpZXdlZClcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI5Mi1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzoyOTM6c3RhdGljIHVuc2lnbmVkIGludCB2Y3NfcmVhZF9idWYoY29uc3Qgc3RydWN0IHZjX2RhdGEgKnZjLCBjaGFyICpjb25fYnVmLFxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTI5NC1cXHRcXHR1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsIGJvb2wgdmlld2VkLFxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM9MzYxPXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6MzYyOnZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy0zNjMte1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDMwLVxcdFxcdGlmICh1bmlfbW9kZSkge1xcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQzMTpcXHRcXHRcXHRyZXQgPSB2Y3NfcmVhZF9idWZfdW5pKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDMyLVxcdFxcdFxcdFxcdFxcdHZpZXdlZCk7XFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy00MzUtXFx0XFx0fSBlbHNlIGlmICghYXR0cikge1xcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQzNjpcXHRcXHRcXHR2Y3NfcmVhZF9idWZfbm9hdHRyKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM3LVxcdFxcdFxcdFxcdFxcdHZpZXdlZCk7XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDM4LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6NDM5OlxcdFxcdFxcdHRoaXNfcm91bmQgPSB2Y3NfcmVhZF9idWYodmMsIGNvbl9idWYsIHBvcywgdGhpc19yb3VuZCxcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy00NDAtXFx0XFx0XFx0XFx0XFx0dmlld2VkLCBcXHUwMDI2c2tpcCk7XFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz03NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmNzX2ZvcHMgPSB7XFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzYyLVxcdC5sbHNlZWtcXHRcXHQ9IHZjc19sc2VlayxcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo3NjM6XFx0LnJlYWRcXHRcXHQ9IHZjc19yZWFkLFxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTc2NC1cXHQud3JpdGVcXHRcXHQ9IHZjc193cml0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6NTEuOTQyMDcxMTY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NTM4MjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGB2Y3Nfd3JpdGVgKipcblxuT2theSwgc28gd2UgbmVlZCB0byBleHRlbmQgb3VyIGNoZWNrcy4gV2UndmUgZ290IHRoZSBjb3JlIGZ1bmN0aW9uLCBidXQgd2UgbmVlZCB0byBlbnN1cmUgd2UncmUgYWNjb3VudGluZyBmb3IgZWRnZSBjYXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGFueSB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgcHJvYmFibHkgc2hpZnQgb3VyIGZvY3VzIGZyb20ganVzdCB0aGUgaW5pdGlhbCB3cml0ZSBhbmQgZGlnIGRlZXBlci4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGB2Y3Nfd3JpdGVgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IGB2Y3Nfd3JpdGVgIGlzIGltcGxlbWVudGVkLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGludGVyYWN0aW9uIHdpdGggdmVyc2lvbiBjb250cm9sLiBJIG5lZWQgdG8gY2hlY2sgaXRzIGludGVyYWN0aW9uIHdpdGggaW50ZXJuYWwgbG9nZ2luZyBhbmQgbG9ja2luZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMgZ3JhY2VmdWxseSBhbmQgcmVwb3J0cyB0aGVtIGFwcHJvcHJpYXRlbHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGVtcG9yYXJ5IGZpbGVzIG9yIGRpcmVjdCBlZGl0cz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiByb2xsYmFjayBhbmQgcmVjb3ZlcnkgaW4gdGhpcyBmdW5jdGlvbj8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgXCJiZWZvcmVcIiBhbmQgXCJhZnRlclwiIHN0YXRlIG9mIHRoZSBWQ1MgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBpZiBhbnkgY2xlYW51cCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHJvYnVzdCBhcyB3ZSdkIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNTo1NS43Mzc0NTY1NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzA0MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjc193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz0zNjI9dmNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDcwLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjQ3MTpzdGF0aWMgdTE2ICp2Y3Nfd3JpdGVfYnVmX25vYXR0cihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IGNoYXIgKmNvbl9idWYsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNDcyLVxcdFxcdHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCB2aWV3ZWQsIHUxNiAqKm9yZzApXFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz01MDI9c3RhdGljIGlubGluZSB1MTYgdmNfY29tcGlsZV9sZTE2KHU4IGhpLCB1OCBsbylcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTUxMC1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1MTE6c3RhdGljIHUxNiAqdmNzX3dyaXRlX2J1ZihzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IGNoYXIgKmNvbl9idWYsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNTEyLVxcdFxcdHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCB2aWV3ZWQsIHUxNiAqKm9yZzApXFxuLS1cXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYz01ODI9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo1ODM6dmNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYy01ODQte1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjcxLVxcdFxcdGlmIChhdHRyKVxcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jOjY3MjpcXHRcXHRcXHRvcmcgPSB2Y3Nfd3JpdGVfYnVmKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjczLVxcdFxcdFxcdFxcdFxcdHZpZXdlZCwgXFx1MDAyNm9yZzApO1xcbmRyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jLTY3NC1cXHRcXHRlbHNlXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM6Njc1OlxcdFxcdFxcdG9yZyA9IHZjc193cml0ZV9idWZfbm9hdHRyKHZjLCBjb25fYnVmLCBwb3MsIHRoaXNfcm91bmQsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNjc2LVxcdFxcdFxcdFxcdFxcdHZpZXdlZCwgXFx1MDAyNm9yZzApO1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmM9NzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZjc19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzYzLVxcdC5yZWFkXFx0XFx0PSB2Y3NfcmVhZCxcXG5kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYzo3NjQ6XFx0LndyaXRlXFx0XFx0PSB2Y3Nfd3JpdGUsXFxuZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMtNzY1LVxcdC5wb2xsXFx0XFx0PSB2Y3NfcG9sbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTU6NTUuODYwMTY5NTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2NjU3MjM4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgUGF0Y2g6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIHdvcnRoIG15IHRpbWUgZnV6emluZz9cIiBJdCBsb29rcyBsaWtlIGl0IHRvdWNoZXMgc2V2ZXJhbCBkaWZmZXJlbnQgYXJlYXMsIHNwZWNpZmljYWxseSBgdmNzX3JlYWRgIGFuZCBgdmNzX3dyaXRlYCBpbiBgdmNfc2NyZWVuLmNgLCBgcnNfc3RhcnR1cGAgYW5kIGByc19zaHV0ZG93bmAgaW4gYGFtaXNlcmlhbC5jYCwgYG1lbl96MTM1X3Byb2JlYCBhbmQgYG1lbl96MTM1X3JlbW92ZWAgaW4gYG1lbl96MTM1X3VhcnQuY2AsIGFuZCBgcGNoX3VhcnRfaW5pdF9wb3J0YCBhbmQgYHBjaF91YXJ0X2V4aXRfcG9ydGAgaW4gYHBjaF91YXJ0LmNgLiBUaGF0J3MgYSBkZWNlbnQgc3ByZWFkLlxuXG5NeSBndXQgc2F5cyB5ZXMsIGl0J3Mgd29ydGggYSBsb29rLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZeKAlCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbuKAlCBpbW1lZGlhdGVseSBwZXJrcyBteSBlYXJzLiBCdXQgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIERvZXMgdGhpcyAqYWN0dWFsbHkqIGltcGFjdCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IEkgY2FuIGV4cGxvaXQ/XG5cbkFoYSEgVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqY2hhbmdlcyogaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkLiBJdCdzIG1vdmluZyBmcm9tIGBfX2dldF9mcmVlX3BhZ2VgIHRvIGBrbWFsbG9jYC4gVGhhdCdzIGEgKnNpZ25pZmljYW50KiBzaGlmdC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB1bmRlbmlhYmx5LCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYHZjX3NjcmVlbi5jYC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQsIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIGNvbmZpZyBvcHRpb24gdGhhdCBtYWtlcyB0aGlzIHVucmVhY2hhYmxlLiBJcyBgQ09ORklHX1ZHQV9DT05TT0xFYCByZXF1aXJlZD8gTm8uIExvb2tzIGxpa2UgYHZjX3NjcmVlbi5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfVlRgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvdHR5L3Z0L01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjowMi4yMjY3NDY3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNzE2ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjX3NjcmVlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS92dC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC9NYWtlZmlsZT01PUZPTlRNQVBGSUxFID0gY3A0MzcudW5pXFxuZHJpdmVycy90dHkvdnQvTWFrZWZpbGUtNi1cXG5kcml2ZXJzL3R0eS92dC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19WVClcXHRcXHRcXHQrPSB2dF9pb2N0bC5vIHZjX3NjcmVlbi5vIFxcXFxcXG5kcml2ZXJzL3R0eS92dC9NYWtlZmlsZS04LVxcdFxcdFxcdFxcdFxcdCAgIHNlbGVjdGlvbi5vIGtleWJvYXJkLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjowMi4zNTg0NzM0ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE1MzQ1ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBzeXpib3QgQ29uZmlndXJhdGlvbiBRdWVzdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIHRoZSBhc3N1bWVkIGNvbmZpZ3VyYXRpb24gb2YgYENPTkZJR19WVGAgd2l0aGluIHN5emJvdCdzIGVudmlyb25tZW50LiBJJ20gcHJldHR5IGNvbmZpZGVudCBpdCdzIGVuYWJsZWQ7IEkndmUgc2VlbiBlbm91Z2ggY3Jhc2ggcmVwb3J0cyBhbmQgZGVidWdnaW5nIHNlc3Npb25zIHRvIGhhdmUgYSBnb29kIHNlbnNlIG9mIGhvdyB0aGF0J3MgaGFuZGxlZC4gSXQncyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZSwgc28gaXQncyBhIHNhZmUgYXNzdW1wdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2NvcGUgb2Ygc3l6Ym90J3MgdGVzdGluZy5cblxuTm93LCB0aG91Z2guLi4gd2hhdCBhYm91dCBgcGNoX3VhcnQuY2A/IFRoYXQncyB0aGUgcmVhbCBjcnV4IG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgZHJpdmVyLiBJcyBpdCBiZWhhdmluZyBjb3JyZWN0bHk/IEFyZSB0aGVyZSBrbm93biBpc3N1ZXM/IERvZXMgaXRzIGNvbmZpZ3VyYXRpb24gYWxpZ24gd2l0aCB3aGF0IHN5emJvdCBleHBlY3RzPyBUaGlzIHJlcXVpcmVzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgcmV2aWV3IGFueSByZWNlbnQgYnVnIHJlcG9ydHMgcmVsYXRlZCB0byBVQVJUIGRyaXZlcnMsIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGRldmljZSB0cmVlIHNldHRpbmdzIGludm9sdmVkIGluIHRlc3RpbmcuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIGBDT05GSUdfVlRgIG1heSBiZSBpbXBvcnRhbnQgaGVyZSAtIGFyZSB0aGV5IHNvbWVob3cgY29uZmxpY3Rpbmc/IFRoaXMgaXMgYSBxdWVzdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGV4cGxvcmVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjA2LjQ3Mzg1MjgzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMzIwNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaF91YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX1NFUklBTF9PV0wpXFx0XFx0Kz0gb3dsLXVhcnQub1xcbmRyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfU0VSSUFMX1BDSF9VQVJUKVxcdFxcdCs9IHBjaF91YXJ0Lm9cXG5kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1NFUklBTF9QSUMzMilcXHRcXHQrPSBwaWMzMl91YXJ0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MDcuMDc2MTgzNDgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjMxMTY1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGViYXNlOiBBIFF1aWNrIERpYWdub3N0aWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyBhIHNwZWNpZmljIGZpbGU6IGBtZW5fejEzNV91YXJ0LmNgLiBJdCdzIGEgYml0IG9mIGEga25lZS1qZXJrIHJlYWN0aW9uLCBhY3R1YWxseSwgYmVjYXVzZSB0aGF0IG5hbWUgcmluZ3MgYSBiZWxsLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGxpa2VseSByZWxhdGVzIHRvIFVBUlQgY29tbXVuaWNhdGlvbiBmb3IgdGhlIFoxMzUgYm9hcmQg4oCTIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGVyZS4gVGhlcmUgaXMgYSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgc29tZSBvZiB0aGUgc3ltcHRvbXMgSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZSBhcmUgZGVzY3JpYmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MTAuMzM5MzA2ODEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI5MjA4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVuX3oxMzVfdWFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlPTUyPW9iai0kKENPTkZJR19TRVJJQUxfTUNGKVxcdFxcdCs9IG1jZi5vXFxuZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19TRVJJQUxfTUVOX1oxMzUpXFx0XFx0Kz0gbWVuX3oxMzVfdWFydC5vXFxuZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlLTU0LW9iai0kKENPTkZJR19TRVJJQUxfTUlMQkVBVVRfVVNJTylcXHQrPSBtaWxiZWF1dF91c2lvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MTAuNTgyMjM1NTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTM3MTA5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkluaXRpYWwgSW5xdWlyeTogVW5wYWNraW5nIHRoZSBcImFtaXNlcmlhbC5jXCIgQ29udW5kcnVtKipcblxuTXkgaW1tZWRpYXRlIHJlYWN0aW9uIHVwb24gc2VlaW5nIFwiYW1pc2VyaWFsLmNcIiBpcyBhIHNoYXJwIGludGFrZSBvZiBicmVhdGgsIGEgc3VidGxlIGZ1cnJvd2luZyBvZiB0aGUgYnJvdy4gKldoYXQgYWJvdXQgaXQ/KiBUaGUgdmVyeSBuYW1lIGlzIGV2b2NhdGl2ZSwgaGludGluZyBhdCBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4gb3IgYSB0aHJlYWQgSSBuZWVkIHRvIHB1bGwuIEl0IHNjcmVhbXMgXCJsb3ctbGV2ZWxcIiBhbmQgbGlrZWx5IGRlYWxzIHdpdGggc2VyaWFsaXphdGlvbiwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGxpYnJhcnkgb3Igc3RhbmRhcmQgbGlrZSBBTUlTZXJpYWwgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24uIFRoZSBgLmBjIGV4dGVuc2lvbiBpbnN0YW50bHkgZmxhZ3MgaXQgYXMgc291cmNlIGNvZGUuIElzIHRoaXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgdnVsbmVyYWJpbGl0eT8gQSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBBIGNyaXRpY2FsIHBpZWNlIGluIGEgbGFyZ2VyIGRpc3RyaWJ1dGVkIHN5c3RlbSBJJ20gd29ya2luZyBvbj8gTXkgbWVudGFsIGNoZWNrbGlzdCBiZWdpbnMgdG8gdGljazpcblxuKiAgICoqU2VyaWFsaXphdGlvbiBmb3JtYXQqKjogV2hhdCdzIGl0IGRvaW5nPyBJcyBpdCB1c2luZyBhIHByb3ByaWV0YXJ5IG9yIHN0YW5kYXJkaXplZCBtZXRob2Q/XG4qICAgKipTZWN1cml0eSByaXNrcyoqOiBJZiBpdCdzIHNlcmlhbGl6aW5nIHVudHJ1c3RlZCBkYXRhLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnIGZvciBkZXNlcmlhbGl6YXRpb24gYXR0YWNrcy4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLlxuKiAgICoqUGVyZm9ybWFuY2UqKjogU2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY2FuIGJlIGluY3JlZGlibHkgc2xvdywgZXNwZWNpYWxseSBmb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIElzIHRoaXMgYSBib3R0bGVuZWNrIGluIG15IGN1cnJlbnQgcHJvamVjdD8gQ2FuIGl0IGJlIG9wdGltaXplZD9cbiogICAqKlBvcnRhYmlsaXR5Kio6IElzIGl0IGNyb3NzLXBsYXRmb3JtPyBEb2VzIGl0IGhhbmRsZSBlbmRpYW5uZXNzIGNvcnJlY3RseT9cbiogICAqKlZlcnNpb25pbmcqKjogRG9lcyBpdCBoYXZlIGFueSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc3N1ZXM/XG4qICAgKipFcnJvciBoYW5kbGluZyoqOiBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGR1cmluZyBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24/XG5cbk15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcsIHB1bGxpbmcgdXAgcG90ZW50aWFsIGNvZGUgc25pcHBldHMsIGxpYnJhcmllcywgYW5kIHBhc3QgZGVidWdnaW5nIGV4cGVyaWVuY2VzIHJlbGF0ZWQgdG8gc2VyaWFsaXphdGlvbi4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gZm9ybSBhIGNvbmNsdXNpdmUgdGhvdWdodCBidXQgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIGVpdGhlciBleHRyZW1lIGltcG9ydGFuY2UsIG9yIGV4dHJlbWUgdW5pbXBvcnRhbmNlLiBNeSBqb2IgaXMgdG8gZmluZCBvdXQuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6MTcuNTc1OTUwODE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM2NzAxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1pc2VyaWFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdHR5L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19TRVJJQUxfREVWX0JVUylcXHQrPSBzZXJkZXYvXFxuLS1cXG5kcml2ZXJzL3R0eS9NYWtlZmlsZS0xOC0jIHR0eSBkcml2ZXJzXFxuZHJpdmVycy90dHkvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwub1xcbmRyaXZlcnMvdHR5L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19NT1hBX0lOVEVMTElPKVxcdCs9IG1veGEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjoxNy44Mzk2MzE4MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAwNzQyMjE1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbnM6IGBTRVJJQUxfUENIX1VBUlRgLCBgU0VSSUFMX01FTl9aMTM1YCwgYW5kIGBBTUlHQV9CVUlMVElOX1NFUklBTGAuIFRoZSBBbWlnYSBvbmUgaXMgb3V0OyBubyBwb2ludCB0cnlpbmcgdG8gdGVzdCB0aGF0IG9uIHg4Ni4gYFNFUklBTF9QQ0hfVUFSVGAgc2VlbXMgbGlrZSB0aGUgb25lIGZvciB4ODYgc3lzdGVtcyAoc3BlY2lmaWNhbGx5IEludGVsJ3MgRUcyMFQgUENIKSwgYW5kIGBTRVJJQUxfTUVOX1oxMzVgIGlzIGZvciB0aGUgTUVOIENoYW1lbGVvbiBCdXMuXG5cbkJ1dCwgaXMgdGhpcyBwYXRjaCBldmVuICp3b3J0aCogZnV6emluZz8gTGV0J3Mgc2VlLi4uIHRoZSBndWlkZWxpbmVzIHNheSB0byBza2lwIHBhdGNoZXMgdGhhdCBhcmUganVzdCBkb2NzLCBLY29uZmlnLCBjb21tZW50cywgY29zbWV0aWMgbG9nZ2luZywgY2hhbmdlcyB0byBjb25zdGFudHMgdGhhdCBkb24ndCBhZmZlY3QgZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gdGhvc2UgY2F0ZWdvcmllcy4gSXQncyByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZWAgd2l0aCBga21hbGxvY2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhhdCByZXBsYWNlbWVudCBxdWFsaWZ5IGFzIGEgXCJmdW5jdGlvbmFsXCIgY2hhbmdlPyBPbiB0aGUgc3VyZmFjZSwgdGhlIGxvZ2ljICphcHBlYXJzKiBpZGVudGljYWwuIEJ1dCwgaXQncyBhIGRpZmZlcmVudCBhbGxvY2F0b3IsIHJpZ2h0PyBBbnkgaW50cm9kdWNlZCBidWdzIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCBsZWFrcywgb3IgaW52YWxpZCBmcmVlcy4gRm9yIGluc3RhbmNlLCBpbiBgdmNfc2NyZWVuLmNgLCB0aGV5J3JlIGNoYW5naW5nIHRoaXM6XG5cbmBgYGNcbi1cdGNoYXIgKmNvbl9idWYgX19mcmVlKGZyZWVfcGFnZV9wdHIpID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRjaGFyICpjb25fYnVmIF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG5gYGBcblxuRXNzZW50aWFsbHksIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGdvZXMgZnJvbSBgZnJlZV9wYWdlYCB0byBga2ZyZWVgLiBUaGF0J3MgKmRlZmluaXRlbHkqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFNvLCB5ZXMsIHRoaXMgaXMgd29ydGggZnV6emluZy4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyByZWZhY3RvcmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbWVtb3J5IGxlYWtzIG9yIGNyYXNoZXMuXG5cbkZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLCBJJ20gdGhpbmtpbmcgYHZjc19yZWFkYCwgYHZjc193cml0ZWAsIGBwY2hfdWFydF9pbml0X3BvcnRgLCBgcGNoX3VhcnRfZXhpdF9wb3J0YCwgYG1lbl96MTM1X3Byb2JlYCwgYW5kIGBtZW5fejEzNV9yZW1vdmVgLiBIb2xkIG9uLCBgcGNoX3VhcnRfaW5pdF9wb3J0YCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIHByb2JlLiBJIHNob3VsZCBjaGVjayBpZiBJIGNhbiBlbmFibGUgYm90aCBgU0VSSUFMX1BDSF9VQVJUYCBhbmQgYFNFUklBTF9NRU5fWjEzNWAuIGBTRVJJQUxfUENIX1VBUlRgIGRlcGVuZHMgb24gYFBDSWAgYW5kIGBYODZgLCBzbyB0aGF0IHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuIEFuZCBgU0VSSUFMX01FTl9aMTM1YCBuZWVkcyBgTUNCYC4gR290IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjg5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjM3LjkxMzg1Njk0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NjAxNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRVJJQUxfUENIX1VBUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc9MTE2MT1jb25maWcgU0VSSUFMX0FMVEVSQV9VQVJUX0NPTlNPTEVcXG4tLVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExNjgtXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc6MTE2OTpjb25maWcgU0VSSUFMX1BDSF9VQVJUXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgRUcyMFQgUENIL0xBUElTIFNlbWljb24gSU9IKE1MNzIxMy9NTDcyMjMvTUw3ODMxKSBVQVJUXFxcIlxcbi0tXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4NC1cXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjozOC40NTM0NzE1NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNDA5MjUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlcGVuZGVuY3kgQ2hlY2s6IFNFUklBTF9QQ0hfVUFSVCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSBgU0VSSUFMX1BDSF9VQVJUYCBtb2R1bGUgaXMgcHJvcGVybHkgc2V0IHVwLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBJIHdhbnQgdG8gZG8gdGhpcyBtZXRob2RpY2FsbHkuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBsaXN0aW5nIHRoZW0sIGJ1dCB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFsbCBpbnRlcmFjdCBhbmQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyB3aXRoaW4gdGhvc2UgY29ubmVjdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcywga25vd2luZyB0aGUgY29kZSBpbnNpZGUgYW5kIG91dC4gQXJlIHRoZXJlIGFueSBsaWJyYXJpZXMsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvdGhlciBtb2R1bGVzIGl0IHJlbGllcyBvbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHk/IFRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4OCwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjQyLjA1NzU2ODEyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTcyNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRVJJQUxfUENIX1VBUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc9MTE2MT1jb25maWcgU0VSSUFMX0FMVEVSQV9VQVJUX0NPTlNPTEVcXG4tLVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExNjgtXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc6MTE2OTpjb25maWcgU0VSSUFMX1BDSF9VQVJUXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE3MC1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgRUcyMFQgUENIL0xBUElTIFNlbWljb24gSU9IKE1MNzIxMy9NTDcyMjMvTUw3ODMxKSBVQVJUXFxcIlxcbi0tXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTE4NC1cXG5kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZzoxMTg1OmNvbmZpZyBTRVJJQUxfUENIX1VBUlRfQ09OU09MRVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTExODYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjo0Mi4yNjU1NDg4OTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNjksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNjk6XFx0Y29uZmlnIFNFUklBTF9QQ0hfVUFSVFxcbjExNzA6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIEVHMjBUIFBDSC9MQVBJUyBTZW1pY29uIElPSChNTDcyMTMvTUw3MjIzL01MNzgzMSkgVUFSVFxcXCJcXG4xMTcxOlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IChYODZfMzIgfHwgTUlQUyB8fCAgQ09NUElMRV9URVNUKVxcbjExNzI6XFx0XFx0c2VsZWN0IFNFUklBTF9DT1JFXFxuMTE3MzpcXHRcXHRoZWxwXFxuMTE3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0goUGxhdGZvcm0gY29udHJvbGxlciBIdWIpIFVBUlQgb2YgSW50ZWwgRUcyMFRcXG4xMTc1OlxcdFxcdCAgd2hpY2ggaXMgYW4gSU9IKElucHV0L091dHB1dCBIdWIpIGZvciB4ODYgZW1iZWRkZWQgcHJvY2Vzc29yLlxcbjExNzY6XFx0XFx0ICBFbmFibGluZyBQQ0hfRE1BLCB0aGlzIFBDSCBVQVJUIHdvcmtzIGFzIERNQSBtb2RlLlxcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIExBUElTIFNlbWljb25kdWN0b3IgSU9IKElucHV0L1xcbjExNzk6XFx0XFx0ICBPdXRwdXQgSHViKSwgTUw3MjEzLCBNTDcyMjMgYW5kIE1MNzgzMS5cXG4xMTgwOlxcdFxcdCAgTUw3MjEzIElPSCBpcyBmb3IgSVZJKEluLVZlaGljbGUgSW5mb3RhaW5tZW50KSB1c2UsIE1MNzIyMyBJT0ggaXNcXG4xMTgxOlxcdFxcdCAgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UgYW5kIE1MNzgzMSBJT0ggaXMgZm9yIGdlbmVyYWwgcHVycG9zZSB1c2UuXFxuMTE4MjpcXHRcXHQgIE1MNzIxMy9NTDcyMjMvTUw3ODMxIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLlxcbjExODM6XFx0XFx0ICBNTDcyMTMvTUw3MjIzL01MNzgzMSBpcyBjb21wbGV0ZWx5IGNvbXBhdGlibGUgZm9yIEludGVsIEVHMjBUIFBDSC5cXG4xMTg0OlxcdFxcbjExODU6XFx0Y29uZmlnIFNFUklBTF9QQ0hfVUFSVF9DT05TT0xFXFxuMTE4NjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBjb25zb2xlIG9uIEludGVsIEVHMjBUIFBDSCBVQVJUL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0hcXFwiXFxuMTE4NzpcXHRcXHRkZXBlbmRzIG9uIFNFUklBTF9QQ0hfVUFSVD15XFxuMTE4ODpcXHRcXHRzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjo0Mi4yNjU3ODI5OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5ODk5OTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBwcmVzZW5jZSBvZiBQQ0kgYW5kIGVpdGhlciBYODZfMzIsIE1JUFMsIG9yIENPTVBJTEVfVEVTVC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gc3l6Ym90LCB3aGVyZSBJIHVzdWFsbHkgc2VlIHRoZXNlIHRlc3RzIHJ1biwgaXMgdHlwaWNhbGx5IG9uIFg4Nl82NCBhcmNoaXRlY3R1cmUuIFRoYXQgcmFpc2VzIGEgcmVkIGZsYWcuIEl0IGxvb2tzIGxpa2UgYFNFUklBTF9QQ0hfVUFSVGAgbWlnaHQgb25seSBiZSBlbmFibGVkIGlmIGBDT01QSUxFX1RFU1RgIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB3ZSBjYW4gdW5jb3ZlciBob3cgdGhpcyBjb3VsZCBlZmZlY3QgYSB0ZXN0IHJ1bm5pbmcuIEkgd2lsbCBjaGVjayB0aGUgZGVwZW5kZW5jeSBvZiBgU0VSSUFMX01FTl9aMTM1YCBhbmQgc2VlIGlmIHRoZSBzYW1lIGlzIHRydWUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjE1LCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6NDcuNTY0Nzg3NDQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4MDM1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFUklBTF9NRU5fWjEzNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZz0xMzczPWNvbmZpZyBTRVJJQUxfU1RfQVNDX0NPTlNPTEVcXG4tLVxcbmRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnLTEzNzctXFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWc6MTM3ODpjb25maWcgU0VSSUFMX01FTl9aMTM1XFxuZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWctMTM3OS1cXHR0cmlzdGF0ZSBcXFwiTUVOIDE2ejEzNSBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNjo0Ny43MzY1OTg2MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjA6XFx0XFx0Ym9vbCBcXFwiQ29uc29sZSBvbiBBY3Rpb25zIFNlbWkgT3dsIHNlcmlhbCBwb3J0XFxcIlxcbjE0NjE6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfT1dMPXlcXG4xNDYyOlxcdFxcdHNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFXFxuMTQ2MzpcXHRcXHRzZWxlY3QgU0VSSUFMX0VBUkxZQ09OXFxuMTQ2NDpcXHRcXHRkZWZhdWx0IHlcXG4xNDY1OlxcdFxcdGhlbHBcXG4xNDY2OlxcdFxcdCAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSBBY3Rpb25zIFNlbWljb25kdWN0b3IgUzUwMC9TOTAwIFVBUlRcXG4xNDY3OlxcdFxcdCAgYXMgdGhlIHN5c3RlbSBjb25zb2xlLlxcbjE0Njg6XFx0XFxuMTQ2OTpcXHRjb25maWcgU0VSSUFMX1JEQVxcbjE0NzA6XFx0XFx0Ym9vbCBcXFwiUkRBIE1pY3JvIHNlcmlhbCBwb3J0IHN1cHBvcnRcXFwiXFxuMTQ3MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUkRBIHx8IENPTVBJTEVfVEVTVFxcbjE0NzI6XFx0XFx0c2VsZWN0IFNFUklBTF9DT1JFXFxuMTQ3MzpcXHRcXHRoZWxwXFxuMTQ3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBSREE4ODEwUEwgU29DJ3MgVUFSVC5cXG4xNDc1OlxcdFxcdCAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgb24tYm9hcmQgc2VyaWFsIHBvcnQuXFxuMTQ3NjpcXHRcXHQgIE90aGVyd2lzZSwgc2F5ICdOJy5cXG4xNDc3OlxcdFxcbjE0Nzg6XFx0Y29uZmlnIFNFUklBTF9SREFfQ09OU09MRVxcbjE0Nzk6XFx0XFx0Ym9vbCBcXFwiQ29uc29sZSBvbiBSREEgTWljcm8gc2VyaWFsIHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjQ3LjczNjg0MzgyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAyOTYxMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0IGFuZCB0aGlua2luZyB0aGlzOlxuXG4qKk1pbm9yIENvZGUgUmV2aWV3IENvcnJlY3Rpb24qKlxuXG5TaG9vdCEgSSB3YXMgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb3IgcmVmZXJlbmNlIHRvIGBTRVJJQUxfTUVOX1oxMzVgIGFuZCBJIHRvdGFsbHkgZ3JhYmJlZCB0aGUgd3JvbmcgbGluZSBudW1iZXIuIEkgd2FzIHNjYW5uaW5nIHRoZSBmaWxlLCB0aG91Z2h0IEkgd2FzIG9uIHRoZSByaWdodCB0cmFjaywgYnV0IEkgbWlzcmVhZCBpdC4gSXQncyBhY3R1YWxseSBub3QgYXQgbGluZSAxMzc1OyB0aGUgaW1wb3J0YW50IGJpdCBvZiBjb2RlIGlzIGF0IGxpbmUgMTM3OC4gTm8gYmlnIGRlYWwsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGJlIG1vcmUgY2FyZWZ1bCB3aXRoIHRob3NlIHF1aWNrIGxpbmUgY2hlY2tzLiBOb3cgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6NTMuMDM5ODEwNjg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzc4OlxcdGNvbmZpZyBTRVJJQUxfTUVOX1oxMzVcXG4xMzc5OlxcdFxcdHRyaXN0YXRlIFxcXCJNRU4gMTZ6MTM1IFN1cHBvcnRcXFwiXFxuMTM4MDpcXHRcXHRzZWxlY3QgU0VSSUFMX0NPUkVcXG4xMzgxOlxcdFxcdGRlcGVuZHMgb24gTUNCXFxuMTM4MjpcXHRcXHRoZWxwXFxuMTM4MzpcXHRcXHQgIFNheSB5ZXMgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE1FTiAxNnoxMzUgSGlnaCBTcGVlZCBVQVJUIElQLUNvcmVcXG4xMzg0OlxcdFxcdCAgb24gYSBNQ0IgY2Fycmllci5cXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4xMzg3OlxcdFxcdCAgbWVuX3oxMzVfdWFydC5rb1xcbjEzODg6XFx0XFxuMTM4OTpcXHRjb25maWcgU0VSSUFMX1NQUkRcXG4xMzkwOlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTcHJlYWR0cnVtIHNlcmlhbFxcXCJcXG4xMzkxOlxcdFxcdHNlbGVjdCBTRVJJQUxfQ09SRVxcbjEzOTI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuMTM5MzpcXHRcXHRoZWxwXFxuMTM5NDpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgU3ByZWFkdHJ1bSdzIHNlcmlhbC5cXG4xMzk1OlxcdFxcbjEzOTY6XFx0Y29uZmlnIFNFUklBTF9TUFJEX0NPTlNPTEVcXG4xMzk3OlxcdFxcdGJvb2wgXFxcIlNwcmVhZHRydW0gVUFSVCBjb25zb2xlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjUzLjA0MDA0NDc0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk4OTY1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgU2VyaWFsIFBvcnQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgU0VSSUFMX01FTl9aMTM1YC4gVGhhdCBjbGVhcmx5IGRlcGVuZHMgb24gYE1DQmAsIHdoaWNoIGlzIGV4cGVjdGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGJyb2FkZXIuIFdoYXQgYWJvdXQgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYD8gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGVzZSBzZXR0aW5ncyBpbnRlcmFjdC4gQW0gSSBpbmFkdmVydGVudGx5IGNyZWF0aW5nIGEgY29uZmxpY3QsIG9yIGEgcmVkdW5kYW50IGNvbmZpZ3VyYXRpb24/IEFyZSB0aGV5IGluZGVwZW5kZW50LCBvciBhcmUgdGhleSByZWxhdGVkIGluIGEgd2F5IEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nPyBJdCdzIGVzc2VudGlhbCB0aGF0IEkgZXhhbWluZSB0aGUgYnJvYWRlciBjb250ZXh0IGhlcmUuIFRoaXMgY291bGQgYmUgYSBtb2R1bGUsIGEgZHJpdmVyLCBvciBldmVuIHNvbWV0aGluZyBsb3dlci1sZXZlbDsgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIG11c3QgYmUgZXhhbWluZWQgdmVyeSBjYXJlZnVsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDMsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjU4LjgzOTAxMzcyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5ODIwMTUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1JR0FfQlVJTFRJTl9TRVJJQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTY6NTkuMDM4ODQ0Njk0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3R0eS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5NTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVBXaXJlbGVzcyAzRyBVTVRTIFBDTUNJQSBjYXJkIHN1cHBvcnRcXFwiXFxuIDI5NjpcXHRcXHRkZXBlbmRzIG9uIFBDTUNJQSBcXHUwMDI2XFx1MDAyNiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEhBU19JT1BPUlRcXG4gMjk3OlxcdFxcdHNlbGVjdCBQUFBcXG4gMjk4OlxcdFxcdGhlbHBcXG4gMjk5OlxcdFxcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgM0cgVU1UUyBQQ01DSUEgY2FyZCBmcm9tIElQV2lyZWxlc3MgY29tcGFueS4gSW5cXG4gMzAwOlxcdFxcdCAgc29tZSBjb3VudHJpZXMgKGZvciBleGFtcGxlIEN6ZWNoIFJlcHVibGljLCBULU1vYmlsZSBJU1ApIHRoaXMgY2FyZFxcbiAzMDE6XFx0XFx0ICBpcyBzaGlwcGVkIGZvciBzZXJ2aWNlIGNhbGxlZCBVTVRTIDRHLlxcbiAzMDI6XFx0XFxuIDMwMzpcXHRjb25maWcgTl9HU01cXG4gMzA0OlxcdFxcdHRyaXN0YXRlIFxcXCJHU00gTVVYIGxpbmUgZGlzY2lwbGluZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpXFxcIlxcbiAzMDU6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMzA2OlxcdFxcdGhlbHBcXG4gMzA3OlxcdFxcdCAgVGhpcyBsaW5lIGRpc2NpcGxpbmUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEdTTSBNVVggcHJvdG9jb2wgYW5kXFxuIDMwODpcXHRcXHQgIHByZXNlbnRzIHRoZSBtdXggYXMgYSBzZXQgb2YgNjEgaW5kaXZpZHVhbCB0dHkgZGV2aWNlcy5cXG4gMzA5OlxcdFxcbiAzMTA6XFx0Y29uZmlnIE5PWk9NSVxcbiAzMTE6XFx0XFx0dHJpc3RhdGUgXFxcIkhTRFBBIEJyb2FkYmFuZCBXaXJlbGVzcyBEYXRhIENhcmQgLSBHbG9iZSBUcm90dGVyXFxcIlxcbiAzMTI6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gMzEzOlxcdFxcdGhlbHBcXG4gMzE0OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBIU0RQQSBkcml2ZXIgQnJvYWRiYW5kIFdpcmVsZXNzIERhdGEgQ2FyZCAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE2OjU5LjAzOTA1NzkwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUyNDIzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQW1pZ2EgU2VyaWFsIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgQW1pZ2EgYnVpbHQtaW4gc2VyaWFsIHBvcnQsIGBBTUlHQV9CVUlMVElOX1NFUklBTGAsIGlzIGRlZmluZWQuIFRoaXMgbGlrZWx5IG1lYW5zIEknbGwgZmluZCBpdCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHByb2JhYmx5IHVuZGVyIHRoZSBkcml2ZXJzIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHR0eSBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3R0eS9LY29uZmlnYCwgb3IgbWF5YmUgYSBzaW1pbGFybHkgbmFtZWQgZmlsZSB3aXRoaW4gdGhhdCB0cmVlLiBJJ2xsIHN0YXJ0IHRoZXJlLCBhcyB0aGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBsb29raW5nIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGVybWluYWwgZGV2aWNlcyBhbmQgc2VyaWFsIHBvcnRzLiBMZXQncyBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTc6MDMuNTkxNDg0ODE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3NTI4NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBTUlHQV9CVUlMVElOX1NFUklBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk3LVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05OS1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6MTc6MDguMTg5MDI2MzYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTQ4MTc4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBEZXZpY2UgRHJpdmVyIFRlc3RhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgS2NvbmZpZy5kZXZpY2VzYCBmaWxlIHdpdGhpbiB0aGUgYGFyY2gvbTY4a2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRyaXZlciBpbiBxdWVzdGlvbiwgd2hpY2ggc2VlbXMgdG8gYmUgYGFtaXNlcmlhbC5jYCwgaXNuJ3QgZ29pbmcgdG8gYmUgZGlyZWN0bHkgdGVzdGFibGUgb24gYW4geDg2IHN5c3RlbS4gVGhhdCdzIGEga2V5IGZpcnN0IHBvaW50LlxuXG5Ob3csIEkgc2VlIGBTRVJJQUxfUENIX1VBUlRgIG1lbnRpb25lZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIHRlc3RhYmxlLiBIbW0sIGl0IGFwcGVhcnMgdGhhdCB0aGlzIGNhbiBiZSB0ZXN0ZWQgb24geDg2XzMyLCBvciBhdCBsZWFzdCB3aXRoIGBDT01QSUxFX1RFU1RgLiBIb3dldmVyLCBzeXpib3QsIHdoaWNoIGlzIHRoZSBmdXp6ZXIgdGhhdCdzIHR5cGljYWxseSB1c2VkLCBydW5zIG9uIHg4Nl82NCwgZG9lc24ndCBpdD8gU28sIHVubGVzcyBgQ09NUElMRV9URVNUYCBpcyBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgYSBnaXZlbiB0ZXN0IHJ1biwgaXQncyBsaWtlbHkgdGhhdCBgU0VSSUFMX1BDSF9VQVJUYCB3b24ndCBiZSB0cmlnZ2VyZWQuIEhvbGQgb24sIGlzbid0IHN5emJvdCBuZXZlciBydW4gd2l0aCBgQ09NUElMRV9URVNUYD8gUmlnaHQuIFNvLCB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIHRlc3RhYmxlLlxuXG5BaCwgSSBtaXNzZWQgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIHNlZSB0aGF0IGBTRVJJQUxfUENIX1VBUlRgIGhhcyBhIGRlcGVuZGVuY3k6IGBQQ0kgXHUwMDI2XHUwMDI2IChYODZfMzIgfHwgTUlQUyB8fCBDT01QSUxFX1RFU1QpYC4gVGhpcyBjb25maXJtcyB0aGF0IGl0J3MgKm5vdCogdGVzdGFibGUgb24geDg2XzY0IHVubGVzcyBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB3aGljaCwgYXMgZGlzY3Vzc2VkLCBpcyB1bmxpa2VseS4gR290IGl0LlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IGBTRVJJQUxfTUVOX1oxMzVgLiBJdCBkZXBlbmRzIG9uIGBNQ0JgLiBgTUNCYC4uLiB0aGF0J3MgdGhlIE1FTiBDaGFtZWxlb24gQnVzLCB3aGljaCBjYW4gYmUgUENJLWJhc2VkLiBTbywgaWYgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYE1DQmAuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHNlZSBpZiB0aGUgc2Vjb25kIGRldmljZSBpcyB0ZXN0YWJsZSBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzcyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjE0Ljg0Mzg0ODk1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzMzU5OTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21jYi9LY29uZmlnLTUtXFxuZHJpdmVycy9tY2IvS2NvbmZpZzo2Om1lbnVjb25maWcgTUNCXFxuZHJpdmVycy9tY2IvS2NvbmZpZy03LVxcdCAgIHRyaXN0YXRlIFxcXCJNQ0Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbWNiL0tjb25maWc9MTk9aWYgTUNCXFxuZHJpdmVycy9tY2IvS2NvbmZpZzoyMDpjb25maWcgTUNCX1BDSVxcbmRyaXZlcnMvbWNiL0tjb25maWctMjEtXFx0ICAgdHJpc3RhdGUgXFxcIlBDSSBiYXNlZCBNQ0IgY2FycmllclxcXCJcXG4tLVxcbmRyaXZlcnMvbWNiL0tjb25maWctMzEtXFxuZHJpdmVycy9tY2IvS2NvbmZpZzozMjpjb25maWcgTUNCX0xQQ1xcbmRyaXZlcnMvbWNiL0tjb25maWctMzMtXFx0ICAgdHJpc3RhdGUgXFxcIkxQQyAobm9uIFBDSSkgYmFzZWQgTUNCIGNhcnJpZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjE4LjY3NzQ2MTcyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzEyODQ0NDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBgTUNCYCAqY2FuKiBiZSBlbmFibGVkLCBidXQgdGhlIG1vc3QgZWFzaWx5IHRlc3RhYmxlIHBhcnQgb2YgdGhpcyBpcyBkZWZpbml0ZWx5IGB2Y19zY3JlZW4uY2AsIGdpdmVuIHRoYXQgYENPTkZJR19WVGAgaXMgYWxyZWFkeSBlbmFibGVkLiBHb29kLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiBpbiBgdmNfc2NyZWVuLmNgLCBpdCdzIGEgc2ltcGxlIGNoYW5nZSwgcmVwbGFjaW5nIGBfX2dldF9mcmVlX3BhZ2VgIHdpdGggYGttYWxsb2NgLCBhbmQgYGZyZWVfcGFnZV9wdHJgIHdpdGggYGtmcmVlYC4gIElzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyAgWWVzLCBpdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgaXQncyBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kuICBCdXQsIGRvZXMgaXQgYWx0ZXIgZXhlY3V0aW9uIGZsb3c/IE5vLCBpdCdzIG5vdCBjaGFuZ2luZyB0aGUgKmhvdyogdGhlIGNvZGUgKmRvZXMqIHRoZSBqb2IsIG9ubHkgaG93IG1lbW9yeSBpcyBoYW5kbGVkLlxuXG5Ib3dldmVyLCBhIGJ1ZyBjb3VsZCBzbGlwIGluIHdoZXJlIGBrZnJlZWAgZ2V0cyBjYWxsZWQgb24gbWVtb3J5IHRoYXQgd2FzICpzdXBwb3NlZCogdG8gYmUgZnJlZWQgYnkgYGZyZWVfcGFnZWAsIG9yIG1heWJlIGBrbWFsbG9jYCByZXR1cm5zIHVuYWxpZ25lZCBtZW1vcnkgKHRob3VnaCB0aGF0J3MgbGVzcyBsaWtlbHkgaW4gdGhpcyBzY2VuYXJpbykuXG5cbldhaXQsIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSBJIGRvbid0IG5lZWQgdG8gZnV6eiBjaGFuZ2VzIHRoYXQgYXJlIGRvY3VtZW50YXRpb24sIGtjb25maWcgY2hhbmdlcywgbG9nZ2luZywgb3IgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24uIEFsc28sIEkgZG9uJ3QgbmVlZCB0byBmdXp6IGNvZGUgdGhhdCdzIG5vdCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBjbGVhcmx5IGRvZXNuJ3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlIGNhdGVnb3JpZXMuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgcGxhaW4gYW5kIHNpbXBsZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb24gc2V0LCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzLiBgdmNzX3JlYWRgIGFuZCBgdmNzX3dyaXRlYCBhcmUgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgdmNfc2NyZWVuLmNgLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgb3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHNlcmlhbCBkcml2ZXJzLiBgcGNoX3VhcnRfaW5pdF9wb3J0YCwgYHBjaF91YXJ0X2V4aXRfcG9ydGAsIGBtZW5fejEzNV9wcm9iZWAsIGBtZW5fejEzNV9yZW1vdmVgLCBgcnNfc3RhcnR1cGAgYW5kIGByc19zaHV0ZG93bmAgbG9vayByZWxldmFudC5cblxuTGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWdzLiAgYFNFUklBTF9QQ0hfVUFSVGAsIGBTRVJJQUxfTUVOX1oxMzVgLCBgTUNCYCwgYE1DQl9QQ0lgLCBhbmQgYFZUYCAoYWxyZWFkeSBlbmFibGVkKS4gV2FpdCwgYFNFUklBTF9QQ0hfVUFSVGAgZGVwZW5kcyBvbiBgWDg2XzMyIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUYC4gSSBzaG91bGQgYXZvaWQgbGlzdGluZyBhbnl0aGluZyB0aGF0J3MgdG9vIGdlbmVyaWMsIHNvIEkgd29uJ3QgbGlzdCBhbnkgb2YgdGhlc2UsIGJ1dCBJICpjYW4qIGxpc3QgdGhvc2UgdGhhdCBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZSwgcmlnaHQ/IFNvLCBgU0VSSUFMX01FTl9aMTM1YCwgYFNFUklBTF9QQ0hfVUFSVGAsIGFuZCBtYXliZSBgQU1JR0FfQlVJTFRJTl9TRVJJQUxgIChldmVuIGlmIGl0J3MgbTY4aywgc3l6Ym90IG1pZ2h0IHRlc3QgbTY4ayEpLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrOiBgdmNzX3JlYWRgIGFuZCBgdmNzX3dyaXRlYCAqYXJlKiB0aGUgZXhhY3QgZnVuY3Rpb25zIG1vZGlmaWVkIGluIGB2Y19zY3JlZW4uY2AsIGFuZCB0aGUgb3RoZXJzIGFyZSByZWxhdGVkLiAgQXJlIHRoZXNlIGhvdCBwYXRocz8gYHZjc19yZWFkYCBhbmQgYHZjc193cml0ZWAgYXJlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGAvZGV2L3ZjcypgLiBOb3QgbmVjZXNzYXJpbHkgaG90IGxpa2UgYSBuZXR3b3JrIHN0YWNrLCBidXQgdGhleSAqY291bGQqIGJlIGNhbGxlZCBmcmVxdWVudGx5LiBgcHJvYmVgLCBgcmVtb3ZlYCBhcmUgZGVmaW5pdGVseSBub3QgaG90IHBhdGhzLiBgcnNfc3RhcnR1cGAgYW5kIGByc19zaHV0ZG93bmAgYXJlbid0IGhvdCBwYXRocyBlaXRoZXIuXG5cbk9rYXksIGxldCdzIHJlZmluZSB0aGlzLlxuXG4qKkZvY3VzIFN5bWJvbHM6KipcblxuKiAgIGB2Y3NfcmVhZGBcbiogICBgdmNzX3dyaXRlYFxuKiAgIGBwY2hfdWFydF9pbml0X3BvcnRgXG4qICAgYHBjaF91YXJ0X2V4aXRfcG9ydGBcbiogICBgbWVuX3oxMzVfcHJvYmVgXG4qICAgYG1lbl96MTM1X3JlbW92ZWBcbiogICBgcnNfc3RhcnR1cGBcbiogICBgcnNfc2h1dGRvd25gXG5cbioqQ29uZmlnczoqKlxuXG4qICAgYFNFUklBTF9NRU5fWjEzNWBcbiogICBgU0VSSUFMX1BDSF9VQVJUYFxuKiAgIGBBTUlHQV9CVUlMVElOX1NFUklBTGBcbiogICBgTUNCYFxuKiAgIGBNQ0JfUENJYFxuXG4qKlJlYXNvbmluZzoqKlxuXG5UaGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBfX2dldF9mcmVlX3BhZ2VgL2BmcmVlX3BhZ2VgIHdpdGggYGttYWxsb2NgL2BrZnJlZWAuICBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYWNyb3NzIG11bHRpcGxlIHR0eS9zZXJpYWwgZHJpdmVycy4gIFRoaXMgY2hhbmdlICpjb3VsZCogaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQgd2l0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMiwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjM1LjgwNTkxMDAzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODMyNzI4OCwiRXJyb3IiOiJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQU1JR0FfQlVJTFRJTl9TRVJJQUwiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VSSUFMX01FTl9aMTM1XCIsXG4gICAgXCJTRVJJQUxfUENIX1VBUlRcIixcbiAgICBcIkFNSUdBX0JVSUxUSU5fU0VSSUFMXCIsXG4gICAgXCJNQ0JcIixcbiAgICBcIk1DQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Y3NfcmVhZFwiLFxuICAgIFwidmNzX3dyaXRlXCIsXG4gICAgXCJwY2hfdWFydF9pbml0X3BvcnRcIixcbiAgICBcInBjaF91YXJ0X2V4aXRfcG9ydFwiLFxuICAgIFwibWVuX3oxMzVfcHJvYmVcIixcbiAgICBcIm1lbl96MTM1X3JlbW92ZVwiLFxuICAgIFwicnNfc3RhcnR1cFwiLFxuICAgIFwicnNfc2h1dGRvd25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbnMgKF9fZ2V0X2ZyZWVfcGFnZSwgZnJlZV9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucyAoa21hbGxvYywga2ZyZWUpIGFjcm9zcyBzZXZlcmFsIHR0eSBhbmQgc2VyaWFsIGRyaXZlcnMgKHZjX3NjcmVlbiwgcGNoX3VhcnQsIG1lbl96MTM1X3VhcnQsIGFtaXNlcmlhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNvdWxkIGludHJvZHVjZSBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGFsaWdubWVudCBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgbmV3IGFsbG9jYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBTUlHQV9CVUlMVElOX1NFUklBTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNzozNi4wMjQyNTk5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTczODkxNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipUaGUgRGVidWdnaW5nIERhbmNlOiBNaXNzaW5nIFNlcmlhbCBEZXZpY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYnVpbGQgaXMgY29tcGxhaW5pbmcgYWJvdXQgYSBtaXNzaW5nIGBBTUlHQV9CVUlMVElOX1NFUklBTGAgc3ltYm9sLiBUaGF0J3MgbmV2ZXIgZnVuLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgYSBsZWdpdGltYXRlIGNvbmZpZ3VyYXRpb24gaXNzdWUuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgYGFyY2gvbTY4ay9LY29uZmlnLmRldmljZXNgLiBJIHZhZ3VlbHkgcmVjYWxsIG1ha2luZyBjaGFuZ2VzIGluIHRoYXQgYXJlYSByZWxhdGVkIHRvIHRoZSBzZXJpYWwgcG9ydCBkZWZpbml0aW9ucy4gSXQncyBwb3NzaWJsZSBJIG92ZXJsb29rZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBJIG1pc3NlZC4gSXQncyB1bmxpa2VseSBhIHNpbXBsZSB0eXBvLCBidXQgSSBjYW7igJl0IHJ1bGUgYW55dGhpbmcgb3V0IHdpdGhvdXQgdmVyaWZ5aW5nIHRoZSBkZXRhaWxzLiBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBLY29uZmlnIGFuZCBzZWUgaWYgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIGlzIGludGFjdC4gSXMgaXQgZW5hYmxlZCBjb25kaXRpb25hbGx5PyBJcyB0aGVyZSBhIG5lc3RlZCBkZXBlbmRlbmN5IHRoYXQncyBub3QgYmVpbmcgbWV0IGluIHRoZSBjdXJyZW50IGJ1aWxkIGVudmlyb25tZW50PyBHb3R0YSB0cmFjZSB0aGF0IHRocm91Z2guIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjQwLjU5ODE1NjMyOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMjUyMjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBTUlHQV9CVUlMVElOX1NFUklBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcz04OD1jb25maWcgQVRBUklfRFNQNTZLXFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5kZXZpY2VzLTk3LVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM6OTg6Y29uZmlnIEFNSUdBX0JVSUxUSU5fU0VSSUFMXFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy05OS1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgYnVpbHRpbiBzZXJpYWwgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXM9MTIxPWNvbmZpZyBTRVJJQUxfQ09OU09MRVxcbmFyY2gvbTY4ay9LY29uZmlnLmRldmljZXMtMTIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGVcXFwiXFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlczoxMjM6XFx0ZGVwZW5kcyBvbiBBTUlHQV9CVUlMVElOX1NFUklBTD15XFxuYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlcy0xMjQtXFx0aGVscFxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTI0PUNPTkZJR19QUk9DX0hBUkRXQVJFPXlcXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6MjU6Q09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXlcXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctMjYtQ09ORklHX1NFUklBTF9DT05TT0xFPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZz00Mj1DT05GSUdfQVRBUklfRFNQNTZLPW1cXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NDM6Q09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctNDQtQ09ORklHX1NFUklBTF9DT05TT0xFPXlcXG4tLVxcbmRyaXZlcnMvdHR5L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19TRVJJQUxfREVWX0JVUylcXHQrPSBzZXJkZXYvXFxuLS1cXG5kcml2ZXJzL3R0eS9NYWtlZmlsZS0xOC0jIHR0eSBkcml2ZXJzXFxuZHJpdmVycy90dHkvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwub1xcbmRyaXZlcnMvdHR5L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19NT1hBX0lOVEVMTElPKVxcdCs9IG1veGEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzoxNzo0NS41MjA2ODc1NzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk0NjMwOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBDb25maWcgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGNvdWxkIGhhdmUgc3dvcm4gSSBzYXcgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYEFNSUdBX0JVSUxUSU5fU0VSSUFMYCwgc29tZXdoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcyEgSXQncyByaWdodCB0aGVyZSBpbiBgYXJjaC9tNjhrL0tjb25maWcuZGV2aWNlc2AuIFRoYXQncyBzdHJhbmdlLCB0aGUgdG9vbCBJIHdhcyB1c2luZyBqdXN0IGZsYWdnZWQgaXQgYXMgbWlzc2luZy4gTm93LCB3aHkgd291bGQgaXQgc2F5IHRoYXQ/XG5cbkhtbSwgSSBoYXZlIGEgZmV3IGlkZWFzLiBQZXJoYXBzIHRoZSB0b29sIGlzIG92ZXJseSBmb2N1c2VkIG9uIHg4NiBjb25maWd1cmF0aW9ucyBhbmQgZG9lc24ndCBjb25zaWRlciBvdGhlciBhcmNoaXRlY3R1cmVzLCBvciBtYXliZSBpdHMgS2NvbmZpZyBwYXJzaW5nIGlzIGEgbGl0dGxlIGZsYXdlZCBhbmQgbWlzc2VkIGl0LCBvciBtYXliZSBpdCdzIG9ubHkgY2hlY2tpbmcgb3B0aW9ucyBhdmFpbGFibGUgb24gbXkgY3VycmVudCBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgKHg4Nl82NCkuIE9uZSBvZiB0aG9zZSBzZWVtcyBsaWtlbHksIHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBpdCBleGlzdHMgYW5kIEkgY2FuIHVzZSBpdC4gT2theSwgSSdsbCBqdXN0IHJlbW92ZSBgQU1JR0FfQlVJTFRJTl9TRVJJQUxgIGZyb20gdGhlIGxpc3QgZm9yIG5vdzsgSSBjYW4gYWx3YXlzIHJlLWFkZCBpdCBsYXRlciBpZiBuZWVkZWQuIFByb2JsZW0gc29sdmVkLCBtb3Zpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzcyLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjE3OjUyLjQ2NzAwNjkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MDU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJQUxfTUVOX1oxMzVcIixcbiAgICBcIlNFUklBTF9QQ0hfVUFSVFwiLFxuICAgIFwiTUNCXCIsXG4gICAgXCJNQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNzX3JlYWRcIixcbiAgICBcInZjc193cml0ZVwiLFxuICAgIFwicGNoX3VhcnRfaW5pdF9wb3J0XCIsXG4gICAgXCJwY2hfdWFydF9leGl0X3BvcnRcIixcbiAgICBcIm1lbl96MTM1X3Byb2JlXCIsXG4gICAgXCJtZW5fejEzNV9yZW1vdmVcIixcbiAgICBcInJzX3N0YXJ0dXBcIixcbiAgICBcInJzX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb25zIChfX2dldF9mcmVlX3BhZ2UsIGZyZWVfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgKGttYWxsb2MsIGtmcmVlKSBhY3Jvc3Mgc2V2ZXJhbCB0dHkgYW5kIHNlcmlhbCBkcml2ZXJzICh2Y19zY3JlZW4sIHBjaF91YXJ0LCBtZW5fejEzNV91YXJ0LCBhbWlzZXJpYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCBpbnZhbGlkIGZyZWVzLCBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[1] Phase: Succeeded StartedAt: 2026-06-30 13:18:07 +0000 UTC FinishedAt: 2026-06-30 13:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 13:18:07 +0000 UTC FinishedAt: 2026-06-30 13:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2] Phase: Succeeded StartedAt: 2026-06-30 13:18:07 +0000 UTC FinishedAt: 2026-06-30 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 13:18:07 +0000 UTC FinishedAt: 2026-06-30 17:13:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 13:18:07 +0000 UTC FinishedAt: 2026-06-30 13:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 13:18:07 +0000 UTC FinishedAt: 2026-06-30 13:18:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-3572544468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 13:18:18 +0000 UTC FinishedAt: 2026-06-30 13:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 13:18:18 +0000 UTC FinishedAt: 2026-06-30 13:42:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d218b1c-9f04-4cdc-804a-cd33921d63a3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-3572544468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ce785499-ee16-49c0-a214-5fa3c7f24a35", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-1429794642/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 13:18:19 +0000 UTC FinishedAt: 2026-06-30 13:41:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d218b1c-9f04-4cdc-804a-cd33921d63a3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-3572544468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ce785499-ee16-49c0-a214-5fa3c7f24a35", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-1429794642/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 13:42:21 +0000 UTC FinishedAt: 2026-06-30 13:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 13:42:21 +0000 UTC FinishedAt: 2026-06-30 13:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 13:42:21 +0000 UTC FinishedAt: 2026-06-30 13:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 13:42:21 +0000 UTC FinishedAt: 2026-06-30 13:42:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-11764115/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 13:42:41 +0000 UTC FinishedAt: 2026-06-30 13:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 13:42:41 +0000 UTC FinishedAt: 2026-06-30 13:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce785499-ee16-49c0-a214-5fa3c7f24a35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-1429794642/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 13:44:45 +0000 UTC FinishedAt: 2026-06-30 13:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 13:44:45 +0000 UTC FinishedAt: 2026-06-30 13:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 13:44:45 +0000 UTC FinishedAt: 2026-06-30 14:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 13:44:45 +0000 UTC FinishedAt: 2026-06-30 14:10:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d218b1c-9f04-4cdc-804a-cd33921d63a3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-11764115/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5ec92445-e446-4893-b359-f0941855542e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-3667023815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 13:44:45 +0000 UTC FinishedAt: 2026-06-30 14:09:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d218b1c-9f04-4cdc-804a-cd33921d63a3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-11764115/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5ec92445-e446-4893-b359-f0941855542e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-3667023815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 14:10:14 +0000 UTC FinishedAt: 2026-06-30 14:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 14:10:14 +0000 UTC FinishedAt: 2026-06-30 14:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 14:10:14 +0000 UTC FinishedAt: 2026-06-30 14:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 14:10:14 +0000 UTC FinishedAt: 2026-06-30 14:12:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ec92445-e446-4893-b359-f0941855542e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-3667023815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 14:12:14 +0000 UTC FinishedAt: 2026-06-30 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 14:12:14 +0000 UTC FinishedAt: 2026-06-30 17:13:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ce785499-ee16-49c0-a214-5fa3c7f24a35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ec92445-e446-4893-b359-f0941855542e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-1429794642/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-3667023815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 14:12:14 +0000 UTC FinishedAt: 2026-06-30 14:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 14:12:14 +0000 UTC FinishedAt: 2026-06-30 14:12:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-3602137100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 14:12:14 +0000 UTC FinishedAt: 2026-06-30 14:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 14:12:14 +0000 UTC FinishedAt: 2026-06-30 14:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 14:12:15 +0000 UTC FinishedAt: 2026-06-30 14:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 14:12:25 +0000 UTC FinishedAt: 2026-06-30 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wzcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vcs_read","vcs_write","pch_uart_init_port","pch_uart_exit_port","men_z135_probe","men_z135_remove","rs_startup","rs_shutdown"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIAL_MEN_Z135","SERIAL_PCH_UART","MCB","MCB_PCI"],"series_id":"608645a5-23c3-4ea3-9e85-d8f55733a3d0","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 14:12:25 +0000 UTC FinishedAt: 2026-06-30 17:13:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce785499-ee16-49c0-a214-5fa3c7f24a35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ec92445-e446-4893-b359-f0941855542e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-1429794642/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-build-action-3667023815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2wzcf/series-workflow2wzcf-convert-artifact-3602137100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}