Name: series-workflowjz8kd Phase: Succeeded StartedAt: 2026-08-02 16:42:53 +0000 UTC FinishedAt: 2026-08-02 20:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[0] Phase: Succeeded StartedAt: 2026-08-02 16:42:53 +0000 UTC FinishedAt: 2026-08-02 17:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 16:42:53 +0000 UTC FinishedAt: 2026-08-02 17:01:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_set", "ext4_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzliZDQ1MmM1OGM4OWUxMzc5YjY2YWNjNTk3MTY5Mzg1ZTc2YmU4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6NTc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Li4zYzFiYjU0N2IyZjU0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0yMDc1LDEyICYjNDM7MjA3NSwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICogc3RhYmxlIHNvIHdlIGNhbiBjaGVjayB0aGUgYWRkaXRpb25hbFxuIFx0XHRcdFx0ICogcmVmZXJlbmNlIGZpdHMuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHJlZiA9IGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50KSAmIzQzOyAxO1xuLVx0XHRcdFx0aWYgKHJlZiBcdTAwM2UgRVhUNF9YQVRUUl9SRUZDT1VOVF9NQVgpIHtcbiYjNDM7XHRcdFx0XHRyZWYgPSBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXHUwMDNlaF9yZWZjb3VudCk7XG4mIzQzO1x0XHRcdFx0aWYgKHJlZiBcdTAwM2U9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZVxuIFx0XHRcdFx0XHQgKiBhZ2Fpbi5cbiBcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsIFx1MDAyNmNlLVx1MDAzZWVfZmxhZ3MpO1xuIFx0XHRcdFx0XHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XG4gXHRcdFx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgRVhUNF9DMkIoRVhUNF9TQihzYiksXG5AQCAtMjA5MSw2ICYjNDM7MjA5Miw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdG5ld19iaCA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gaW5zZXJ0ZWQ7XG4gXHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0cmVmJiM0MzsmIzQzOztcbiBcdFx0XHRcdEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50ID0gY3B1X3RvX2xlMzIocmVmKTtcbiBcdFx0XHRcdGlmIChyZWYgPT0gRVhUNF9YQVRUUl9SRUZDT1VOVF9NQVgpXG4gXHRcdFx0XHRcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXHUwMDI2Y2UtXHUwMDNlZV9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzliZDQ1MmM1OGM4OWUxMzc5YjY2YWNjNTk3MTY5Mzg1ZTc2YmU4ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTY6NTc6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyOC4uM2MxYmI1NDdiMmY1NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMjA3NSwxMiAmIzQzOzIwNzUsMTMgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgKiBzdGFibGUgc28gd2UgY2FuIGNoZWNrIHRoZSBhZGRpdGlvbmFsCiAJCQkJICogcmVmZXJlbmNlIGZpdHMuCiAJCQkJICovCi0JCQkJcmVmID0gbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLSZndDtoX3JlZmNvdW50KSAmIzQzOyAxOwotCQkJCWlmIChyZWYgJmd0OyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkgewomIzQzOwkJCQlyZWYgPSBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktJmd0O2hfcmVmY291bnQpOwomIzQzOwkJCQlpZiAocmVmICZndDs9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZQogCQkJCQkgKiBhZ2Fpbi4KIAkJCQkJICovCiYjNDM7CQkJCQljbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsICZhbXA7Y2UtJmd0O2VfZmxhZ3MpOwogCQkJCQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiAJCQkJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsCiAJCQkJCQkJIEVYVDRfQzJCKEVYVDRfU0Ioc2IpLApAQCAtMjA5MSw2ICYjNDM7MjA5Miw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCW5ld19iaCA9IE5VTEw7CiAJCQkJCWdvdG8gaW5zZXJ0ZWQ7CiAJCQkJfQomIzQzOwkJCQlyZWYmIzQzOyYjNDM7OwogCQkJCUJIRFIobmV3X2JoKS0mZ3Q7aF9yZWZjb3VudCA9IGNwdV90b19sZTMyKHJlZik7CiAJCQkJaWYgKHJlZiA9PSBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkKIAkJCQkJY2xlYXJfYml0KE1CRV9SRVVTQUJMRV9CLCAmYW1wO2NlLSZndDtlX2ZsYWdzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgZXh0NCB4YXR0ciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgZnMvZXh0NC94YXR0ci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IEkmIzM5O20gc2VlaW5nIGludm9sdmVzIGEgY2hhbmdlIGluIGhvdyB3ZSBoYW5kbGUgeGF0dHIgYmxvY2sgcmVmZXJlbmNlIGNvdW50cyB3aGVuIHRoZXkgaGl0IHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUsIGBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWGAuIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQgKmJlZm9yZSogdGhlIGNoZWNrLCBidXQgbm93IGl0IHNlZW1zIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgcmVmY291bnQgKmFscmVhZHkqIGVxdWFscyB0aGUgbWF4aW11bS4gVGhlIGtleSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBpbmNyZW1lbnQgd2l0aCBhbiBlcXVhbGl0eSBjaGVjayBhbmQgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsICZhbXA7Y2UtJmd0O2VfZmxhZ3MpYCB3aXRoaW4gdGhhdCBgaWZgIGJsb2NrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgcmV1c2Ugb2YgYSBidWZmZXIuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIGEgbmV3IHJlZmVyZW5jZSBpcyBhdHRlbXB0ZWQgd2hlbiB0aGUgY291bnQgaXMgYXQgdGhlIG1heGltdW0sIGFuZCBpbnN0ZWFkIG9mIGZhaWxpbmcsIHdlJiMzOTtyZSBjbGVhcmluZyBhIGZsYWcgcmVsYXRlZCB0byByZXVzYWJpbGl0eS4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXh0NCB4YXR0ciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gd2UgaGl0IHRoZSByZWZjb3VudCBsaW1pdCB3aGlsZSBhZGRpbmcgYSBuZXcgcmVmZXJlbmNlLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseSwgYXMgYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIHRoaXMgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzIGZvciBidWdzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjaGFuZ2UgaXMgY29ycmVjdCBhbmQgbm90IGludHJvZHVjZSBhIHJlZ3Jlc3Npb24sIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZmVhdHVyZS4gSSByZW1lbWJlciBgRVhUNF9GU2AgaXMgdGhlIG1haW4gb25lLCBhbmQgSSAqdGhpbmsqIGBFWFQ0X0ZTX1hBVFRSYCBpcyBhbm90aGVyIG9uZSwgdGhvdWdoIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGlzIGluIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GU19YQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEVYVDQgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBwb3NzaWJsZSBpc3N1ZSBoZXJlIHdpdGggYW4gYEVYVDRfRlNfWEFUVFJgIHNldHRpbmcuIFRoYXQgbmFtZSBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSByaW5nIGEgYmVsbCwgb3IgbWF5YmUgaXQmIzM5O3MganVzdCBiZWVuIHJlbmFtZWQgaW4gYSBtb3JlIHJlY2VudCBrZXJuZWwgdmVyc2lvbj8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYFhBVFRSYCBhbmQgc2VlIHdoYXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBhdmFpbGFibGUgYW5kIHdoZXRoZXIgdGhlIG9sZCBuYW1pbmcgY29udmVudGlvbiBpcyBub3cgZGVwcmVjYXRlZCBvciBpbnRlZ3JhdGVkIHVuZGVyIGEgYnJvYWRlciBgRVhUNF9GU2Agb3Igc2ltaWxhci4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCBvciBhIG1vcmUgZnVuZGFtZW50YWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24sIHNvIEkgc2hvdWxkIGJlIHF1aWNrIHRvIGZpbmQgdGhlIHJpZ2h0IG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRVhUNCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIEtjb25maWcgZmlsZSwgb2YgY291cnNlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwganVzdCBvcGVuIHVwIGBmcy9leHQ0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQgaW5pdGlhbGx5OyBsZXQmIzM5O3MgZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIHNvdXJjZS4gQWx0ZXJuYXRpdmVseSwgYSBxdWljayBgZ3JlcGAgZm9yIGBFWFQ0X0ZTYCBjb3VsZCBiZSBhIGZhc3RlciB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGVjbGFyYXRpb25zIG9yIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgaWYgdGhlIGZpbGUgaXMgdmVyeSBsYXJnZSBvciBjb21wbGV4LCBzbyBJIG1pZ2h0IGp1c3Qgc3RhcnQgd2l0aCB0aGF0IGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZS4gVGhhdCB3b3VsZCBiZSB0aGUgZWZmaWNpZW50IGFwcHJvYWNoIGZvciBhIHByb2plY3Qgb2YgdGhpcyBuYXR1cmUsIGdpdmVuIHRoZSB0aW1lIGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFWFQ0IEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgRVhUNF9GU2AgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgY29yZS4gTm93LCB3aGVuIGRlYWxpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAuIFRob3NlIGNvdWxkIGRlZmluaXRlbHkgYmUgcmVsZXZhbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBpZiBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IGhvdyBpdCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSwgYW5kIHRoZXJlZm9yZSBob3cgeGF0dHJzIGNhbiBiZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTI3Mj1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTI5NC1cdFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcbmZzL2V4dDQveGF0dHIuYzoxMjk1Olx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xuZnMvZXh0NC94YXR0ci5jLTEyOTYtXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xODk4PXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHIuYzoxODk5OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTkwMC1cdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xOTQ0LVx0XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gdW5kZXIgYnVmZmVyIGxvY2sgZm9yXG5mcy9leHQ0L3hhdHRyLmM6MTk0NTpcdFx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxuZnMvZXh0NC94YXR0ci5jLTE5NDYtXHRcdFx0ICogYmxvY2tcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjM1MT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0MzQtXHRcdGVsc2UgaWYgKCFicy5zLm5vdF9mb3VuZClcbmZzL2V4dDQveGF0dHIuYzoyNDM1Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2YnMpO1xuZnMvZXh0NC94YXR0ci5jLTI0MzYtXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNDUxLVx0XHRcdGkudmFsdWUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jOjI0NTI6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjQ1My1cdFx0fSBlbHNlIGlmIChlcnJvciA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0NjAtXHRcdFx0fVxuZnMvZXh0NC94YXR0ci5jOjI0NjE6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjQ2Mi1cdFx0XHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiAhaXMucy5ub3RfZm91bmQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjYwNz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNjcyLVx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xuZnMvZXh0NC94YXR0ci5jOjI2NzM6XHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIGJzKTtcbmZzL2V4dDQveGF0dHIuYy0yNjc0LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgWGF0dHIgQmxvY2sgU2V0dGluZyBNZWNoYW5pc20qKgoKT2theSwgc28gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaGlkZGVuIGZyb20gZGlyZWN0IGV4dGVybmFsIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaG8mIzM5O3MgdXNpbmcgdGhpcyB0aGluZz8mIzM0OyBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIHRlbGxzIG1lIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrYCBhcmUgdGhlIGNhbGxlcnMuIEZpbmUsIGdvb2QgdG8ga25vdy4gTm93LCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgcHJvY2VzcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gR290dGEgdW5kZXJzdGFuZCB3aGF0ICppdCYjMzk7cyogZG9pbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0IGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgZG9lcy4gVGhhdCBjYWxsIHBhdGggaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTIzMjA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjMzOC0vKlxuZnMvZXh0NC94YXR0ci5jOjIzMzk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcbmZzL2V4dDQveGF0dHIuYy0yMzQwLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTIzNTA9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjM1MTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG5mcy9leHQ0L3hhdHRyLmMtMjM1Mi1cdFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1MDM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjUzMi0gKlxuZnMvZXh0NC94YXR0ci5jOjI1MzM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXG5mcy9leHQ0L3hhdHRyLmMtMjUzNC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1Mzk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1NjItXG5mcy9leHQ0L3hhdHRyLmM6MjU2MzpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNTY0LVx0XHRcdFx0XHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGV4dDQgWEFUVFIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpIGFyZSBoYW5kbGVkIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkmIzM5O3ZlIGdvdCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhbmQgYGV4dDRfeGF0dHJfc2V0YCBpbiBteSBzaWdodHMsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyB0aGF0IHRoZXkmIzM5O3JlIGJvdGggZGVjbGFyZWQgbm9uLXN0YXRpYy4gVGhhdCB0ZWxscyBtZSB0aGV5JiMzOTtyZSBsaWtlbHkgZGVzaWduZWQgZm9yIHVzZSBvdXRzaWRlIHRoZWlyIGltbWVkaWF0ZSBzb3VyY2UgZmlsZSwgcGVyaGFwcyBmb3Igc29tZSBzb3J0IG9mIG1vZHVsYXJpdHkgb3IgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gU2luY2UgdGhleSYjMzk7cmUgbm90IHN0YXRpYywgdGhlIHNjb3BlIG9mIHRoZSBtZXRob2QgaXMgd2lkZXIgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLgoKTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gYGV4dDRfeGF0dHJfc2V0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBYQVRUUiBmdW5jdGlvbmFsaXR5LiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyBkaWcgaW50byBpdHMgc291cmNlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3MgZG9pbmcgb24gYSBkZWVwZXIgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz05Mjg9c3RhdGljIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQveGF0dHIuYy05MzgtXG5mcy9leHQ0L3hhdHRyLmM6OTM5OmludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy05NDAtXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsb2NrX2JoLCBzaXplX3QgdmFsdWVfbGVuLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTc4PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNjI4LVxuZnMvZXh0NC94YXR0ci5jOjE2Mjk6c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuZnMvZXh0NC94YXR0ci5jLTE2MzAtXHRcdFx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2ggKnMsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTk2Mi1cdFx0XHRlYV9iZGVidWcoYnMtXHUwMDNlYmgsIFwmIzM0O21vZGlmeWluZyBpbi1wbGFjZVwmIzM0Oyk7XG5mcy9leHQ0L3hhdHRyLmM6MTk2MzpcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTk2NC1cdFx0XHRcdFx0ICAgICBlYV9pbm9kZSwgdHJ1ZSAvKiBpc19ibG9jayAqLyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE5OTAtXHRcdCAqIElmIGV4aXN0aW5nIGVudHJ5IHBvaW50cyB0byBhbiB4YXR0ciBpbm9kZSwgd2UgbmVlZFxuZnMvZXh0NC94YXR0ci5jOjE5OTE6XHRcdCAqIHRvIHByZXZlbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoKSBmcm9tIGRlY3JlbWVudGluZ1xuZnMvZXh0NC94YXR0ci5jLTE5OTItXHRcdCAqIHJlZiBjb3VudCBvbiBpdCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgYmVsb25ncyB0byB0aGVcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjAzMS1cbmZzL2V4dDQveGF0dHIuYzoyMDMyOlx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9lbnRyeShpLCBzLCBoYW5kbGUsIGlub2RlLCBlYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yMDMzLVx0XHRcdFx0ICAgICB0cnVlIC8qIGlzX2Jsb2NrICovKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjI1Nj1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI3Ni1cdH1cbmZzL2V4dDQveGF0dHIuYzoyMjc3Olx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9lbnRyeShpLCBzLCBoYW5kbGUsIGlub2RlLCBlYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yMjc4LVx0XHRcdFx0ICAgICBmYWxzZSAvKiBpc19ibG9jayAqLyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTIzMjA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjMzOC0vKlxuZnMvZXh0NC94YXR0ci5jOjIzMzk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcbmZzL2V4dDQveGF0dHIuYy0yMzQwLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTIzNTA9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjM1MTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG5mcy9leHQ0L3hhdHRyLmMtMjM1Mi1cdFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTIzODgtXG5mcy9leHQ0L3hhdHRyLmM6MjM4OTpcdFx0Y3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZSwgYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjM5MC1cdFx0XHRcdFx0XHQgICB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1MDItXG5mcy9leHQ0L3hhdHRyLmM6MjUwMzppbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxuZnMvZXh0NC94YXR0ci5jLTI1MDQtXHRcdFx0ICAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cylcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjUxOS1cdH0gZWxzZSB7XG5mcy9leHQ0L3hhdHRyLmM6MjUyMDpcdFx0KmNyZWRpdHMgPSBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUsIGJoLFxuZnMvZXh0NC94YXR0ci5jLTI1MjEtXHRcdFx0XHRcdFx0ICAgIHZhbHVlX2xlbiwgaXNfY3JlYXRlKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjUzMC0vKlxuZnMvZXh0NC94YXR0ci5jOjI1MzE6ICogZXh0NF94YXR0cl9zZXQoKVxuZnMvZXh0NC94YXR0ci5jLTI1MzItICpcbmZzL2V4dDQveGF0dHIuYzoyNTMzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxuZnMvZXh0NC94YXR0ci5jLTI1MzQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNTM4PWludFxuZnMvZXh0NC94YXR0ci5jOjI1Mzk6ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXG5mcy9leHQ0L3hhdHRyLmMtMjU0MC1cdCAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwgaW50IGZsYWdzKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTUxLXJldHJ5OlxuZnMvZXh0NC94YXR0ci5jOjI1NTI6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUsIHZhbHVlX2xlbiwgZmxhZ3MgXHUwMDI2IFhBVFRSX0NSRUFURSxcbmZzL2V4dDQveGF0dHIuYy0yNTUzLVx0XHRcdFx0ICAgICAgIFx1MDAyNmNyZWRpdHMpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTYyLVxuZnMvZXh0NC94YXR0ci5jOjI1NjM6XHRcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cdFx0XHRcdFx0ICAgICAgdmFsdWUsIHZhbHVlX2xlbiwgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gWGF0dHIgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBzZXR0aW5nIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBmZWVscyBsaWtlIGEgc29saWQgcGxhY2UgdG8gc3RhcnQ7IGl0JiMzOTtzIGEgZ29vZCBwcmltYXJ5IHN5bWJvbCB0byBmb2xsb3cuIE15IG5leHQgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gQXJlIHRoZXJlIGFueSBvdGhlciBvYnZpb3VzIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHNldHRpbmcgdGhlc2UgYXR0cmlidXRlcz8gQWgsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGp1bXBzIG91dCBhcyBhbm90aGVyIGxpa2VseSBjYW5kaWRhdGUuIEFuZCB3aGF0IGFib3V0IGBleHQ0X3hhdHRyX2Jsb2NrX3NldGA/IEl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBvdXQsIHdlIGNhbiYjMzk7dCBkaXJlY3RseSB1c2UgdGhhdCBhcyBvdXIgZm9jdXMuCgpUaW1lIHRvIHJldmlzaXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIGBFWFQ0X0ZTYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCB3ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGF0LiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIGxpa2UgYEVYVDRfRlNfWEFUVFJgIGRpcmVjdGx5LiBXYWl0IGEgbW9tZW50ISBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbXBpbGF0aW9uLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGZzL2V4dDQvTWFrZWZpbGVgIHRvIHNlZSBleGFjdGx5IGhvdyBgeGF0dHIuY2AgaXMgY29tcGlsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyBtaWdodCBnaXZlIHVzIGEgZ29vZCBpbmRpY2F0aW9uIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhdHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRVhUNCBYQVRUUiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGB4YXR0ci5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg4oCTIGl0IGltcGxpZXMgdGhhdCBlbmFibGluZyBgRVhUNF9GU2Agc2hvdWxkIGJlIHRoZSBvbmx5IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYXQgbGVhc3QgYXQgdGhlIGJhc2UgbGV2ZWwuCgpNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIHZlcmlmeSBpZiB3ZSBuZWVkIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBvciBgRVhUNF9GU19QT1NJWF9BQ0xgIHRvIGFjdHVhbGx5ICp1c2UqIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluIHRvIGNvbmZpcm0gd2hpY2ggY29uZmlnIGZsYWdzIGFyZSB0cnVseSByZXF1aXJlZC4KCkFscmlnaHQsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgY2FsbGVkIGJ5IGJvdGggYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYW5kIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBEaWdnaW5nIGRlZXBlciwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgZXh0NF94YXR0cl9zZXRgLCBhbmQgKnRoYXQqIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGV4dDRfeGF0dHJfdHJ1c3RlZF9zZXRgLCBgZXh0NF94YXR0cl91c2VyX3NldGAsIGBleHQ0X3hhdHRyX3NlY3VyaXR5X3NldGAsIGFuZCBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCAqYW55KiB4YXR0ciBzZXQgb3BlcmF0aW9uIHNob3VsZCB1bHRpbWF0ZWx5IHJlYWNoIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIHdoaWNoIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbi4KCkdpdmVuIHRoYXQgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLCBpdCBsb29rcyBsaWtlIGp1c3QgZW5hYmxpbmcgYEVYVDRfRlNgIHNob3VsZCBpbmRlZWQgYmUgc3VmZmljaWVudCB0byBnZXQgZXZlcnl0aGluZyBsaW5rZWQgY29ycmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIGZvciBjb25maXJtYXRpb246IGBleHQ0X3hhdHRyX3NldGAsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgcG90ZW50aWFsbHkgYGV4dDRfeGF0dHJfdXNlcl9zZXRgIGFuZCBgZXh0NF94YXR0cl90cnVzdGVkX3NldGAuCgpJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBjb25maXJtIHRoaXMgaXMgdG8gbG9vayBhdCB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgZnMvZXh0NC94YXR0cl91c2VyLmNgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50cyBhcmUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIGNvbmZpcm0gaG93IHRoZSB4YXR0ciBzeXN0ZW0gaXMgZW50ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF94YXR0cl91c2VyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHJfdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHJfdXNlci5jPTMyPXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHJfdXNlci5jOjMzOmV4dDRfeGF0dHJfdXNlcl9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG5mcy9leHQ0L3hhdHRyX3VzZXIuYy0zNC1cdFx0ICAgIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jPTQ1PWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyID0ge1xuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jLTQ4LVx0LmdldFx0PSBleHQ0X3hhdHRyX3VzZXJfZ2V0LFxuZnMvZXh0NC94YXR0cl91c2VyLmM6NDk6XHQuc2V0XHQ9IGV4dDRfeGF0dHJfdXNlcl9zZXQsXG5mcy9leHQ0L3hhdHRyX3VzZXIuYy01MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIHRoZSB4YXR0ciBTZXR0aW5nIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIGBleHQ0X3hhdHRyX3VzZXJfc2V0YCBpcyBzdGF0aWMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgbWVhbnMgaWYgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gYW5hbHl6ZSBpbiByZWxhdGlvbiB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLCBgZXh0NF94YXR0cl9zZXRgIGlzIGRlZmluaXRlbHkgdGhlIGJldHRlciBjYW5kaWRhdGUgdG8gZm9jdXMgb24uIEl0IGhhcyB0byBiZSwgZ2l2ZW4gdGhlIG90aGVyIG9uZSYjMzk7cyBzdGF0aWMgbmF0dXJlLiBOb3csIGxldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgdG8gc2VlIGlmIGBleHQ0X3hhdHRyX3NldGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gaXRzIGFjY2Vzc2liaWxpdHkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgb3IgdXNlcmxhbmQuIFVuZGVyc3RhbmRpbmcgaXRzIGV4cG9ydCBzdGF0dXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaG93IEkgY2FuIGFwcHJvYWNoIGFuZCBpbnN0cnVtZW50IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmV4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleHQ0X3hhdHRyX3NldGAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLCBgZXh0NF94YXR0cl9zZXRgLiBJIGtub3cgaXQmIzM5O3MgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIG15IGZpcnN0IGNsdWUuIE5vdywgbGV0IG1lIGNvbmZpcm0gd2hlcmUgaXQmIzM5O3MgYWN0dWFsbHkgZGVmaW5lZDsgSSBiZWxpZXZlIEkgc2F3IGl0IGluIGBmcy9leHQ0L3hhdHRyLmNgLiBZZXAsIHRoZXJlIGl0IGlzISBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGl0IGRlY2xhcmVkIGluIGEgaGVhZGVyIGZpbGU/IEkgbmVlZCB0byBjaGVjayBgZnMvZXh0NC94YXR0ci5oYC4gSWYgaXQmIzM5O3MgZGVjbGFyZWQgaW4gdGhlIGhlYWRlciwgdGhhdCBjaGFuZ2VzIGV2ZXJ5dGhpbmcgaW4gdGVybXMgb2YgaG93IEkgbmVlZCB0byBoYW5kbGUgaXQuIExldCBtZSBnZXQgdGhhdCBoZWFkZXIgZmlsZSBvcGVuLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuaD0xODA9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTtcbmZzL2V4dDQveGF0dHIuaDoxODE6ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oOjE4MjpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oOjE4MzpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbmZzL2V4dDQveGF0dHIuaC0xODQtXHRcdFx0XHQgIGJvb2wgaXNfY3JlYXRlLCBpbnQgKmNyZWRpdHMpO1xuZnMvZXh0NC94YXR0ci5oOjE4NTpleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5oLTE4Ni1cdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmgsIHNpemVfdCB2YWx1ZV9sZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4YXR0ciBSZWZlcmVuY2UgQ291bnQgT3ZlcmZsb3cgRml4KioKCk9rYXksIHNvIEkgc2VlIGl0LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cgaW4gdGhlIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSBjb2RlIGNoYW5nZSBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBkb2VzbiYjMzk7dCBleGNlZWQgYEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYYC4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jcmVtZW50ZWQgdGhlIHJlZmNvdW50ICpiZWZvcmUqIHRoZSBjaGVjaywgd2hpY2ggY291bGQgbGVhZCB0byBhbiBvdmVyZmxvdy4gVGhlIGZpeCBjb3JyZWN0cyB0aGlzIGFuZCBhbHNvIGNsZWFycyB0aGUgYE1CRV9SRVVTQUJMRV9CYCBiaXQgaW4gdGhlIG1iY2FjaGUgZW50cnkgd2hlbiB0aGUgbWF4aW11bSByZWZlcmVuY2UgY291bnQgaXMgcmVhY2hlZCwgd2hpY2ggcHJldmVudHMgdGhlIGJsb2NrIGZyb20gYmVpbmcgcmV1c2VkLgoKSSYjMzk7bSB0aGlua2luZywgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBubyB2aXJ0dWFsaXphdGlvbiB0cmlja3MgbmVlZGVkLCBpdCYjMzk7cyBqdXN0IHBsYWluIGV4dDQgb3BlcmF0aW9ucy4gR2l2ZW4gdGhhdCB0aGlzIGRlYWxzIHdpdGggYSBjb3JlIGZpbGVzeXN0ZW0gZmVhdHVyZSwgeGF0dHJzLCBJIHdvdWxkIHNheSBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVmZXJlbmNlIGNvdW50cyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHByaW1lIGFyZWFzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpcz8gSXQgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB3aGljaCB3ZSBuZWVkIHRvIGVuYWJsZSwgYW5kIGdpdmVuIHRoYXQgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIG1iY2FjaGUsIHRoYXQgbXVzdCBhbHNvIGJlIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX01CQ0FDSEVgIGlzIHVzZWQgZm9yIG1iY2FjaGUgYW5kIHZlcmlmeSBpdCBpcyBzZWxlY3RlZCBieSBgRVhUNF9GU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUJDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqSW52ZXN0aWdhdGluZyBNQkNBQ0hFIFNlbGVjdGlvbiB3aXRoaW4gZXh0NCBLY29uZmlnKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyBgTUJDQUNIRWAgaXMgc2VsZWN0ZWQuIFRoaXMgc3VnZ2VzdHMgYSBkZXBlbmRlbmN5IG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGJsb2NrIGNhY2hpbmcgaW4gZXh0NCwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgaXQuIEtub3dpbmcgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSB3aWxsIGhlbHAgbWUgaW4gW2luc2VydCBleHBlcnQtbGV2ZWwgYXBwbGljYXRpb24sIGUuZy4sIGRlYnVnZ2luZyBhIHNwZWNpZmljIHBlcmZvcm1hbmNlIGlzc3VlLCB2ZXJpZnlpbmcgYSBidWlsZCBjb25maWd1cmF0aW9uLCBldGMuXS4gTXkgZm9jdXMgaXMgc2hhcnAsIGFzIEkgZXhwZWN0IHRvIHF1aWNrbHkgcGlucG9pbnQgd2hlcmUgYE1CQ0FDSEVgIGJlY29tZXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBkcml2ZSB0aGF0IGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNQkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMzMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBDYWNoZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCwgYW5kIGl0JiMzOTtzIHBvaW50aW5nIG1lIGRpcmVjdGx5IHRvIHRoZSBjb3JlIG9mIHRoZSBmaWxlIHN5c3RlbSBjYWNoZSBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYGZzL21iY2FjaGUuY2AsIG9yIHNvbWV0aGluZyBjbG9zZWx5IGFuYWxvZ291cyBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmlzbXMgZm9yIG1hbmFnaW5nIHRoZSBtZXRhZGF0YSBjYWNoZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjYWNoZSBlbnRyaWVzIGFyZSBjcmVhdGVkLCBpbnZhbGlkYXRlZCwgYW5kIGFjY2Vzc2VkLiBUaGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlOiBob3cgdGhlIG1iY2FjaGVzIGFyZSBhY2Nlc3NlZCwgaG93IGxvb2t1cHMgd29yayAoYXJlIHRoZXkgaGFzaCB0YWJsZXM/IEItdHJlZXM/KSwgd2hhdCB0aGUgY2FjaGUgcmVwbGFjZW1lbnQgcG9saWNpZXMgYXJlLCBhbmQgaG93IHN5bmNocm9uaXphdGlvbiBpcyBoYW5kbGVkLiBJcyBpdCBsb2NraW5nLWludGVuc2l2ZT8gV2hhdCBhYm91dCBjb25jdXJyZW5jeSBpc3N1ZXM/IERvZXMgaXQgdXNlIGFueSBzcGVjaWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2U/IFVuZGVyc3RhbmRpbmcgdGhlIGdyYW51bGFyIGRldGFpbHMgaGVyZSB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIGRvd24gdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9Mzc9c291cmNlIFwmIzM0O2ZzL2piZDIvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy0zOC1cbmZzL0tjb25maWc6Mzk6Y29uZmlnIEZTX01CQ0FDSEVcbmZzL0tjb25maWctNDAtIyBNZXRhIGJsb2NrIGNhY2hlIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIChleHQyL2V4dDMvZXh0NClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEZTX01CQ0FDSEUqKgoKUmlnaHQsIHNvIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIGBGU19NQkNBQ0hFYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgZnMvZXh0NC9LY29uZmlnYCBzb3VuZHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLiBUaGF0IGZpbGUgc2hvdWxkIGRlZmluZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYW5kLCBieSBhc3NvY2lhdGlvbiwgbWVtb3J5IGJ1ZmZlciBjYWNoaW5nIHdpdGhpbiB0aGF0IGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHF1aWNrbHkgc2NhbiBmb3IgYEZTX01CQ0FDSEVgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBjb250cm9sbGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGU19NQkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzaXRpbmcgZXh0NCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgZm9yIHRoaXMgY3VycmVudCB3b3JrLiBHaXZlbiBteSBleHBlcmllbmNlLCBhIGN1cnNvcnkgZ2xhbmNlIG1pZ2h0IGJlIHN1ZmZpY2llbnQsIGJ1dCBJIG5lZWQgdG8gYmUgZGlsaWdlbnQgYWJvdXQgZXZlcnkgc2V0dGluZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHNlY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUgSSYjMzk7bSBleGFtaW5pbmcsIGJ1dCBJJiMzOTtsbCBhbHNvIHNjYW4gZm9yIGFueXRoaW5nIGFkamFjZW50IHRoYXQgbWlnaHQgaGF2ZSBhbiBpbXBhY3QsIGFueSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBiZSBhdCBwbGF5LiBHb3R0YSBiZSB0aG9yb3VnaC4gSSB3YW50IHRvIHJ1bGUgb3V0IGFueSBzdWJ0bGUgY29uZmxpY3RzIG9yIGRlcGVuZGVuY2llcyAqYmVmb3JlKiBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLiBObyBzdXJwcmlzZXMgdGhpcyB0aW1lIGFyb3VuZC4gSSYjMzk7bGwgcGFydGljdWxhcmx5IGxvb2sgZm9yIGFueSByZWNlbnQgY2hhbmdlcyBvciBjb21taXRzIHRoYXQgbWlnaHQgaGF2ZSBhZmZlY3RlZCB0aGUgZGVmYXVsdCBvcHRpb25zLiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfTUJDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDUxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGU19NQkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBgbWJjYWNoZWAgYW5kIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gZXh0NCYjMzk7cyBgbWJjYWNoZWAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLkkmIzM5O20gbXVsbGluZyBvdmVyIGBtYmNhY2hlYCBhbmQgaXRzIHJvbGUgd2l0aGluIGV4dDQsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBob3cgaXQmIzM5O3MgYWN0dWFsbHkgKnVzZWQqLiBJIGtub3cgaXQgZXhpc3RzLCBjb25jZXB0dWFsbHksIGFzIGEgbWV0YWRhdGEgYmxvY2sgY2FjaGluZyBtZWNoYW5pc20uIEJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGltcGxlbWVudGF0aW9uLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgbWV0YWRhdGEgYmxvY2tzIOKAkyBpbm9kZXMsIGJpdG1hcHMsIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCB0aGUgam91cm5hbCwgdGhlIHdvcmtzLiBIb3cgZG9lcyBgbWJjYWNoZWAgaW50ZXJhY3Qgd2l0aCAqdGhvc2UqPyBJcyBpdCBhY3RpbmcgYXMgYSBkaXJlY3QgY2FjaGUgZm9yIHRob3NlIGJsb2NrcywgcmVkdWNpbmcgdGhlIG5lZWQgZm9yIGRpc2sgSS9PIHdoZW4gdGhleSBhcmUgZnJlcXVlbnRseSBhY2Nlc3NlZD8gT3IgaXMgaXQgbW9yZSBvZiBhIGJ1ZmZlciwgbWF5YmUgYSBzdGFnaW5nIGFyZWEsIGZvciBibG9jayBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBvcGVyYXRpb25zIGJlZm9yZSB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIGFyZSB1cGRhdGVkIG9uIGRpc2s/CgpJIGtub3cgZXh0NCBlbXBsb3lzIHNldmVyYWwgc3RyYXRlZ2llcyB0byBvcHRpbWl6ZSBtZXRhZGF0YSBhY2Nlc3MsIGxpa2UgYmxvY2sgZ3JvdXAgbG9jYWxpdHkgYW5kIGpvdXJuYWxpbmcuIEJ1dCB3aGVyZSBkb2VzIGBtYmNhY2hlYCBmaXQgaW50byAqdGhhdCogcGljdHVyZT8gSXMgaXQgdXNlZCBmb3IgZmFzdGVyIGlub2RlIGxvb2t1cHMsIG9yIHBlcmhhcHMgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBvZiBuZXcgYmxvY2tzIGluIHNwZWNpZmljIGJsb2NrIGdyb3Vwcywgb3IgYm90aD8KCkkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSB0eXBpY2FsIGV4dDQgcmVhZCBhbmQgd3JpdGUgcGF0aHMuIFdoZXJlIGRvZXMgdGhlIGBtYmNhY2hlYCBnZXQgY2FsbGVkIHdpdGhpbiB0aG9zZSBwYXRocz8gQXJlIHRoZXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRpZWQgaW50byBpdD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgYG1iY2FjaGVgIG9wZXJhdGlvbnMgKGdldCwgcHV0LCB1cGRhdGUgZXRjKS4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgd2hlbiBibG9ja3MgYXJlIGNhY2hlZD8KRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgaG93IGBtYmNhY2hlYCByZWR1Y2VzIGxhdGVuY3kgZm9yIG1ldGFkYXRhIG9wZXJhdGlvbnMgd2l0aGluIGV4dDQsIGFuZCB3aGF0IHRoZSBjb3JlIGFsZ29yaXRobXMgYXJlLiBBbmQgSSBuZWVkIHRvIGdldCB0aGUgJiMzNDtiaWcgcGljdHVyZSYjMzQ7IG9mIHRoZSByb2xlIG9mIGBtYmNhY2hlYCBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgZXh0NCYjMzk7cyBvdmVyYWxsIHBlcmZvcm1hbmNlIHN0cmF0ZWdpZXMsIGFuZCBtYXliZSBob3cgaXQgYWZmZWN0cyB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHdvcmtsb2Fkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWJjYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTEwNDg9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTI0OS0gKi9cbmZzL2V4dDQvZXh0NC5oOjEyNTA6I2RlZmluZSBFWFQ0X01PVU5UX05PX01CQ0FDSEVcdFx0MHgwMDAwMSAvKiBEbyBub3QgdXNlIG1iY2FjaGUgKi9cbmZzL2V4dDQvZXh0NC5oLTEyNTEtI2RlZmluZSBFWFQ0X01PVU5UX0dSUElEXHRcdDB4MDAwMDRcdC8qIENyZWF0ZSBmaWxlcyB3aXRoIGRpcmVjdG9yeSYjMzk7cyBncm91cCAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNzEyLVx0T3B0X2Rpc2NhcmQsIE9wdF9ub2Rpc2NhcmQsIE9wdF9pbml0X2l0YWJsZSwgT3B0X25vaW5pdF9pdGFibGUsXG5mcy9leHQ0L3N1cGVyLmM6MTcxMzpcdE9wdF9tYXhfZGlyX3NpemVfa2IsIE9wdF9ub2pvdXJuYWxfY2hlY2tzdW0sIE9wdF9ub21iY2FjaGUsXG5mcy9leHQ0L3N1cGVyLmMtMTcxNC1cdE9wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBPcHRfbWJfb3B0aW1pemVfc2Nhbixcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTc2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGV4dDRfcGFyYW1fc3BlY3NbXSA9IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTg0NS1cdGZzcGFyYW1fZmxhZ1x0KFwmIzM0O2lubGluZWNyeXB0XCYjMzQ7LFx0XHRPcHRfaW5saW5lY3J5cHQpLFxuZnMvZXh0NC9zdXBlci5jOjE4NDY6XHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtub21iY2FjaGVcJiMzNDssXHRcdE9wdF9ub21iY2FjaGUpLFxuZnMvZXh0NC9zdXBlci5jOjE4NDc6XHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtub19tYmNhY2hlXCYjMzQ7LFx0XHRPcHRfbm9tYmNhY2hlKSxcdC8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXG5mcy9leHQ0L3N1cGVyLmMtMTg0OC1cdGZzcGFyYW1fZmxhZ1x0KFwmIzM0O3ByZWZldGNoX2Jsb2NrX2JpdG1hcHNcJiMzNDssXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk0Mi1cdHtPcHRfanFmbXQsIDAsIE1PUFRfUUZNVH0sXG5mcy9leHQ0L3N1cGVyLmM6MTk0MzpcdHtPcHRfbm9tYmNhY2hlLCBFWFQ0X01PVU5UX05PX01CQ0FDSEUsIE1PUFRfU0VUfSxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ0LVx0e09wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBFWFQ0X01PVU5UX05PX1BSRUZFVENIX0JMT0NLX0JJVE1BUFMsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTY1NTg9c3RhdGljIGludCBfX2V4dDRfcmVtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTY2NTctXHRpZiAoKHNiaS1cdTAwM2VzX21vdW50X29wdCBeIG9sZF9vcHRzLnNfbW91bnRfb3B0KSBcdTAwMjYgRVhUNF9NT1VOVF9OT19NQkNBQ0hFKSB7XG5mcy9leHQ0L3N1cGVyLmM6NjY1ODpcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDtjYW4mIzM5O3QgZW5hYmxlIG5vbWJjYWNoZSBkdXJpbmcgcmVtb3VudFwmIzM0Oyk7XG5mcy9leHQ0L3N1cGVyLmMtNjY1OS1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNTYtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5mcy9leHQ0L3hhdHRyLmM6NTc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWJjYWNoZS5oXHUwMDNlXG5mcy9leHQ0L3hhdHRyLmMtNTgtI2luY2x1ZGUgXHUwMDNjbGludXgvcXVvdGFvcHMuaFx1MDAzZVxuLS1cbmZzL2V4dDQveGF0dHIuYz00MjQ9c3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2lnZXQoc3RydWN0IGlub2RlICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgZWFfaW5vLFxuLS1cbmZzL2V4dDQveGF0dHIuYy00NzAtXG5mcy9leHQ0L3hhdHRyLmM6NDcxOi8qIFJlbW92ZSBlbnRyeSBmcm9tIG1iY2FjaGUgd2hlbiBFQSBpbm9kZSBpcyBnZXR0aW5nIGV2aWN0ZWQgKi9cbmZzL2V4dDQveGF0dHIuYy00NzItdm9pZCBleHQ0X2V2aWN0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjA4MC1cdFx0XHRcdFx0LypcbmZzL2V4dDQveGF0dHIuYzoyMDgxOlx0XHRcdFx0XHQgKiBVbmRvIGV2ZXJ5dGhpbmcgYW5kIGNoZWNrIG1iY2FjaGVcbmZzL2V4dDQveGF0dHIuYy0yMDgyLVx0XHRcdFx0XHQgKiBhZ2Fpbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipFeGFtaW5pbmcgdGhlIEVYVDQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJdCBzZWVtcyBJIHJlbWVtYmVyIGBGU19NQkNBQ0hFYCBiZWluZyBzb21laG93IHRpZWQgdG8gYEVYVDRfRlNgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gV2hlcmUgd2FzIHRoYXQgc2V0dGluZyBkZWZpbmVkIGFnYWluPyBBaCwgeWVzLCBpdCYjMzk7cyBpbiBgZnMvZXh0NC9LY29uZmlnYC4gTGV0IG1lIGdvIGJhY2sgYW5kIGhhdmUgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoYXQgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWV0YWRhdGEgYmxvY2sgY2FjaGUgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZTX01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEZTX01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlNfTUJDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NzEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIERpdmUgZm9yIGBGU19NQkNBQ0hFYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBvdXQgYWJvdXQgYEZTX01CQ0FDSEVgLiBUaGF0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBkZWZpbmVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBUaGVyZWZvcmUsIG15IGZpcnN0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBhbnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBwcm9tcHQgdGV4dCB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoaXMgb3B0aW9uICpkb2VzKiB0byB1c2Vycy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBgRlNfTUJDQUNIRWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9Mzc9c291cmNlIFwmIzM0O2ZzL2piZDIvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy0zOC1cbmZzL0tjb25maWc6Mzk6Y29uZmlnIEZTX01CQ0FDSEVcbmZzL0tjb25maWctNDAtIyBNZXRhIGJsb2NrIGNhY2hlIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIChleHQyL2V4dDMvZXh0NClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzkuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvLi4uIHdlbGwsIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgKnlldCosIGJ1dCBvZnRlbiBLY29uZmlnIGZpbGVzIGRlYWwgd2l0aCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24uIExpbmUgMzkgY291bGQgYmUgYSBkZXBlbmRlbmN5IGRlZmluaXRpb24sIGFuIG9wdGlvbiwgb3IgYSBjb21tZW50IHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB0aGVyZSB0byBwaWVjZSB0b2dldGhlciB0aGUgZ3JlYXRlciBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzb3VyY2UgXCYjMzQ7ZnMvZXh0Mi9LY29uZmlnXCYjMzQ7XG4gIDM2Olx0c291cmNlIFwmIzM0O2ZzL2V4dDQvS2NvbmZpZ1wmIzM0O1xuICAzNzpcdHNvdXJjZSBcJiMzNDtmcy9qYmQyL0tjb25maWdcJiMzNDtcbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgRlNfTUJDQUNIRVxuICA0MDpcdCMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpXG4gIDQxOlx0XHR0cmlzdGF0ZVxuICA0MjpcdFx0ZGVmYXVsdCB5IGlmIEVYVDJfRlM9eSBcdTAwMjZcdTAwMjYgRVhUMl9GU19YQVRUUlxuICA0MzpcdFx0ZGVmYXVsdCB5IGlmIEVYVDRfRlM9eVxuICA0NDpcdFx0ZGVmYXVsdCBtIGlmIEVYVDJfRlNfWEFUVFIgfHwgRVhUNF9GU1xuICA0NTpcdFxuICA0NjpcdHNvdXJjZSBcJiMzNDtmcy9qZnMvS2NvbmZpZ1wmIzM0O1xuICA0NzpcdFxuICA0ODpcdHNvdXJjZSBcJiMzNDtmcy94ZnMvS2NvbmZpZ1wmIzM0O1xuICA0OTpcdHNvdXJjZSBcJiMzNDtmcy9nZnMyL0tjb25maWdcJiMzNDtcbiAgNTA6XHRzb3VyY2UgXCYjMzQ7ZnMvb2NmczIvS2NvbmZpZ1wmIzM0O1xuICA1MTpcdHNvdXJjZSBcJiMzNDtmcy9idHJmcy9LY29uZmlnXCYjMzQ7XG4gIDUyOlx0c291cmNlIFwmIzM0O2ZzL25pbGZzMi9LY29uZmlnXCYjMzQ7XG4gIDUzOlx0c291cmNlIFwmIzM0O2ZzL2YyZnMvS2NvbmZpZ1wmIzM0O1xuICA1NDpcdHNvdXJjZSBcJiMzNDtmcy96b25lZnMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzMAoJCQkJCQkJb3V0cHV0OiAxMTYKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgWGF0dHIgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYEZTX01CQ0FDSEVgIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIGBFWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBtZWFuaW5nIG15IHByaW1hcnkgZm9jdXMgaXMgc29sZWx5IG9uIGBFWFQ0X0ZTYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGEgdG9wLWxldmVsIGNvbmZpZywgdGhhbmtmdWxseSwgc28gbm8gZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0IHRoZXJlLgoKTXkgaW1tZWRpYXRlIGxpc3Qgb2YgY29uZmlncyBpczoKYEVYVDRfRlNgCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHhhdHRyIG1hbmlwdWxhdGlvbiwgSSBzZWUgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGdsYW5jZWQgYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gaXQgY2FuJiMzOTt0IGJlIHVzZWQgZXh0ZXJuYWxseSBhbmQgZG9lc24mIzM5O3Qgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW4gdGhpcyBjb250ZXh0LiBgZXh0NF94YXR0cl9zZXRgIGFwcGVhcnMgdG8gYmUgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCB3aGlsZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBpcyB1c2VkIGluIHRoZSBwcmVzZW5jZSBvZiBhIHRyYW5zYWN0aW9uIGhhbmRsZS4gQm90aCBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nLgoKTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZiwgSSBjYW4gc2VlIHdoYXQgaXMgaGFwcGVuaW5nLiBUaGUgcGF0Y2ggY29ycmVjdHMgYSBidWcgcmVsYXRlZCB0byB0aGUgeGF0dHIgcmVmZXJlbmNlIGNvdW50LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQgKmJlZm9yZSogY2hlY2tpbmcgaWYgaXQgaGFkIHJlYWNoZWQgdGhlIG1heGltdW0sIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gaW50ZWdlciBvdmVyZmxvdy4gVGhlIHVwZGF0ZWQgdmVyc2lvbiBjaGVja3MgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBhdCBpdHMgbWF4aW11bSAqYmVmb3JlKiBpbmNyZW1lbnRpbmcuIElmIGl0IGlzIGF0IHRoZSBtYXhpbXVtLCB0aGUgcHJvY2VzcyB0aGVuIGNsZWFycyB0aGUgYE1CRV9SRVVTQUJMRV9CYCBmbGFnIG9uIHRoZSBjYWNoZSBlbnRyeSB0byBwcmV2ZW50IHRoZSBidWZmZXIgZnJvbSBiZWluZyByZXVzZWQsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGZpeC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgaW1wYWN0aW5nIHVzZXJzcGFjZSB0aHJvdWdoIGBzZXR4YXR0cmAgc3lzY2FsbHMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIGEgdXNlcmxhbmQgcHJvZ3JhbSBhbmQgaXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB1cGRhdGVkIGNvbmZpZywgdGhlbiwgaXM6CmBFWFQ0X0ZTYAoKRm9jdXMgc3ltYm9sczoKYGV4dDRfeGF0dHJfc2V0YApgZXh0NF94YXR0cl9zZXRfaGFuZGxlYAoKSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU3OjUxLjQ0NjE1MTU2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTQ0NjAwODkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTc6NTEuNDQ2MTU5NDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMzNTU4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OWJkNDUyYzU4Yzg5ZTEzNzliNjZhY2M1OTcxNjkzODVlNzZiZThkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTY6NTc6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXFxuaW5kZXggOTgyYTFmODMxZTIyOC4uM2MxYmI1NDdiMmY1NCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMjA3NSwxMiArMjA3NSwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHQgKiBzdGFibGUgc28gd2UgY2FuIGNoZWNrIHRoZSBhZGRpdGlvbmFsXFxuIFxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSBmaXRzLlxcbiBcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0cmVmID0gbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVxcdTAwM2VoX3JlZmNvdW50KSArIDE7XFxuLVxcdFxcdFxcdFxcdGlmIChyZWYgXFx1MDAzZSBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkge1xcbitcXHRcXHRcXHRcXHRyZWYgPSBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXFx1MDAzZWhfcmVmY291bnQpO1xcbitcXHRcXHRcXHRcXHRpZiAocmVmIFxcdTAwM2U9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7XFxuIFxcdFxcdFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdFxcdFxcdCAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZVxcbiBcXHRcXHRcXHRcXHRcXHQgKiBhZ2Fpbi5cXG4gXFx0XFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdFxcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXFx1MDAyNmNlLVxcdTAwM2VlX2ZsYWdzKTtcXG4gXFx0XFx0XFx0XFx0XFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xcbiBcXHRcXHRcXHRcXHRcXHRkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgRVhUNF9DMkIoRVhUNF9TQihzYiksXFxuQEAgLTIwOTEsNiArMjA5Miw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdG5ld19iaCA9IE5VTEw7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gaW5zZXJ0ZWQ7XFxuIFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0cmVmKys7XFxuIFxcdFxcdFxcdFxcdEJIRFIobmV3X2JoKS1cXHUwMDNlaF9yZWZjb3VudCA9IGNwdV90b19sZTMyKHJlZik7XFxuIFxcdFxcdFxcdFxcdGlmIChyZWYgPT0gRVhUNF9YQVRUUl9SRUZDT1VOVF9NQVgpXFxuIFxcdFxcdFxcdFxcdFxcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXFx1MDAyNmNlLVxcdTAwM2VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTc6NTEuOTIwNTA2MDU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg0OTcxNjQxNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWJkNDUyYzU4Yzg5ZTEzNzliNjZhY2M1OTcxNjkzODVlNzZiZThkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxNjo1Nzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uM2MxYmI1NDdiMmY1NCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMjA3NSwxMiArMjA3NSwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICogc3RhYmxlIHNvIHdlIGNhbiBjaGVjayB0aGUgYWRkaXRpb25hbFxuIFx0XHRcdFx0ICogcmVmZXJlbmNlIGZpdHMuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHJlZiA9IGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50KSArIDE7XG4tXHRcdFx0XHRpZiAocmVmIFx1MDAzZSBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkge1xuK1x0XHRcdFx0cmVmID0gbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVx1MDAzZWhfcmVmY291bnQpO1xuK1x0XHRcdFx0aWYgKHJlZiBcdTAwM2U9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZVxuIFx0XHRcdFx0XHQgKiBhZ2Fpbi5cbiBcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXHUwMDI2Y2UtXHUwMDNlZV9mbGFncyk7XG4gXHRcdFx0XHRcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbiBcdFx0XHRcdFx0ZHF1b3RfZnJlZV9ibG9jayhpbm9kZSxcbiBcdFx0XHRcdFx0XHRcdCBFWFQ0X0MyQihFWFQ0X1NCKHNiKSxcbkBAIC0yMDkxLDYgKzIwOTIsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRuZXdfYmggPSBOVUxMO1xuIFx0XHRcdFx0XHRnb3RvIGluc2VydGVkO1xuIFx0XHRcdFx0fVxuK1x0XHRcdFx0cmVmKys7XG4gXHRcdFx0XHRCSERSKG5ld19iaCktXHUwMDNlaF9yZWZjb3VudCA9IGNwdV90b19sZTMyKHJlZik7XG4gXHRcdFx0XHRpZiAocmVmID09IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKVxuIFx0XHRcdFx0XHRjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsIFx1MDAyNmNlLVx1MDAzZWVfZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTc6NTEuOTIwNTA3ODY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3NzE4MzUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgZXh0NCB4YXR0ciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2V4dDQveGF0dHIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBmdW5jdGlvbi4gVGhlIGNvZGUgc25pcHBldCBJJ20gc2VlaW5nIGludm9sdmVzIGEgY2hhbmdlIGluIGhvdyB3ZSBoYW5kbGUgeGF0dHIgYmxvY2sgcmVmZXJlbmNlIGNvdW50cyB3aGVuIHRoZXkgaGl0IHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUsIGBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWGAuIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQgKmJlZm9yZSogdGhlIGNoZWNrLCBidXQgbm93IGl0IHNlZW1zIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgcmVmY291bnQgKmFscmVhZHkqIGVxdWFscyB0aGUgbWF4aW11bS4gVGhlIGtleSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBpbmNyZW1lbnQgd2l0aCBhbiBlcXVhbGl0eSBjaGVjayBhbmQgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsIFx1MDAyNmNlLVx1MDAzZWVfZmxhZ3MpYCB3aXRoaW4gdGhhdCBgaWZgIGJsb2NrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgcmV1c2Ugb2YgYSBidWZmZXIuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgYSBuZXcgcmVmZXJlbmNlIGlzIGF0dGVtcHRlZCB3aGVuIHRoZSBjb3VudCBpcyBhdCB0aGUgbWF4aW11bSwgYW5kIGluc3RlYWQgb2YgZmFpbGluZywgd2UncmUgY2xlYXJpbmcgYSBmbGFnIHJlbGF0ZWQgdG8gcmV1c2FiaWxpdHkuIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGV4dDQgeGF0dHIgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aGVuIHdlIGhpdCB0aGUgcmVmY291bnQgbGltaXQgd2hpbGUgYWRkaW5nIGEgbmV3IHJlZmVyZW5jZS4gSXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseSwgYXMgYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIHRoaXMgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzIGZvciBidWdzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNoYW5nZSBpcyBjb3JyZWN0IGFuZCBub3QgaW50cm9kdWNlIGEgcmVncmVzc2lvbiwgYW5kIGl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUuIEkgcmVtZW1iZXIgYEVYVDRfRlNgIGlzIHRoZSBtYWluIG9uZSwgYW5kIEkgKnRoaW5rKiBgRVhUNF9GU19YQVRUUmAgaXMgYW5vdGhlciBvbmUsIHRob3VnaCBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3Igc2VsZWN0ZWQgYXV0b21hdGljYWxseS4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhpcyBpbiBgZnMvZXh0NC9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MDAuMzk3Njk1MzEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzg2MzcyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNfWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODowMC41NzU1Njg3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzU2ODY4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRVhUNCBDb25maWd1cmF0aW9uIElzc3VlKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYSBwb3NzaWJsZSBpc3N1ZSBoZXJlIHdpdGggYW4gYEVYVDRfRlNfWEFUVFJgIHNldHRpbmcuIFRoYXQgbmFtZSBkb2Vzbid0IGltbWVkaWF0ZWx5IHJpbmcgYSBiZWxsLCBvciBtYXliZSBpdCdzIGp1c3QgYmVlbiByZW5hbWVkIGluIGEgbW9yZSByZWNlbnQga2VybmVsIHZlcnNpb24/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJJ2xsIHNlYXJjaCBmb3IgYFhBVFRSYCBhbmQgc2VlIHdoYXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGF2YWlsYWJsZSBhbmQgd2hldGhlciB0aGUgb2xkIG5hbWluZyBjb252ZW50aW9uIGlzIG5vdyBkZXByZWNhdGVkIG9yIGludGVncmF0ZWQgdW5kZXIgYSBicm9hZGVyIGBFWFQ0X0ZTYCBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCBvciBhIG1vcmUgZnVuZGFtZW50YWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtJ3MgY29uZmlndXJhdGlvbiwgc28gSSBzaG91bGQgYmUgcXVpY2sgdG8gZmluZCB0aGUgcmlnaHQgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjAzLjYxMTI1ODM1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM3NTczOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODowMy42ODg2NDE2MTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU3NzQ1Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRVhUNCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgS2NvbmZpZyBmaWxlLCBvZiBjb3Vyc2UuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEknbGwganVzdCBvcGVuIHVwIGBmcy9leHQ0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQgaW5pdGlhbGx5OyBsZXQncyBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlLiBBbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIGBncmVwYCBmb3IgYEVYVDRfRlNgIGNvdWxkIGJlIGEgZmFzdGVyIHdheSB0byBmaW5kIHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMgb3IgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBpZiB0aGUgZmlsZSBpcyB2ZXJ5IGxhcmdlIG9yIGNvbXBsZXgsIHNvIEkgbWlnaHQganVzdCBzdGFydCB3aXRoIHRoYXQgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBmaWxlLiBUaGF0IHdvdWxkIGJlIHRoZSBlZmZpY2llbnQgYXBwcm9hY2ggZm9yIGEgcHJvamVjdCBvZiB0aGlzIG5hdHVyZSwgZ2l2ZW4gdGhlIHRpbWUgY29uc3RyYWludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODowNy45NDYzODk1NjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxMzczOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjA4LjAzMjUzMjM5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzODYzNzA3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVYVDQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgRVhUNF9GU2AgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBjb3JlLiBOb3csIHdoZW4gZGVhbGluZyB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYC4gVGhvc2UgY291bGQgZGVmaW5pdGVseSBiZSByZWxldmFudC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIGlmIGl0J3MgZXhwb3J0ZWQgb3IgaWYgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IGhvdyBpdCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSwgYW5kIHRoZXJlZm9yZSBob3cgeGF0dHJzIGNhbiBiZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MTYuNDE4OTA2MDczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3OTM2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xMjcyPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyOTQtXFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTI5NTpcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xcbmZzL2V4dDQveGF0dHIuYy0xMjk2LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4OTg9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzoxODk5OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5MDAtXFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE5NDQtXFx0XFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTk0NTpcXHRcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxcbmZzL2V4dDQveGF0dHIuYy0xOTQ2LVxcdFxcdFxcdCAqIGJsb2NrXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjM1MT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQzNC1cXHRcXHRlbHNlIGlmICghYnMucy5ub3RfZm91bmQpXFxuZnMvZXh0NC94YXR0ci5jOjI0MzU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQzNi1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI0NTEtXFx0XFx0XFx0aS52YWx1ZSA9IE5VTEw7XFxuZnMvZXh0NC94YXR0ci5jOjI0NTI6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQ1My1cXHRcXHR9IGVsc2UgaWYgKGVycm9yID09IC1FTk9TUEMpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNDYwLVxcdFxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjQ2MTpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2YnMpO1xcbmZzL2V4dDQveGF0dHIuYy0yNDYyLVxcdFxcdFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIWlzLnMubm90X2ZvdW5kKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjYwNz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI2NzItXFx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNjczOlxcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIGJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjY3NC1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjE2LjYyNTcwNzc2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI4MzU4MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYYXR0ciBCbG9jayBTZXR0aW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaGlkZGVuIGZyb20gZGlyZWN0IGV4dGVybmFsIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaG8ncyB1c2luZyB0aGlzIHRoaW5nP1wiIExldCdzIHNlZS4uLiB0aGUgY29kZSB0ZWxscyBtZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhbmQgYGV4dDRfeGF0dHJfbW92ZV90b19ibG9ja2AgYXJlIHRoZSBjYWxsZXJzLiBGaW5lLCBnb29kIHRvIGtub3cuIE5vdywgc2luY2UgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgcHJvY2VzcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gR290dGEgdW5kZXJzdGFuZCB3aGF0ICppdCdzKiBkb2luZyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBkb2VzLiBUaGF0IGNhbGwgcGF0aCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy4gVGltZSB0byBkaWcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODoyMC4wNTQwNjg5ODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg0MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3NldF9oYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yMzIwPXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfeGF0dHJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjMzOC0vKlxcbmZzL2V4dDQveGF0dHIuYzoyMzM5OiAqIGV4dDRfeGF0dHJfc2V0X2hhbmRsZSgpXFxuZnMvZXh0NC94YXR0ci5jLTIzNDAtICpcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMzUwPWludFxcbmZzL2V4dDQveGF0dHIuYzoyMzUxOmV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCxcXG5mcy9leHQ0L3hhdHRyLmMtMjM1Mi1cXHRcXHQgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTAzPWludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjUzMi0gKlxcbmZzL2V4dDQveGF0dHIuYzoyNTMzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxcbmZzL2V4dDQveGF0dHIuYy0yNTM0LSAqIGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gaXMgYSBmaWxlc3lzdGVtIHRyYW5zYWN0aW9uIGJ5IGl0c2VsZi5cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTM5PWV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NjItXFxuZnMvZXh0NC94YXR0ci5jOjI1NjM6XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjIwLjIxMjkxNzkxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAwMjY5NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgZXh0NCBYQVRUUiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpIGFyZSBoYW5kbGVkIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkndmUgZ290IGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9zZXRgIGluIG15IHNpZ2h0cywgYW5kIGl0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgdGhhdCB0aGV5J3JlIGJvdGggZGVjbGFyZWQgbm9uLXN0YXRpYy4gVGhhdCB0ZWxscyBtZSB0aGV5J3JlIGxpa2VseSBkZXNpZ25lZCBmb3IgdXNlIG91dHNpZGUgdGhlaXIgaW1tZWRpYXRlIHNvdXJjZSBmaWxlLCBwZXJoYXBzIGZvciBzb21lIHNvcnQgb2YgbW9kdWxhcml0eSBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBTaW5jZSB0aGV5J3JlIG5vdCBzdGF0aWMsIHRoZSBzY29wZSBvZiB0aGUgbWV0aG9kIGlzIHdpZGVyIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC5cblxuTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gYGV4dDRfeGF0dHJfc2V0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBYQVRUUiBmdW5jdGlvbmFsaXR5LiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIGRpZyBpbnRvIGl0cyBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGRvaW5nIG9uIGEgZGVlcGVyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MjMuNTEzMTkwNzQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODI5ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTkyOD1zdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtOTM4LVxcbmZzL2V4dDQveGF0dHIuYzo5Mzk6aW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuYy05NDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsb2NrX2JoLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE1Nzg9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTYyOC1cXG5mcy9leHQ0L3hhdHRyLmM6MTYyOTpzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuZnMvZXh0NC94YXR0ci5jLTE2MzAtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoICpzLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xOTYyLVxcdFxcdFxcdGVhX2JkZWJ1Zyhicy1cXHUwMDNlYmgsIFxcXCJtb2RpZnlpbmcgaW4tcGxhY2VcXFwiKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTk2MzpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5NjQtXFx0XFx0XFx0XFx0XFx0ICAgICBlYV9pbm9kZSwgdHJ1ZSAvKiBpc19ibG9jayAqLyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTk5MC1cXHRcXHQgKiBJZiBleGlzdGluZyBlbnRyeSBwb2ludHMgdG8gYW4geGF0dHIgaW5vZGUsIHdlIG5lZWRcXG5mcy9leHQ0L3hhdHRyLmM6MTk5MTpcXHRcXHQgKiB0byBwcmV2ZW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KCkgZnJvbSBkZWNyZW1lbnRpbmdcXG5mcy9leHQ0L3hhdHRyLmMtMTk5Mi1cXHRcXHQgKiByZWYgY291bnQgb24gaXQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gdGhlXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjAzMS1cXG5mcy9leHQ0L3hhdHRyLmM6MjAzMjpcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yMDMzLVxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBpc19ibG9jayAqLyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjI1Nj1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjc2LVxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjI3NzpcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yMjc4LVxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogaXNfYmxvY2sgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIzMjA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMzM4LS8qXFxuZnMvZXh0NC94YXR0ci5jOjIzMzk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcXG5mcy9leHQ0L3hhdHRyLmMtMjM0MC0gKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIzNTA9aW50XFxuZnMvZXh0NC94YXR0ci5jOjIzNTE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxcbmZzL2V4dDQveGF0dHIuYy0yMzUyLVxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIzODgtXFxuZnMvZXh0NC94YXR0ci5jOjIzODk6XFx0XFx0Y3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMzkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTAyLVxcbmZzL2V4dDQveGF0dHIuYzoyNTAzOmludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXFxuZnMvZXh0NC94YXR0ci5jLTI1MDQtXFx0XFx0XFx0ICAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cylcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTE5LVxcdH0gZWxzZSB7XFxuZnMvZXh0NC94YXR0ci5jOjI1MjA6XFx0XFx0KmNyZWRpdHMgPSBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLCBiaCxcXG5mcy9leHQ0L3hhdHRyLmMtMjUyMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmFsdWVfbGVuLCBpc19jcmVhdGUpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1MzAtLypcXG5mcy9leHQ0L3hhdHRyLmM6MjUzMTogKiBleHQ0X3hhdHRyX3NldCgpXFxuZnMvZXh0NC94YXR0ci5jLTI1MzItICpcXG5mcy9leHQ0L3hhdHRyLmM6MjUzMzogKiBMaWtlIGV4dDRfeGF0dHJfc2V0X2hhbmRsZSwgYnV0IHN0YXJ0IGZyb20gYW4gaW5vZGUuIFRoaXMgZXh0ZW5kZWRcXG5mcy9leHQ0L3hhdHRyLmMtMjUzNC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjUzOD1pbnRcXG5mcy9leHQ0L3hhdHRyLmM6MjUzOTpleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU0MC1cXHQgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sIGludCBmbGFncylcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTUxLXJldHJ5OlxcbmZzL2V4dDQveGF0dHIuYzoyNTUyOlxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZSwgdmFsdWVfbGVuLCBmbGFncyBcXHUwMDI2IFhBVFRSX0NSRUFURSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU1My1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNyZWRpdHMpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NjItXFxuZnMvZXh0NC94YXR0ci5jOjI1NjM6XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjIzLjYwMTQ5NTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjE3MTk1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYYXR0ciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBzZXR0aW5nIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBmZWVscyBsaWtlIGEgc29saWQgcGxhY2UgdG8gc3RhcnQ7IGl0J3MgYSBnb29kIHByaW1hcnkgc3ltYm9sIHRvIGZvbGxvdy4gTXkgbmV4dCBtb3ZlIGlzIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIG9idmlvdXMgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gc2V0dGluZyB0aGVzZSBhdHRyaWJ1dGVzPyBBaCwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAganVtcHMgb3V0IGFzIGFub3RoZXIgbGlrZWx5IGNhbmRpZGF0ZS4gQW5kIHdoYXQgYWJvdXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YD8gSXQncyBzdGF0aWMsIHNvIHRoYXQncyBvdXQsIHdlIGNhbid0IGRpcmVjdGx5IHVzZSB0aGF0IGFzIG91ciBmb2N1cy5cblxuVGltZSB0byByZXZpc2l0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIGBFWFQ0X0ZTYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCB3ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGF0LiBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgbGlrZSBgRVhUNF9GU19YQVRUUmAgZGlyZWN0bHkuIFdhaXQgYSBtb21lbnQhIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb21waWxhdGlvbiwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGZzL2V4dDQvTWFrZWZpbGVgIHRvIHNlZSBleGFjdGx5IGhvdyBgeGF0dHIuY2AgaXMgY29tcGlsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyBtaWdodCBnaXZlIHVzIGEgZ29vZCBpbmRpY2F0aW9uIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MjguMTYzMjE3OTA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIzNjQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTExLVxcdFxcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcXHRcXHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcXHRcXHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVxcdCs9IGFjbC5vXFxuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXFx0XFx0Kz0geGF0dHJfc2VjdXJpdHkub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcXHRcXHRcXHRcXHQrPSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODoyOC4yMzg0NTg3MThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNDQ4MDg2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVYVDQgWEFUVFIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGB4YXR0ci5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgaXQgaW1wbGllcyB0aGF0IGVuYWJsaW5nIGBFWFQ0X0ZTYCBzaG91bGQgYmUgdGhlIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhdCBsZWFzdCBhdCB0aGUgYmFzZSBsZXZlbC5cblxuTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byB2ZXJpZnkgaWYgd2UgbmVlZCBgRVhUNF9GU19TRUNVUklUWWAgb3IgYEVYVDRfRlNfUE9TSVhfQUNMYCB0byBhY3R1YWxseSAqdXNlKiBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbiB0byBjb25maXJtIHdoaWNoIGNvbmZpZyBmbGFncyBhcmUgdHJ1bHkgcmVxdWlyZWQuXG5cbkFscmlnaHQsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgY2FsbGVkIGJ5IGJvdGggYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYW5kIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBEaWdnaW5nIGRlZXBlciwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgZXh0NF94YXR0cl9zZXRgLCBhbmQgKnRoYXQqIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGV4dDRfeGF0dHJfdHJ1c3RlZF9zZXRgLCBgZXh0NF94YXR0cl91c2VyX3NldGAsIGBleHQ0X3hhdHRyX3NlY3VyaXR5X3NldGAsIGFuZCBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCAqYW55KiB4YXR0ciBzZXQgb3BlcmF0aW9uIHNob3VsZCB1bHRpbWF0ZWx5IHJlYWNoIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIHdoaWNoIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbi5cblxuR2l2ZW4gdGhhdCBjaGFpbiBvZiBkZXBlbmRlbmNpZXMsIGl0IGxvb2tzIGxpa2UganVzdCBlbmFibGluZyBgRVhUNF9GU2Agc2hvdWxkIGluZGVlZCBiZSBzdWZmaWNpZW50IHRvIGdldCBldmVyeXRoaW5nIGxpbmtlZCBjb3JyZWN0bHkuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIGZvciBjb25maXJtYXRpb246IGBleHQ0X3hhdHRyX3NldGAsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgcG90ZW50aWFsbHkgYGV4dDRfeGF0dHJfdXNlcl9zZXRgIGFuZCBgZXh0NF94YXR0cl90cnVzdGVkX3NldGAuXG5cbkkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGNvbmZpcm0gdGhpcyBpcyB0byBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9leHQ0L3hhdHRyX3VzZXIuY2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgdXNlci1zcGFjZSBlbnRyeSBwb2ludHMgYXJlLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIHRvIGNvbmZpcm0gaG93IHRoZSB4YXR0ciBzeXN0ZW0gaXMgZW50ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODozOC41ODMyNjk4OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODYzNDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3VzZXJfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQveGF0dHJfdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHJfdXNlci5jPTMyPXN0YXRpYyBpbnRcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYzozMzpleHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTM0LVxcdFxcdCAgICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2V4dDQveGF0dHJfdXNlci5jPTQ1PWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyID0ge1xcbi0tXFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDgtXFx0LmdldFxcdD0gZXh0NF94YXR0cl91c2VyX2dldCxcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0OTpcXHQuc2V0XFx0PSBleHQ0X3hhdHRyX3VzZXJfc2V0LFxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjM4Ljc1MTkxMjAzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIwMDg1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgdGhlIHhhdHRyIFNldHRpbmcgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgZXh0NF94YXR0cl91c2VyX3NldGAgaXMgc3RhdGljIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgbWVhbnMgaWYgSSdtIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBhbmFseXplIGluIHJlbGF0aW9uIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGBleHQ0X3hhdHRyX3NldGAgaXMgZGVmaW5pdGVseSB0aGUgYmV0dGVyIGNhbmRpZGF0ZSB0byBmb2N1cyBvbi4gSXQgaGFzIHRvIGJlLCBnaXZlbiB0aGUgb3RoZXIgb25lJ3Mgc3RhdGljIG5hdHVyZS4gTm93LCBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIHRvIHNlZSBpZiBgZXh0NF94YXR0cl9zZXRgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIG9yIHVzZXJsYW5kLiBVbmRlcnN0YW5kaW5nIGl0cyBleHBvcnQgc3RhdHVzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyBJIGNhbiBhcHByb2FjaCBhbmQgaW5zdHJ1bWVudCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjQ1LjA3MTk5OTU2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NDk5OTU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipleHQ0X3hhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjQ1LjI1ODUwOTQxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwNzUzMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleHQ0X3hhdHRyX3NldGAqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfc2V0YC4gSSBrbm93IGl0J3MgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIG15IGZpcnN0IGNsdWUuIE5vdywgbGV0IG1lIGNvbmZpcm0gd2hlcmUgaXQncyBhY3R1YWxseSBkZWZpbmVkOyBJIGJlbGlldmUgSSBzYXcgaXQgaW4gYGZzL2V4dDQveGF0dHIuY2AuIFllcCwgdGhlcmUgaXQgaXMhIEJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXIgZmlsZT8gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L3hhdHRyLmhgLiBJZiBpdCdzIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIsIHRoYXQgY2hhbmdlcyBldmVyeXRoaW5nIGluIHRlcm1zIG9mIGhvdyBJIG5lZWQgdG8gaGFuZGxlIGl0LiBMZXQgbWUgZ2V0IHRoYXQgaGVhZGVyIGZpbGUgb3Blbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6NDkuNTE5MjY1OTA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxOTg3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuaD0xODA9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgxOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgyOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XFxuZnMvZXh0NC94YXR0ci5oOjE4MzpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG5mcy9leHQ0L3hhdHRyLmgtMTg0LVxcdFxcdFxcdFxcdCAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cyk7XFxuZnMvZXh0NC94YXR0ci5oOjE4NTpleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuaC0xODYtXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibG9ja19iaCwgc2l6ZV90IHZhbHVlX2xlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6NDkuNjU1NDcwNDYzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Mjg1NTgyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgUmVmZXJlbmNlIENvdW50IE92ZXJmbG93IEZpeCoqXG5cbk9rYXksIHNvIEkgc2VlIGl0LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cgaW4gdGhlIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSBjb2RlIGNoYW5nZSBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0byBlbnN1cmUgdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50IGRvZXNuJ3QgZXhjZWVkIGBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWGAuIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIHRoZSByZWZjb3VudCAqYmVmb3JlKiB0aGUgY2hlY2ssIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3ZlcmZsb3cuIFRoZSBmaXggY29ycmVjdHMgdGhpcyBhbmQgYWxzbyBjbGVhcnMgdGhlIGBNQkVfUkVVU0FCTEVfQmAgYml0IGluIHRoZSBtYmNhY2hlIGVudHJ5IHdoZW4gdGhlIG1heGltdW0gcmVmZXJlbmNlIGNvdW50IGlzIHJlYWNoZWQsIHdoaWNoIHByZXZlbnRzIHRoZSBibG9jayBmcm9tIGJlaW5nIHJldXNlZC5cblxuSSdtIHRoaW5raW5nLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIG5vIHZpcnR1YWxpemF0aW9uIHRyaWNrcyBuZWVkZWQsIGl0J3MganVzdCBwbGFpbiBleHQ0IG9wZXJhdGlvbnMuIEdpdmVuIHRoYXQgdGhpcyBkZWFscyB3aXRoIGEgY29yZSBmaWxlc3lzdGVtIGZlYXR1cmUsIHhhdHRycywgSSB3b3VsZCBzYXkgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJ3JlIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgcHJpbWUgYXJlYXMgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpcz8gSXQgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB3aGljaCB3ZSBuZWVkIHRvIGVuYWJsZSwgYW5kIGdpdmVuIHRoYXQgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIG1iY2FjaGUsIHRoYXQgbXVzdCBhbHNvIGJlIGNvbmZpZ3VyZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfTUJDQUNIRWAgaXMgdXNlZCBmb3IgbWJjYWNoZSBhbmQgdmVyaWZ5IGl0IGlzIHNlbGVjdGVkIGJ5IGBFWFQ0X0ZTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1OTo0NS45NDEwNTU2OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQ1OTUxOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU5OjQ2LjA2NzUyNTg1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDgzMDc1MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgTUJDQUNIRSBTZWxlY3Rpb24gd2l0aGluIGV4dDQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgYE1CQ0FDSEVgIGlzIHNlbGVjdGVkLiBUaGlzIHN1Z2dlc3RzIGEgZGVwZW5kZW5jeSBvciBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBibG9jayBjYWNoaW5nIGluIGV4dDQsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIGl0LiBLbm93aW5nIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgd2lsbCBoZWxwIG1lIGluIFtpbnNlcnQgZXhwZXJ0LWxldmVsIGFwcGxpY2F0aW9uLCBlLmcuLCBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBpc3N1ZSwgdmVyaWZ5aW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbiwgZXRjLl0uIE15IGZvY3VzIGlzIHNoYXJwLCBhcyBJIGV4cGVjdCB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIGBNQkNBQ0hFYCBiZWNvbWVzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHRoYXQgZHJpdmUgdGhhdCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1OTo1My4xNTA2MDQ2MDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTI3NDQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU5OjUzLjI0MjU0MzUxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA0MTMxMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBDYWNoZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgYSBodW5jaCwgYW5kIGl0J3MgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gdGhlIGNvcmUgb2YgdGhlIGZpbGUgc3lzdGVtIGNhY2hlIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCBgZnMvbWJjYWNoZS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgYW5hbG9nb3VzIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pc21zIGZvciBtYW5hZ2luZyB0aGUgbWV0YWRhdGEgY2FjaGUgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2FjaGUgZW50cmllcyBhcmUgY3JlYXRlZCwgaW52YWxpZGF0ZWQsIGFuZCBhY2Nlc3NlZC4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZTogaG93IHRoZSBtYmNhY2hlcyBhcmUgYWNjZXNzZWQsIGhvdyBsb29rdXBzIHdvcmsgKGFyZSB0aGV5IGhhc2ggdGFibGVzPyBCLXRyZWVzPyksIHdoYXQgdGhlIGNhY2hlIHJlcGxhY2VtZW50IHBvbGljaWVzIGFyZSwgYW5kIGhvdyBzeW5jaHJvbml6YXRpb24gaXMgaGFuZGxlZC4gSXMgaXQgbG9ja2luZy1pbnRlbnNpdmU/IFdoYXQgYWJvdXQgY29uY3VycmVuY3kgaXNzdWVzPyBEb2VzIGl0IHVzZSBhbnkgc3BlY2lhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlPyBVbmRlcnN0YW5kaW5nIHRoZSBncmFudWxhciBkZXRhaWxzIGhlcmUgd2lsbCBhbGxvdyBtZSB0byB0cmFjayBkb3duIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjAyLjA0NjY3NzMxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1NjM1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9Mzc9c291cmNlIFxcXCJmcy9qYmQyL0tjb25maWdcXFwiXFxuZnMvS2NvbmZpZy0zOC1cXG5mcy9LY29uZmlnOjM5OmNvbmZpZyBGU19NQkNBQ0hFXFxuZnMvS2NvbmZpZy00MC0jIE1ldGEgYmxvY2sgY2FjaGUgZm9yIEV4dGVuZGVkIEF0dHJpYnV0ZXMgKGV4dDIvZXh0My9leHQ0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDowMi4xMTYyNDY2OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MjM3MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgRlNfTUJDQUNIRSoqXG5cblJpZ2h0LCBzbyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgRlNfTUJDQUNIRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBgZnMvZXh0NC9LY29uZmlnYCBzb3VuZHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLiBUaGF0IGZpbGUgc2hvdWxkIGRlZmluZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYW5kLCBieSBhc3NvY2lhdGlvbiwgbWVtb3J5IGJ1ZmZlciBjYWNoaW5nIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgcXVpY2tseSBzY2FuIGZvciBgRlNfTUJDQUNIRWAgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0J3MgY29udHJvbGxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbmZvcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MDUuMzc4NjIyNzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgxNDk0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlNfTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjA1LjQ1MTQ0NDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MzIzODA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZXZpc2l0aW5nIGV4dDQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBmb3IgdGhpcyBjdXJyZW50IHdvcmsuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGEgY3Vyc29yeSBnbGFuY2UgbWlnaHQgYmUgc3VmZmljaWVudCwgYnV0IEkgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCBldmVyeSBzZXR0aW5nLiBJJ2xsIGZvY3VzIG9uIHRoZSBzZWN0aW9ucyByZWxhdGVkIHRvIHRoZSBmZWF0dXJlIEknbSBleGFtaW5pbmcsIGJ1dCBJJ2xsIGFsc28gc2NhbiBmb3IgYW55dGhpbmcgYWRqYWNlbnQgdGhhdCBtaWdodCBoYXZlIGFuIGltcGFjdCwgYW55IGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGF0IHBsYXkuIEdvdHRhIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHN1YnRsZSBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzICpiZWZvcmUqIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIE5vIHN1cnByaXNlcyB0aGlzIHRpbWUgYXJvdW5kLiBJJ2xsIHBhcnRpY3VsYXJseSBsb29rIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgb3IgY29tbWl0cyB0aGF0IG1pZ2h0IGhhdmUgYWZmZWN0ZWQgdGhlIGRlZmF1bHQgb3B0aW9ucy4gT2theSwgbGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDowOS4xNDQ2ODU3MDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2OTQxNDM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlNfTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjA5LjI0MTYzNTU5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTc5OTAxMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTAwNTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjE3LjgyMTU0MDA4N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTc4OTE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGU19NQkNBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDoxNy45OTk1MzAxMjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5ODQyMjQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBgbWJjYWNoZWAgYW5kIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBleHQ0J3MgYG1iY2FjaGVgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uSSdtIG11bGxpbmcgb3ZlciBgbWJjYWNoZWAgYW5kIGl0cyByb2xlIHdpdGhpbiBleHQ0LCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqLiBJIGtub3cgaXQgZXhpc3RzLCBjb25jZXB0dWFsbHksIGFzIGEgbWV0YWRhdGEgYmxvY2sgY2FjaGluZyBtZWNoYW5pc20uIEJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGltcGxlbWVudGF0aW9uLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIG1ldGFkYXRhIGJsb2NrcyDigJMgaW5vZGVzLCBiaXRtYXBzLCBibG9jayBncm91cCBkZXNjcmlwdG9ycywgdGhlIGpvdXJuYWwsIHRoZSB3b3Jrcy4gSG93IGRvZXMgYG1iY2FjaGVgIGludGVyYWN0IHdpdGggKnRob3NlKj8gSXMgaXQgYWN0aW5nIGFzIGEgZGlyZWN0IGNhY2hlIGZvciB0aG9zZSBibG9ja3MsIHJlZHVjaW5nIHRoZSBuZWVkIGZvciBkaXNrIEkvTyB3aGVuIHRoZXkgYXJlIGZyZXF1ZW50bHkgYWNjZXNzZWQ/IE9yIGlzIGl0IG1vcmUgb2YgYSBidWZmZXIsIG1heWJlIGEgc3RhZ2luZyBhcmVhLCBmb3IgYmxvY2sgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyBhcmUgdXBkYXRlZCBvbiBkaXNrP1xuXG5JIGtub3cgZXh0NCBlbXBsb3lzIHNldmVyYWwgc3RyYXRlZ2llcyB0byBvcHRpbWl6ZSBtZXRhZGF0YSBhY2Nlc3MsIGxpa2UgYmxvY2sgZ3JvdXAgbG9jYWxpdHkgYW5kIGpvdXJuYWxpbmcuIEJ1dCB3aGVyZSBkb2VzIGBtYmNhY2hlYCBmaXQgaW50byAqdGhhdCogcGljdHVyZT8gSXMgaXQgdXNlZCBmb3IgZmFzdGVyIGlub2RlIGxvb2t1cHMsIG9yIHBlcmhhcHMgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBvZiBuZXcgYmxvY2tzIGluIHNwZWNpZmljIGJsb2NrIGdyb3Vwcywgb3IgYm90aD9cblxuSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHR5cGljYWwgZXh0NCByZWFkIGFuZCB3cml0ZSBwYXRocy4gV2hlcmUgZG9lcyB0aGUgYG1iY2FjaGVgIGdldCBjYWxsZWQgd2l0aGluIHRob3NlIHBhdGhzPyBBcmUgdGhlcmUgc3BlY2lmaWMgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgdGhhdCBhcmUgdGllZCBpbnRvIGl0PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVudCBgbWJjYWNoZWAgb3BlcmF0aW9ucyAoZ2V0LCBwdXQsIHVwZGF0ZSBldGMpLiBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyB3aGVuIGJsb2NrcyBhcmUgY2FjaGVkP1xuRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBob3cgYG1iY2FjaGVgIHJlZHVjZXMgbGF0ZW5jeSBmb3IgbWV0YWRhdGEgb3BlcmF0aW9ucyB3aXRoaW4gZXh0NCwgYW5kIHdoYXQgdGhlIGNvcmUgYWxnb3JpdGhtcyBhcmUuIEFuZCBJIG5lZWQgdG8gZ2V0IHRoZSBcImJpZyBwaWN0dXJlXCIgb2YgdGhlIHJvbGUgb2YgYG1iY2FjaGVgIGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBleHQ0J3Mgb3ZlcmFsbCBwZXJmb3JtYW5jZSBzdHJhdGVnaWVzLCBhbmQgbWF5YmUgaG93IGl0IGFmZmVjdHMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiB3b3JrbG9hZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MjUuNTk3OTU1Mzk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE4NTEyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWJjYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTI0OS0gKi9cXG5mcy9leHQ0L2V4dDQuaDoxMjUwOiNkZWZpbmUgRVhUNF9NT1VOVF9OT19NQkNBQ0hFXFx0XFx0MHgwMDAwMSAvKiBEbyBub3QgdXNlIG1iY2FjaGUgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMjUxLSNkZWZpbmUgRVhUNF9NT1VOVF9HUlBJRFxcdFxcdDB4MDAwMDRcXHQvKiBDcmVhdGUgZmlsZXMgd2l0aCBkaXJlY3RvcnkncyBncm91cCAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2OTI9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTcxMi1cXHRPcHRfZGlzY2FyZCwgT3B0X25vZGlzY2FyZCwgT3B0X2luaXRfaXRhYmxlLCBPcHRfbm9pbml0X2l0YWJsZSxcXG5mcy9leHQ0L3N1cGVyLmM6MTcxMzpcXHRPcHRfbWF4X2Rpcl9zaXplX2tiLCBPcHRfbm9qb3VybmFsX2NoZWNrc3VtLCBPcHRfbm9tYmNhY2hlLFxcbmZzL2V4dDQvc3VwZXIuYy0xNzE0LVxcdE9wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBPcHRfbWJfb3B0aW1pemVfc2NhbixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXh0NF9wYXJhbV9zcGVjc1tdID0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE4NDUtXFx0ZnNwYXJhbV9mbGFnXFx0KFxcXCJpbmxpbmVjcnlwdFxcXCIsXFx0XFx0T3B0X2lubGluZWNyeXB0KSxcXG5mcy9leHQ0L3N1cGVyLmM6MTg0NjpcXHRmc3BhcmFtX2ZsYWdcXHQoXFxcIm5vbWJjYWNoZVxcXCIsXFx0XFx0T3B0X25vbWJjYWNoZSksXFxuZnMvZXh0NC9zdXBlci5jOjE4NDc6XFx0ZnNwYXJhbV9mbGFnXFx0KFxcXCJub19tYmNhY2hlXFxcIixcXHRcXHRPcHRfbm9tYmNhY2hlKSxcXHQvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xcbmZzL2V4dDQvc3VwZXIuYy0xODQ4LVxcdGZzcGFyYW1fZmxhZ1xcdChcXFwicHJlZmV0Y2hfYmxvY2tfYml0bWFwc1xcXCIsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTg3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NDItXFx0e09wdF9qcWZtdCwgMCwgTU9QVF9RRk1UfSxcXG5mcy9leHQ0L3N1cGVyLmM6MTk0MzpcXHR7T3B0X25vbWJjYWNoZSwgRVhUNF9NT1VOVF9OT19NQkNBQ0hFLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jLTE5NDQtXFx0e09wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBFWFQ0X01PVU5UX05PX1BSRUZFVENIX0JMT0NLX0JJVE1BUFMsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjU1OD1zdGF0aWMgaW50IF9fZXh0NF9yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02NjU3LVxcdGlmICgoc2JpLVxcdTAwM2VzX21vdW50X29wdCBeIG9sZF9vcHRzLnNfbW91bnRfb3B0KSBcXHUwMDI2IEVYVDRfTU9VTlRfTk9fTUJDQUNIRSkge1xcbmZzL2V4dDQvc3VwZXIuYzo2NjU4OlxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcImNhbid0IGVuYWJsZSBub21iY2FjaGUgZHVyaW5nIHJlbW91bnRcXFwiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNjY1OS1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTU2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZnMvZXh0NC94YXR0ci5jOjU3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYmNhY2hlLmhcXHUwMDNlXFxuZnMvZXh0NC94YXR0ci5jLTU4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9xdW90YW9wcy5oXFx1MDAzZVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTQyND1zdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaWdldChzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBlYV9pbm8sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNDcwLVxcbmZzL2V4dDQveGF0dHIuYzo0NzE6LyogUmVtb3ZlIGVudHJ5IGZyb20gbWJjYWNoZSB3aGVuIEVBIGlub2RlIGlzIGdldHRpbmcgZXZpY3RlZCAqL1xcbmZzL2V4dDQveGF0dHIuYy00NzItdm9pZCBleHQ0X2V2aWN0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTg5OT1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwODAtXFx0XFx0XFx0XFx0XFx0LypcXG5mcy9leHQ0L3hhdHRyLmM6MjA4MTpcXHRcXHRcXHRcXHRcXHQgKiBVbmRvIGV2ZXJ5dGhpbmcgYW5kIGNoZWNrIG1iY2FjaGVcXG5mcy9leHQ0L3hhdHRyLmMtMjA4Mi1cXHRcXHRcXHRcXHRcXHQgKiBhZ2Fpbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MjUuNzc5ODEyMTUzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjM5MDQ2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkV4YW1pbmluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSXQgc2VlbXMgSSByZW1lbWJlciBgRlNfTUJDQUNIRWAgYmVpbmcgc29tZWhvdyB0aWVkIHRvIGBFWFQ0X0ZTYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuIFdoZXJlIHdhcyB0aGF0IHNldHRpbmcgZGVmaW5lZCBhZ2Fpbj8gQWgsIHllcywgaXQncyBpbiBgZnMvZXh0NC9LY29uZmlnYC4gTGV0IG1lIGdvIGJhY2sgYW5kIGhhdmUgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoYXQgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWV0YWRhdGEgYmxvY2sgY2FjaGUgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzY2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MzEuMzQzNzIxMjI2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM5MDA0NjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZTX01CQ0FDSEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDozMS41NDc2Mjk3NDNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc1OTIwNjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjExNzM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDo0MS4zMDY4Mzk1NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwOTk2NTA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlNfTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQxLjQxNzg0Mzg2OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYzODQ0MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTM2MjgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQzLjE4MTY5MDg1MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMzI3NTE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGU19NQkNBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDo0My4yODQwMjlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU2ODgwMjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBgRlNfTUJDQUNIRWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBvdXQgYWJvdXQgYEZTX01CQ0FDSEVgLiBUaGF0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gVGhlcmVmb3JlLCBteSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgaW50byB0aGUgYGZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb24sIGFueSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIHByb21wdCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHdoYXQgdGhpcyBvcHRpb24gKmRvZXMqIHRvIHVzZXJzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYEZTX01CQ0FDSEVgLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY3MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQ1Ljg1MjgzNDcwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MzI1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU19NQkNBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0zNz1zb3VyY2UgXFxcImZzL2piZDIvS2NvbmZpZ1xcXCJcXG5mcy9LY29uZmlnLTM4LVxcbmZzL0tjb25maWc6Mzk6Y29uZmlnIEZTX01CQ0FDSEVcXG5mcy9LY29uZmlnLTQwLSMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQ2LjAzMDE2NzA2N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA1ODQ2Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzkuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvLi4uIHdlbGwsIEknbSBub3QgZW50aXJlbHkgc3VyZSAqeWV0KiwgYnV0IG9mdGVuIEtjb25maWcgZmlsZXMgZGVhbCB3aXRoIGZlYXR1cmUgY29uZmlndXJhdGlvbi4gTGluZSAzOSBjb3VsZCBiZSBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwgYW4gb3B0aW9uLCBvciBhIGNvbW1lbnQgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgdGhlcmUgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGdyZWF0ZXIgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6NDguODM2MDE2NjIzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdHNvdXJjZSBcXFwiZnMvZXh0Mi9LY29uZmlnXFxcIlxcbiAgMzY6XFx0c291cmNlIFxcXCJmcy9leHQ0L0tjb25maWdcXFwiXFxuICAzNzpcXHRzb3VyY2UgXFxcImZzL2piZDIvS2NvbmZpZ1xcXCJcXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIEZTX01CQ0FDSEVcXG4gIDQwOlxcdCMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpXFxuICA0MTpcXHRcXHR0cmlzdGF0ZVxcbiAgNDI6XFx0XFx0ZGVmYXVsdCB5IGlmIEVYVDJfRlM9eSBcXHUwMDI2XFx1MDAyNiBFWFQyX0ZTX1hBVFRSXFxuICA0MzpcXHRcXHRkZWZhdWx0IHkgaWYgRVhUNF9GUz15XFxuICA0NDpcXHRcXHRkZWZhdWx0IG0gaWYgRVhUMl9GU19YQVRUUiB8fCBFWFQ0X0ZTXFxuICA0NTpcXHRcXG4gIDQ2OlxcdHNvdXJjZSBcXFwiZnMvamZzL0tjb25maWdcXFwiXFxuICA0NzpcXHRcXG4gIDQ4OlxcdHNvdXJjZSBcXFwiZnMveGZzL0tjb25maWdcXFwiXFxuICA0OTpcXHRzb3VyY2UgXFxcImZzL2dmczIvS2NvbmZpZ1xcXCJcXG4gIDUwOlxcdHNvdXJjZSBcXFwiZnMvb2NmczIvS2NvbmZpZ1xcXCJcXG4gIDUxOlxcdHNvdXJjZSBcXFwiZnMvYnRyZnMvS2NvbmZpZ1xcXCJcXG4gIDUyOlxcdHNvdXJjZSBcXFwiZnMvbmlsZnMyL0tjb25maWdcXFwiXFxuICA1MzpcXHRzb3VyY2UgXFxcImZzL2YyZnMvS2NvbmZpZ1xcXCJcXG4gIDU0OlxcdHNvdXJjZSBcXFwiZnMvem9uZWZzL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQ4LjgzNjEyNTQ0M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODcwMTA3NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYEZTX01CQ0FDSEVgIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIGBFWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBtZWFuaW5nIG15IHByaW1hcnkgZm9jdXMgaXMgc29sZWx5IG9uIGBFWFQ0X0ZTYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uIEl0J3MgYSB0b3AtbGV2ZWwgY29uZmlnLCB0aGFua2Z1bGx5LCBzbyBubyBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBsaXN0IG9mIGNvbmZpZ3MgaXM6XG5gRVhUNF9GU2BcblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHhhdHRyIG1hbmlwdWxhdGlvbiwgSSBzZWUgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGdsYW5jZWQgYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgYnV0IGl0J3Mgc3RhdGljLCBzbyBpdCBjYW4ndCBiZSB1c2VkIGV4dGVybmFsbHkgYW5kIGRvZXNuJ3Qgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW4gdGhpcyBjb250ZXh0LiBgZXh0NF94YXR0cl9zZXRgIGFwcGVhcnMgdG8gYmUgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCB3aGlsZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBpcyB1c2VkIGluIHRoZSBwcmVzZW5jZSBvZiBhIHRyYW5zYWN0aW9uIGhhbmRsZS4gQm90aCBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nLlxuXG5Ob3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBJIGNhbiBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuIFRoZSBwYXRjaCBjb3JyZWN0cyBhIGJ1ZyByZWxhdGVkIHRvIHRoZSB4YXR0ciByZWZlcmVuY2UgY291bnQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCAqYmVmb3JlKiBjaGVja2luZyBpZiBpdCBoYWQgcmVhY2hlZCB0aGUgbWF4aW11bSwgd2hpY2ggd291bGQgbGVhZCB0byBhbiBpbnRlZ2VyIG92ZXJmbG93LiBUaGUgdXBkYXRlZCB2ZXJzaW9uIGNoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGF0IGl0cyBtYXhpbXVtICpiZWZvcmUqIGluY3JlbWVudGluZy4gSWYgaXQgaXMgYXQgdGhlIG1heGltdW0sIHRoZSBwcm9jZXNzIHRoZW4gY2xlYXJzIHRoZSBgTUJFX1JFVVNBQkxFX0JgIGZsYWcgb24gdGhlIGNhY2hlIGVudHJ5IHRvIHByZXZlbnQgdGhlIGJ1ZmZlciBmcm9tIGJlaW5nIHJldXNlZCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgZml4LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyB1c2Vyc3BhY2UgdGhyb3VnaCBgc2V0eGF0dHJgIHN5c2NhbGxzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBhIHVzZXJsYW5kIHByb2dyYW0gYW5kIGlzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBjb25maWcsIHRoZW4sIGlzOlxuYEVYVDRfRlNgXG5cbkZvY3VzIHN5bWJvbHM6XG5gZXh0NF94YXR0cl9zZXRgXG5gZXh0NF94YXR0cl9zZXRfaGFuZGxlYFxuXG5JJ2xsIHNldCB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDMwLCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjU2LjcwNjIzNTg3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1OTA3Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjz8kd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 16:42:53 +0000 UTC FinishedAt: 2026-08-02 17:00:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_set", "ext4_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzliZDQ1MmM1OGM4OWUxMzc5YjY2YWNjNTk3MTY5Mzg1ZTc2YmU4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6NTc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Li4zYzFiYjU0N2IyZjU0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0yMDc1LDEyICYjNDM7MjA3NSwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICogc3RhYmxlIHNvIHdlIGNhbiBjaGVjayB0aGUgYWRkaXRpb25hbFxuIFx0XHRcdFx0ICogcmVmZXJlbmNlIGZpdHMuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHJlZiA9IGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50KSAmIzQzOyAxO1xuLVx0XHRcdFx0aWYgKHJlZiBcdTAwM2UgRVhUNF9YQVRUUl9SRUZDT1VOVF9NQVgpIHtcbiYjNDM7XHRcdFx0XHRyZWYgPSBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXHUwMDNlaF9yZWZjb3VudCk7XG4mIzQzO1x0XHRcdFx0aWYgKHJlZiBcdTAwM2U9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZVxuIFx0XHRcdFx0XHQgKiBhZ2Fpbi5cbiBcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsIFx1MDAyNmNlLVx1MDAzZWVfZmxhZ3MpO1xuIFx0XHRcdFx0XHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XG4gXHRcdFx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgRVhUNF9DMkIoRVhUNF9TQihzYiksXG5AQCAtMjA5MSw2ICYjNDM7MjA5Miw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdG5ld19iaCA9IE5VTEw7XG4gXHRcdFx0XHRcdGdvdG8gaW5zZXJ0ZWQ7XG4gXHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0cmVmJiM0MzsmIzQzOztcbiBcdFx0XHRcdEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50ID0gY3B1X3RvX2xlMzIocmVmKTtcbiBcdFx0XHRcdGlmIChyZWYgPT0gRVhUNF9YQVRUUl9SRUZDT1VOVF9NQVgpXG4gXHRcdFx0XHRcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXHUwMDI2Y2UtXHUwMDNlZV9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzliZDQ1MmM1OGM4OWUxMzc5YjY2YWNjNTk3MTY5Mzg1ZTc2YmU4ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTY6NTc6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyOC4uM2MxYmI1NDdiMmY1NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMjA3NSwxMiAmIzQzOzIwNzUsMTMgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgKiBzdGFibGUgc28gd2UgY2FuIGNoZWNrIHRoZSBhZGRpdGlvbmFsCiAJCQkJICogcmVmZXJlbmNlIGZpdHMuCiAJCQkJICovCi0JCQkJcmVmID0gbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLSZndDtoX3JlZmNvdW50KSAmIzQzOyAxOwotCQkJCWlmIChyZWYgJmd0OyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkgewomIzQzOwkJCQlyZWYgPSBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktJmd0O2hfcmVmY291bnQpOwomIzQzOwkJCQlpZiAocmVmICZndDs9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZQogCQkJCQkgKiBhZ2Fpbi4KIAkJCQkJICovCiYjNDM7CQkJCQljbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsICZhbXA7Y2UtJmd0O2VfZmxhZ3MpOwogCQkJCQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiAJCQkJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsCiAJCQkJCQkJIEVYVDRfQzJCKEVYVDRfU0Ioc2IpLApAQCAtMjA5MSw2ICYjNDM7MjA5Miw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCW5ld19iaCA9IE5VTEw7CiAJCQkJCWdvdG8gaW5zZXJ0ZWQ7CiAJCQkJfQomIzQzOwkJCQlyZWYmIzQzOyYjNDM7OwogCQkJCUJIRFIobmV3X2JoKS0mZ3Q7aF9yZWZjb3VudCA9IGNwdV90b19sZTMyKHJlZik7CiAJCQkJaWYgKHJlZiA9PSBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkKIAkJCQkJY2xlYXJfYml0KE1CRV9SRVVTQUJMRV9CLCAmYW1wO2NlLSZndDtlX2ZsYWdzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgZXh0NCB4YXR0ciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgZnMvZXh0NC94YXR0ci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IEkmIzM5O20gc2VlaW5nIGludm9sdmVzIGEgY2hhbmdlIGluIGhvdyB3ZSBoYW5kbGUgeGF0dHIgYmxvY2sgcmVmZXJlbmNlIGNvdW50cyB3aGVuIHRoZXkgaGl0IHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUsIGBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWGAuIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQgKmJlZm9yZSogdGhlIGNoZWNrLCBidXQgbm93IGl0IHNlZW1zIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgcmVmY291bnQgKmFscmVhZHkqIGVxdWFscyB0aGUgbWF4aW11bS4gVGhlIGtleSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBpbmNyZW1lbnQgd2l0aCBhbiBlcXVhbGl0eSBjaGVjayBhbmQgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsICZhbXA7Y2UtJmd0O2VfZmxhZ3MpYCB3aXRoaW4gdGhhdCBgaWZgIGJsb2NrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgcmV1c2Ugb2YgYSBidWZmZXIuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIGEgbmV3IHJlZmVyZW5jZSBpcyBhdHRlbXB0ZWQgd2hlbiB0aGUgY291bnQgaXMgYXQgdGhlIG1heGltdW0sIGFuZCBpbnN0ZWFkIG9mIGZhaWxpbmcsIHdlJiMzOTtyZSBjbGVhcmluZyBhIGZsYWcgcmVsYXRlZCB0byByZXVzYWJpbGl0eS4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXh0NCB4YXR0ciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gd2UgaGl0IHRoZSByZWZjb3VudCBsaW1pdCB3aGlsZSBhZGRpbmcgYSBuZXcgcmVmZXJlbmNlLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseSwgYXMgYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIHRoaXMgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzIGZvciBidWdzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjaGFuZ2UgaXMgY29ycmVjdCBhbmQgbm90IGludHJvZHVjZSBhIHJlZ3Jlc3Npb24sIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZmVhdHVyZS4gSSByZW1lbWJlciBgRVhUNF9GU2AgaXMgdGhlIG1haW4gb25lLCBhbmQgSSAqdGhpbmsqIGBFWFQ0X0ZTX1hBVFRSYCBpcyBhbm90aGVyIG9uZSwgdGhvdWdoIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGlzIGluIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GU19YQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEVYVDQgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBwb3NzaWJsZSBpc3N1ZSBoZXJlIHdpdGggYW4gYEVYVDRfRlNfWEFUVFJgIHNldHRpbmcuIFRoYXQgbmFtZSBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSByaW5nIGEgYmVsbCwgb3IgbWF5YmUgaXQmIzM5O3MganVzdCBiZWVuIHJlbmFtZWQgaW4gYSBtb3JlIHJlY2VudCBrZXJuZWwgdmVyc2lvbj8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYFhBVFRSYCBhbmQgc2VlIHdoYXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBhdmFpbGFibGUgYW5kIHdoZXRoZXIgdGhlIG9sZCBuYW1pbmcgY29udmVudGlvbiBpcyBub3cgZGVwcmVjYXRlZCBvciBpbnRlZ3JhdGVkIHVuZGVyIGEgYnJvYWRlciBgRVhUNF9GU2Agb3Igc2ltaWxhci4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCBvciBhIG1vcmUgZnVuZGFtZW50YWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24sIHNvIEkgc2hvdWxkIGJlIHF1aWNrIHRvIGZpbmQgdGhlIHJpZ2h0IG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRVhUNCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIEtjb25maWcgZmlsZSwgb2YgY291cnNlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwganVzdCBvcGVuIHVwIGBmcy9leHQ0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQgaW5pdGlhbGx5OyBsZXQmIzM5O3MgZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIHNvdXJjZS4gQWx0ZXJuYXRpdmVseSwgYSBxdWljayBgZ3JlcGAgZm9yIGBFWFQ0X0ZTYCBjb3VsZCBiZSBhIGZhc3RlciB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGVjbGFyYXRpb25zIG9yIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgaWYgdGhlIGZpbGUgaXMgdmVyeSBsYXJnZSBvciBjb21wbGV4LCBzbyBJIG1pZ2h0IGp1c3Qgc3RhcnQgd2l0aCB0aGF0IGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZS4gVGhhdCB3b3VsZCBiZSB0aGUgZWZmaWNpZW50IGFwcHJvYWNoIGZvciBhIHByb2plY3Qgb2YgdGhpcyBuYXR1cmUsIGdpdmVuIHRoZSB0aW1lIGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFWFQ0IEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgRVhUNF9GU2AgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgY29yZS4gTm93LCB3aGVuIGRlYWxpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAuIFRob3NlIGNvdWxkIGRlZmluaXRlbHkgYmUgcmVsZXZhbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBpZiBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IGhvdyBpdCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSwgYW5kIHRoZXJlZm9yZSBob3cgeGF0dHJzIGNhbiBiZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTI3Mj1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTI5NC1cdFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcbmZzL2V4dDQveGF0dHIuYzoxMjk1Olx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xuZnMvZXh0NC94YXR0ci5jLTEyOTYtXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xODk4PXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHIuYzoxODk5OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTkwMC1cdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xOTQ0LVx0XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gdW5kZXIgYnVmZmVyIGxvY2sgZm9yXG5mcy9leHQ0L3hhdHRyLmM6MTk0NTpcdFx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxuZnMvZXh0NC94YXR0ci5jLTE5NDYtXHRcdFx0ICogYmxvY2tcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjM1MT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0MzQtXHRcdGVsc2UgaWYgKCFicy5zLm5vdF9mb3VuZClcbmZzL2V4dDQveGF0dHIuYzoyNDM1Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2YnMpO1xuZnMvZXh0NC94YXR0ci5jLTI0MzYtXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNDUxLVx0XHRcdGkudmFsdWUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jOjI0NTI6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjQ1My1cdFx0fSBlbHNlIGlmIChlcnJvciA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0NjAtXHRcdFx0fVxuZnMvZXh0NC94YXR0ci5jOjI0NjE6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjQ2Mi1cdFx0XHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiAhaXMucy5ub3RfZm91bmQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjYwNz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNjcyLVx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xuZnMvZXh0NC94YXR0ci5jOjI2NzM6XHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIGJzKTtcbmZzL2V4dDQveGF0dHIuYy0yNjc0LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgWGF0dHIgQmxvY2sgU2V0dGluZyBNZWNoYW5pc20qKgoKT2theSwgc28gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaGlkZGVuIGZyb20gZGlyZWN0IGV4dGVybmFsIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaG8mIzM5O3MgdXNpbmcgdGhpcyB0aGluZz8mIzM0OyBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIHRlbGxzIG1lIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrYCBhcmUgdGhlIGNhbGxlcnMuIEZpbmUsIGdvb2QgdG8ga25vdy4gTm93LCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgcHJvY2VzcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gR290dGEgdW5kZXJzdGFuZCB3aGF0ICppdCYjMzk7cyogZG9pbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0IGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgZG9lcy4gVGhhdCBjYWxsIHBhdGggaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTIzMjA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjMzOC0vKlxuZnMvZXh0NC94YXR0ci5jOjIzMzk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcbmZzL2V4dDQveGF0dHIuYy0yMzQwLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTIzNTA9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjM1MTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG5mcy9leHQ0L3hhdHRyLmMtMjM1Mi1cdFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1MDM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjUzMi0gKlxuZnMvZXh0NC94YXR0ci5jOjI1MzM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXG5mcy9leHQ0L3hhdHRyLmMtMjUzNC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1Mzk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1NjItXG5mcy9leHQ0L3hhdHRyLmM6MjU2MzpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNTY0LVx0XHRcdFx0XHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGV4dDQgWEFUVFIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpIGFyZSBoYW5kbGVkIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkmIzM5O3ZlIGdvdCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhbmQgYGV4dDRfeGF0dHJfc2V0YCBpbiBteSBzaWdodHMsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyB0aGF0IHRoZXkmIzM5O3JlIGJvdGggZGVjbGFyZWQgbm9uLXN0YXRpYy4gVGhhdCB0ZWxscyBtZSB0aGV5JiMzOTtyZSBsaWtlbHkgZGVzaWduZWQgZm9yIHVzZSBvdXRzaWRlIHRoZWlyIGltbWVkaWF0ZSBzb3VyY2UgZmlsZSwgcGVyaGFwcyBmb3Igc29tZSBzb3J0IG9mIG1vZHVsYXJpdHkgb3IgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gU2luY2UgdGhleSYjMzk7cmUgbm90IHN0YXRpYywgdGhlIHNjb3BlIG9mIHRoZSBtZXRob2QgaXMgd2lkZXIgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLgoKTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gYGV4dDRfeGF0dHJfc2V0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBYQVRUUiBmdW5jdGlvbmFsaXR5LiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyBkaWcgaW50byBpdHMgc291cmNlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3MgZG9pbmcgb24gYSBkZWVwZXIgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz05Mjg9c3RhdGljIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQveGF0dHIuYy05MzgtXG5mcy9leHQ0L3hhdHRyLmM6OTM5OmludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy05NDAtXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsb2NrX2JoLCBzaXplX3QgdmFsdWVfbGVuLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTc4PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNjI4LVxuZnMvZXh0NC94YXR0ci5jOjE2Mjk6c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuZnMvZXh0NC94YXR0ci5jLTE2MzAtXHRcdFx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2ggKnMsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTk2Mi1cdFx0XHRlYV9iZGVidWcoYnMtXHUwMDNlYmgsIFwmIzM0O21vZGlmeWluZyBpbi1wbGFjZVwmIzM0Oyk7XG5mcy9leHQ0L3hhdHRyLmM6MTk2MzpcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTk2NC1cdFx0XHRcdFx0ICAgICBlYV9pbm9kZSwgdHJ1ZSAvKiBpc19ibG9jayAqLyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE5OTAtXHRcdCAqIElmIGV4aXN0aW5nIGVudHJ5IHBvaW50cyB0byBhbiB4YXR0ciBpbm9kZSwgd2UgbmVlZFxuZnMvZXh0NC94YXR0ci5jOjE5OTE6XHRcdCAqIHRvIHByZXZlbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoKSBmcm9tIGRlY3JlbWVudGluZ1xuZnMvZXh0NC94YXR0ci5jLTE5OTItXHRcdCAqIHJlZiBjb3VudCBvbiBpdCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgYmVsb25ncyB0byB0aGVcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjAzMS1cbmZzL2V4dDQveGF0dHIuYzoyMDMyOlx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9lbnRyeShpLCBzLCBoYW5kbGUsIGlub2RlLCBlYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yMDMzLVx0XHRcdFx0ICAgICB0cnVlIC8qIGlzX2Jsb2NrICovKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjI1Nj1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI3Ni1cdH1cbmZzL2V4dDQveGF0dHIuYzoyMjc3Olx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9lbnRyeShpLCBzLCBoYW5kbGUsIGlub2RlLCBlYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yMjc4LVx0XHRcdFx0ICAgICBmYWxzZSAvKiBpc19ibG9jayAqLyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTIzMjA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjMzOC0vKlxuZnMvZXh0NC94YXR0ci5jOjIzMzk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcbmZzL2V4dDQveGF0dHIuYy0yMzQwLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTIzNTA9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjM1MTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG5mcy9leHQ0L3hhdHRyLmMtMjM1Mi1cdFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTIzODgtXG5mcy9leHQ0L3hhdHRyLmM6MjM4OTpcdFx0Y3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZSwgYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjM5MC1cdFx0XHRcdFx0XHQgICB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1MDItXG5mcy9leHQ0L3hhdHRyLmM6MjUwMzppbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxuZnMvZXh0NC94YXR0ci5jLTI1MDQtXHRcdFx0ICAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cylcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjUxOS1cdH0gZWxzZSB7XG5mcy9leHQ0L3hhdHRyLmM6MjUyMDpcdFx0KmNyZWRpdHMgPSBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUsIGJoLFxuZnMvZXh0NC94YXR0ci5jLTI1MjEtXHRcdFx0XHRcdFx0ICAgIHZhbHVlX2xlbiwgaXNfY3JlYXRlKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjUzMC0vKlxuZnMvZXh0NC94YXR0ci5jOjI1MzE6ICogZXh0NF94YXR0cl9zZXQoKVxuZnMvZXh0NC94YXR0ci5jLTI1MzItICpcbmZzL2V4dDQveGF0dHIuYzoyNTMzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxuZnMvZXh0NC94YXR0ci5jLTI1MzQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNTM4PWludFxuZnMvZXh0NC94YXR0ci5jOjI1Mzk6ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXG5mcy9leHQ0L3hhdHRyLmMtMjU0MC1cdCAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwgaW50IGZsYWdzKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTUxLXJldHJ5OlxuZnMvZXh0NC94YXR0ci5jOjI1NTI6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUsIHZhbHVlX2xlbiwgZmxhZ3MgXHUwMDI2IFhBVFRSX0NSRUFURSxcbmZzL2V4dDQveGF0dHIuYy0yNTUzLVx0XHRcdFx0ICAgICAgIFx1MDAyNmNyZWRpdHMpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTYyLVxuZnMvZXh0NC94YXR0ci5jOjI1NjM6XHRcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cdFx0XHRcdFx0ICAgICAgdmFsdWUsIHZhbHVlX2xlbiwgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gWGF0dHIgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBzZXR0aW5nIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBmZWVscyBsaWtlIGEgc29saWQgcGxhY2UgdG8gc3RhcnQ7IGl0JiMzOTtzIGEgZ29vZCBwcmltYXJ5IHN5bWJvbCB0byBmb2xsb3cuIE15IG5leHQgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gQXJlIHRoZXJlIGFueSBvdGhlciBvYnZpb3VzIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHNldHRpbmcgdGhlc2UgYXR0cmlidXRlcz8gQWgsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGp1bXBzIG91dCBhcyBhbm90aGVyIGxpa2VseSBjYW5kaWRhdGUuIEFuZCB3aGF0IGFib3V0IGBleHQ0X3hhdHRyX2Jsb2NrX3NldGA/IEl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBvdXQsIHdlIGNhbiYjMzk7dCBkaXJlY3RseSB1c2UgdGhhdCBhcyBvdXIgZm9jdXMuCgpUaW1lIHRvIHJldmlzaXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIGBFWFQ0X0ZTYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCB3ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGF0LiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIGxpa2UgYEVYVDRfRlNfWEFUVFJgIGRpcmVjdGx5LiBXYWl0IGEgbW9tZW50ISBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbXBpbGF0aW9uLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGZzL2V4dDQvTWFrZWZpbGVgIHRvIHNlZSBleGFjdGx5IGhvdyBgeGF0dHIuY2AgaXMgY29tcGlsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyBtaWdodCBnaXZlIHVzIGEgZ29vZCBpbmRpY2F0aW9uIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhdHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRVhUNCBYQVRUUiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGB4YXR0ci5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg4oCTIGl0IGltcGxpZXMgdGhhdCBlbmFibGluZyBgRVhUNF9GU2Agc2hvdWxkIGJlIHRoZSBvbmx5IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYXQgbGVhc3QgYXQgdGhlIGJhc2UgbGV2ZWwuCgpNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIHZlcmlmeSBpZiB3ZSBuZWVkIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBvciBgRVhUNF9GU19QT1NJWF9BQ0xgIHRvIGFjdHVhbGx5ICp1c2UqIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluIHRvIGNvbmZpcm0gd2hpY2ggY29uZmlnIGZsYWdzIGFyZSB0cnVseSByZXF1aXJlZC4KCkFscmlnaHQsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgY2FsbGVkIGJ5IGJvdGggYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYW5kIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBEaWdnaW5nIGRlZXBlciwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgZXh0NF94YXR0cl9zZXRgLCBhbmQgKnRoYXQqIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGV4dDRfeGF0dHJfdHJ1c3RlZF9zZXRgLCBgZXh0NF94YXR0cl91c2VyX3NldGAsIGBleHQ0X3hhdHRyX3NlY3VyaXR5X3NldGAsIGFuZCBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCAqYW55KiB4YXR0ciBzZXQgb3BlcmF0aW9uIHNob3VsZCB1bHRpbWF0ZWx5IHJlYWNoIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIHdoaWNoIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbi4KCkdpdmVuIHRoYXQgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLCBpdCBsb29rcyBsaWtlIGp1c3QgZW5hYmxpbmcgYEVYVDRfRlNgIHNob3VsZCBpbmRlZWQgYmUgc3VmZmljaWVudCB0byBnZXQgZXZlcnl0aGluZyBsaW5rZWQgY29ycmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIGZvciBjb25maXJtYXRpb246IGBleHQ0X3hhdHRyX3NldGAsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgcG90ZW50aWFsbHkgYGV4dDRfeGF0dHJfdXNlcl9zZXRgIGFuZCBgZXh0NF94YXR0cl90cnVzdGVkX3NldGAuCgpJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBjb25maXJtIHRoaXMgaXMgdG8gbG9vayBhdCB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgZnMvZXh0NC94YXR0cl91c2VyLmNgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50cyBhcmUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIGNvbmZpcm0gaG93IHRoZSB4YXR0ciBzeXN0ZW0gaXMgZW50ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF94YXR0cl91c2VyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHJfdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHJfdXNlci5jPTMyPXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHJfdXNlci5jOjMzOmV4dDRfeGF0dHJfdXNlcl9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG5mcy9leHQ0L3hhdHRyX3VzZXIuYy0zNC1cdFx0ICAgIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jPTQ1PWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyID0ge1xuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jLTQ4LVx0LmdldFx0PSBleHQ0X3hhdHRyX3VzZXJfZ2V0LFxuZnMvZXh0NC94YXR0cl91c2VyLmM6NDk6XHQuc2V0XHQ9IGV4dDRfeGF0dHJfdXNlcl9zZXQsXG5mcy9leHQ0L3hhdHRyX3VzZXIuYy01MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIHRoZSB4YXR0ciBTZXR0aW5nIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIGBleHQ0X3hhdHRyX3VzZXJfc2V0YCBpcyBzdGF0aWMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgbWVhbnMgaWYgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gYW5hbHl6ZSBpbiByZWxhdGlvbiB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLCBgZXh0NF94YXR0cl9zZXRgIGlzIGRlZmluaXRlbHkgdGhlIGJldHRlciBjYW5kaWRhdGUgdG8gZm9jdXMgb24uIEl0IGhhcyB0byBiZSwgZ2l2ZW4gdGhlIG90aGVyIG9uZSYjMzk7cyBzdGF0aWMgbmF0dXJlLiBOb3csIGxldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgdG8gc2VlIGlmIGBleHQ0X3hhdHRyX3NldGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gaXRzIGFjY2Vzc2liaWxpdHkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgb3IgdXNlcmxhbmQuIFVuZGVyc3RhbmRpbmcgaXRzIGV4cG9ydCBzdGF0dXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaG93IEkgY2FuIGFwcHJvYWNoIGFuZCBpbnN0cnVtZW50IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmV4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleHQ0X3hhdHRyX3NldGAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLCBgZXh0NF94YXR0cl9zZXRgLiBJIGtub3cgaXQmIzM5O3MgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIG15IGZpcnN0IGNsdWUuIE5vdywgbGV0IG1lIGNvbmZpcm0gd2hlcmUgaXQmIzM5O3MgYWN0dWFsbHkgZGVmaW5lZDsgSSBiZWxpZXZlIEkgc2F3IGl0IGluIGBmcy9leHQ0L3hhdHRyLmNgLiBZZXAsIHRoZXJlIGl0IGlzISBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGl0IGRlY2xhcmVkIGluIGEgaGVhZGVyIGZpbGU/IEkgbmVlZCB0byBjaGVjayBgZnMvZXh0NC94YXR0ci5oYC4gSWYgaXQmIzM5O3MgZGVjbGFyZWQgaW4gdGhlIGhlYWRlciwgdGhhdCBjaGFuZ2VzIGV2ZXJ5dGhpbmcgaW4gdGVybXMgb2YgaG93IEkgbmVlZCB0byBoYW5kbGUgaXQuIExldCBtZSBnZXQgdGhhdCBoZWFkZXIgZmlsZSBvcGVuLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuaD0xODA9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTtcbmZzL2V4dDQveGF0dHIuaDoxODE6ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oOjE4MjpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oOjE4MzpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbmZzL2V4dDQveGF0dHIuaC0xODQtXHRcdFx0XHQgIGJvb2wgaXNfY3JlYXRlLCBpbnQgKmNyZWRpdHMpO1xuZnMvZXh0NC94YXR0ci5oOjE4NTpleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5oLTE4Ni1cdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmgsIHNpemVfdCB2YWx1ZV9sZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4YXR0ciBSZWZlcmVuY2UgQ291bnQgT3ZlcmZsb3cgRml4KioKCk9rYXksIHNvIEkgc2VlIGl0LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cgaW4gdGhlIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSBjb2RlIGNoYW5nZSBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBkb2VzbiYjMzk7dCBleGNlZWQgYEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYYC4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jcmVtZW50ZWQgdGhlIHJlZmNvdW50ICpiZWZvcmUqIHRoZSBjaGVjaywgd2hpY2ggY291bGQgbGVhZCB0byBhbiBvdmVyZmxvdy4gVGhlIGZpeCBjb3JyZWN0cyB0aGlzIGFuZCBhbHNvIGNsZWFycyB0aGUgYE1CRV9SRVVTQUJMRV9CYCBiaXQgaW4gdGhlIG1iY2FjaGUgZW50cnkgd2hlbiB0aGUgbWF4aW11bSByZWZlcmVuY2UgY291bnQgaXMgcmVhY2hlZCwgd2hpY2ggcHJldmVudHMgdGhlIGJsb2NrIGZyb20gYmVpbmcgcmV1c2VkLgoKSSYjMzk7bSB0aGlua2luZywgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBubyB2aXJ0dWFsaXphdGlvbiB0cmlja3MgbmVlZGVkLCBpdCYjMzk7cyBqdXN0IHBsYWluIGV4dDQgb3BlcmF0aW9ucy4gR2l2ZW4gdGhhdCB0aGlzIGRlYWxzIHdpdGggYSBjb3JlIGZpbGVzeXN0ZW0gZmVhdHVyZSwgeGF0dHJzLCBJIHdvdWxkIHNheSBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVmZXJlbmNlIGNvdW50cyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHByaW1lIGFyZWFzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpcz8gSXQgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB3aGljaCB3ZSBuZWVkIHRvIGVuYWJsZSwgYW5kIGdpdmVuIHRoYXQgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIG1iY2FjaGUsIHRoYXQgbXVzdCBhbHNvIGJlIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX01CQ0FDSEVgIGlzIHVzZWQgZm9yIG1iY2FjaGUgYW5kIHZlcmlmeSBpdCBpcyBzZWxlY3RlZCBieSBgRVhUNF9GU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUJDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqSW52ZXN0aWdhdGluZyBNQkNBQ0hFIFNlbGVjdGlvbiB3aXRoaW4gZXh0NCBLY29uZmlnKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyBgTUJDQUNIRWAgaXMgc2VsZWN0ZWQuIFRoaXMgc3VnZ2VzdHMgYSBkZXBlbmRlbmN5IG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGJsb2NrIGNhY2hpbmcgaW4gZXh0NCwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgaXQuIEtub3dpbmcgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSB3aWxsIGhlbHAgbWUgaW4gW2luc2VydCBleHBlcnQtbGV2ZWwgYXBwbGljYXRpb24sIGUuZy4sIGRlYnVnZ2luZyBhIHNwZWNpZmljIHBlcmZvcm1hbmNlIGlzc3VlLCB2ZXJpZnlpbmcgYSBidWlsZCBjb25maWd1cmF0aW9uLCBldGMuXS4gTXkgZm9jdXMgaXMgc2hhcnAsIGFzIEkgZXhwZWN0IHRvIHF1aWNrbHkgcGlucG9pbnQgd2hlcmUgYE1CQ0FDSEVgIGJlY29tZXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBkcml2ZSB0aGF0IGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNQkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMzMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBDYWNoZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCwgYW5kIGl0JiMzOTtzIHBvaW50aW5nIG1lIGRpcmVjdGx5IHRvIHRoZSBjb3JlIG9mIHRoZSBmaWxlIHN5c3RlbSBjYWNoZSBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYGZzL21iY2FjaGUuY2AsIG9yIHNvbWV0aGluZyBjbG9zZWx5IGFuYWxvZ291cyBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmlzbXMgZm9yIG1hbmFnaW5nIHRoZSBtZXRhZGF0YSBjYWNoZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjYWNoZSBlbnRyaWVzIGFyZSBjcmVhdGVkLCBpbnZhbGlkYXRlZCwgYW5kIGFjY2Vzc2VkLiBUaGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlOiBob3cgdGhlIG1iY2FjaGVzIGFyZSBhY2Nlc3NlZCwgaG93IGxvb2t1cHMgd29yayAoYXJlIHRoZXkgaGFzaCB0YWJsZXM/IEItdHJlZXM/KSwgd2hhdCB0aGUgY2FjaGUgcmVwbGFjZW1lbnQgcG9saWNpZXMgYXJlLCBhbmQgaG93IHN5bmNocm9uaXphdGlvbiBpcyBoYW5kbGVkLiBJcyBpdCBsb2NraW5nLWludGVuc2l2ZT8gV2hhdCBhYm91dCBjb25jdXJyZW5jeSBpc3N1ZXM/IERvZXMgaXQgdXNlIGFueSBzcGVjaWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2U/IFVuZGVyc3RhbmRpbmcgdGhlIGdyYW51bGFyIGRldGFpbHMgaGVyZSB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIGRvd24gdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9Mzc9c291cmNlIFwmIzM0O2ZzL2piZDIvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy0zOC1cbmZzL0tjb25maWc6Mzk6Y29uZmlnIEZTX01CQ0FDSEVcbmZzL0tjb25maWctNDAtIyBNZXRhIGJsb2NrIGNhY2hlIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIChleHQyL2V4dDMvZXh0NClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEZTX01CQ0FDSEUqKgoKUmlnaHQsIHNvIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIGBGU19NQkNBQ0hFYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgZnMvZXh0NC9LY29uZmlnYCBzb3VuZHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLiBUaGF0IGZpbGUgc2hvdWxkIGRlZmluZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYW5kLCBieSBhc3NvY2lhdGlvbiwgbWVtb3J5IGJ1ZmZlciBjYWNoaW5nIHdpdGhpbiB0aGF0IGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHF1aWNrbHkgc2NhbiBmb3IgYEZTX01CQ0FDSEVgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBjb250cm9sbGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGU19NQkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzaXRpbmcgZXh0NCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgZm9yIHRoaXMgY3VycmVudCB3b3JrLiBHaXZlbiBteSBleHBlcmllbmNlLCBhIGN1cnNvcnkgZ2xhbmNlIG1pZ2h0IGJlIHN1ZmZpY2llbnQsIGJ1dCBJIG5lZWQgdG8gYmUgZGlsaWdlbnQgYWJvdXQgZXZlcnkgc2V0dGluZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHNlY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUgSSYjMzk7bSBleGFtaW5pbmcsIGJ1dCBJJiMzOTtsbCBhbHNvIHNjYW4gZm9yIGFueXRoaW5nIGFkamFjZW50IHRoYXQgbWlnaHQgaGF2ZSBhbiBpbXBhY3QsIGFueSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBiZSBhdCBwbGF5LiBHb3R0YSBiZSB0aG9yb3VnaC4gSSB3YW50IHRvIHJ1bGUgb3V0IGFueSBzdWJ0bGUgY29uZmxpY3RzIG9yIGRlcGVuZGVuY2llcyAqYmVmb3JlKiBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLiBObyBzdXJwcmlzZXMgdGhpcyB0aW1lIGFyb3VuZC4gSSYjMzk7bGwgcGFydGljdWxhcmx5IGxvb2sgZm9yIGFueSByZWNlbnQgY2hhbmdlcyBvciBjb21taXRzIHRoYXQgbWlnaHQgaGF2ZSBhZmZlY3RlZCB0aGUgZGVmYXVsdCBvcHRpb25zLiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfTUJDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDUxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGU19NQkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBgbWJjYWNoZWAgYW5kIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gZXh0NCYjMzk7cyBgbWJjYWNoZWAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLkkmIzM5O20gbXVsbGluZyBvdmVyIGBtYmNhY2hlYCBhbmQgaXRzIHJvbGUgd2l0aGluIGV4dDQsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBob3cgaXQmIzM5O3MgYWN0dWFsbHkgKnVzZWQqLiBJIGtub3cgaXQgZXhpc3RzLCBjb25jZXB0dWFsbHksIGFzIGEgbWV0YWRhdGEgYmxvY2sgY2FjaGluZyBtZWNoYW5pc20uIEJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGltcGxlbWVudGF0aW9uLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgbWV0YWRhdGEgYmxvY2tzIOKAkyBpbm9kZXMsIGJpdG1hcHMsIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCB0aGUgam91cm5hbCwgdGhlIHdvcmtzLiBIb3cgZG9lcyBgbWJjYWNoZWAgaW50ZXJhY3Qgd2l0aCAqdGhvc2UqPyBJcyBpdCBhY3RpbmcgYXMgYSBkaXJlY3QgY2FjaGUgZm9yIHRob3NlIGJsb2NrcywgcmVkdWNpbmcgdGhlIG5lZWQgZm9yIGRpc2sgSS9PIHdoZW4gdGhleSBhcmUgZnJlcXVlbnRseSBhY2Nlc3NlZD8gT3IgaXMgaXQgbW9yZSBvZiBhIGJ1ZmZlciwgbWF5YmUgYSBzdGFnaW5nIGFyZWEsIGZvciBibG9jayBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBvcGVyYXRpb25zIGJlZm9yZSB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIGFyZSB1cGRhdGVkIG9uIGRpc2s/CgpJIGtub3cgZXh0NCBlbXBsb3lzIHNldmVyYWwgc3RyYXRlZ2llcyB0byBvcHRpbWl6ZSBtZXRhZGF0YSBhY2Nlc3MsIGxpa2UgYmxvY2sgZ3JvdXAgbG9jYWxpdHkgYW5kIGpvdXJuYWxpbmcuIEJ1dCB3aGVyZSBkb2VzIGBtYmNhY2hlYCBmaXQgaW50byAqdGhhdCogcGljdHVyZT8gSXMgaXQgdXNlZCBmb3IgZmFzdGVyIGlub2RlIGxvb2t1cHMsIG9yIHBlcmhhcHMgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBvZiBuZXcgYmxvY2tzIGluIHNwZWNpZmljIGJsb2NrIGdyb3Vwcywgb3IgYm90aD8KCkkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSB0eXBpY2FsIGV4dDQgcmVhZCBhbmQgd3JpdGUgcGF0aHMuIFdoZXJlIGRvZXMgdGhlIGBtYmNhY2hlYCBnZXQgY2FsbGVkIHdpdGhpbiB0aG9zZSBwYXRocz8gQXJlIHRoZXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRpZWQgaW50byBpdD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgYG1iY2FjaGVgIG9wZXJhdGlvbnMgKGdldCwgcHV0LCB1cGRhdGUgZXRjKS4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgd2hlbiBibG9ja3MgYXJlIGNhY2hlZD8KRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgaG93IGBtYmNhY2hlYCByZWR1Y2VzIGxhdGVuY3kgZm9yIG1ldGFkYXRhIG9wZXJhdGlvbnMgd2l0aGluIGV4dDQsIGFuZCB3aGF0IHRoZSBjb3JlIGFsZ29yaXRobXMgYXJlLiBBbmQgSSBuZWVkIHRvIGdldCB0aGUgJiMzNDtiaWcgcGljdHVyZSYjMzQ7IG9mIHRoZSByb2xlIG9mIGBtYmNhY2hlYCBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgZXh0NCYjMzk7cyBvdmVyYWxsIHBlcmZvcm1hbmNlIHN0cmF0ZWdpZXMsIGFuZCBtYXliZSBob3cgaXQgYWZmZWN0cyB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHdvcmtsb2Fkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWJjYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTEwNDg9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTI0OS0gKi9cbmZzL2V4dDQvZXh0NC5oOjEyNTA6I2RlZmluZSBFWFQ0X01PVU5UX05PX01CQ0FDSEVcdFx0MHgwMDAwMSAvKiBEbyBub3QgdXNlIG1iY2FjaGUgKi9cbmZzL2V4dDQvZXh0NC5oLTEyNTEtI2RlZmluZSBFWFQ0X01PVU5UX0dSUElEXHRcdDB4MDAwMDRcdC8qIENyZWF0ZSBmaWxlcyB3aXRoIGRpcmVjdG9yeSYjMzk7cyBncm91cCAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNzEyLVx0T3B0X2Rpc2NhcmQsIE9wdF9ub2Rpc2NhcmQsIE9wdF9pbml0X2l0YWJsZSwgT3B0X25vaW5pdF9pdGFibGUsXG5mcy9leHQ0L3N1cGVyLmM6MTcxMzpcdE9wdF9tYXhfZGlyX3NpemVfa2IsIE9wdF9ub2pvdXJuYWxfY2hlY2tzdW0sIE9wdF9ub21iY2FjaGUsXG5mcy9leHQ0L3N1cGVyLmMtMTcxNC1cdE9wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBPcHRfbWJfb3B0aW1pemVfc2Nhbixcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTc2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGV4dDRfcGFyYW1fc3BlY3NbXSA9IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTg0NS1cdGZzcGFyYW1fZmxhZ1x0KFwmIzM0O2lubGluZWNyeXB0XCYjMzQ7LFx0XHRPcHRfaW5saW5lY3J5cHQpLFxuZnMvZXh0NC9zdXBlci5jOjE4NDY6XHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtub21iY2FjaGVcJiMzNDssXHRcdE9wdF9ub21iY2FjaGUpLFxuZnMvZXh0NC9zdXBlci5jOjE4NDc6XHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtub19tYmNhY2hlXCYjMzQ7LFx0XHRPcHRfbm9tYmNhY2hlKSxcdC8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXG5mcy9leHQ0L3N1cGVyLmMtMTg0OC1cdGZzcGFyYW1fZmxhZ1x0KFwmIzM0O3ByZWZldGNoX2Jsb2NrX2JpdG1hcHNcJiMzNDssXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk0Mi1cdHtPcHRfanFmbXQsIDAsIE1PUFRfUUZNVH0sXG5mcy9leHQ0L3N1cGVyLmM6MTk0MzpcdHtPcHRfbm9tYmNhY2hlLCBFWFQ0X01PVU5UX05PX01CQ0FDSEUsIE1PUFRfU0VUfSxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ0LVx0e09wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBFWFQ0X01PVU5UX05PX1BSRUZFVENIX0JMT0NLX0JJVE1BUFMsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTY1NTg9c3RhdGljIGludCBfX2V4dDRfcmVtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTY2NTctXHRpZiAoKHNiaS1cdTAwM2VzX21vdW50X29wdCBeIG9sZF9vcHRzLnNfbW91bnRfb3B0KSBcdTAwMjYgRVhUNF9NT1VOVF9OT19NQkNBQ0hFKSB7XG5mcy9leHQ0L3N1cGVyLmM6NjY1ODpcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDtjYW4mIzM5O3QgZW5hYmxlIG5vbWJjYWNoZSBkdXJpbmcgcmVtb3VudFwmIzM0Oyk7XG5mcy9leHQ0L3N1cGVyLmMtNjY1OS1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNTYtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5mcy9leHQ0L3hhdHRyLmM6NTc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWJjYWNoZS5oXHUwMDNlXG5mcy9leHQ0L3hhdHRyLmMtNTgtI2luY2x1ZGUgXHUwMDNjbGludXgvcXVvdGFvcHMuaFx1MDAzZVxuLS1cbmZzL2V4dDQveGF0dHIuYz00MjQ9c3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2lnZXQoc3RydWN0IGlub2RlICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgZWFfaW5vLFxuLS1cbmZzL2V4dDQveGF0dHIuYy00NzAtXG5mcy9leHQ0L3hhdHRyLmM6NDcxOi8qIFJlbW92ZSBlbnRyeSBmcm9tIG1iY2FjaGUgd2hlbiBFQSBpbm9kZSBpcyBnZXR0aW5nIGV2aWN0ZWQgKi9cbmZzL2V4dDQveGF0dHIuYy00NzItdm9pZCBleHQ0X2V2aWN0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjA4MC1cdFx0XHRcdFx0LypcbmZzL2V4dDQveGF0dHIuYzoyMDgxOlx0XHRcdFx0XHQgKiBVbmRvIGV2ZXJ5dGhpbmcgYW5kIGNoZWNrIG1iY2FjaGVcbmZzL2V4dDQveGF0dHIuYy0yMDgyLVx0XHRcdFx0XHQgKiBhZ2Fpbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipFeGFtaW5pbmcgdGhlIEVYVDQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJdCBzZWVtcyBJIHJlbWVtYmVyIGBGU19NQkNBQ0hFYCBiZWluZyBzb21laG93IHRpZWQgdG8gYEVYVDRfRlNgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gV2hlcmUgd2FzIHRoYXQgc2V0dGluZyBkZWZpbmVkIGFnYWluPyBBaCwgeWVzLCBpdCYjMzk7cyBpbiBgZnMvZXh0NC9LY29uZmlnYC4gTGV0IG1lIGdvIGJhY2sgYW5kIGhhdmUgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoYXQgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWV0YWRhdGEgYmxvY2sgY2FjaGUgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZTX01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEZTX01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlNfTUJDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NzEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIERpdmUgZm9yIGBGU19NQkNBQ0hFYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBvdXQgYWJvdXQgYEZTX01CQ0FDSEVgLiBUaGF0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBkZWZpbmVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBUaGVyZWZvcmUsIG15IGZpcnN0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBhbnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBwcm9tcHQgdGV4dCB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoaXMgb3B0aW9uICpkb2VzKiB0byB1c2Vycy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBgRlNfTUJDQUNIRWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX01CQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9Mzc9c291cmNlIFwmIzM0O2ZzL2piZDIvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy0zOC1cbmZzL0tjb25maWc6Mzk6Y29uZmlnIEZTX01CQ0FDSEVcbmZzL0tjb25maWctNDAtIyBNZXRhIGJsb2NrIGNhY2hlIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIChleHQyL2V4dDMvZXh0NClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzkuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvLi4uIHdlbGwsIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgKnlldCosIGJ1dCBvZnRlbiBLY29uZmlnIGZpbGVzIGRlYWwgd2l0aCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24uIExpbmUgMzkgY291bGQgYmUgYSBkZXBlbmRlbmN5IGRlZmluaXRpb24sIGFuIG9wdGlvbiwgb3IgYSBjb21tZW50IHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB0aGVyZSB0byBwaWVjZSB0b2dldGhlciB0aGUgZ3JlYXRlciBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzb3VyY2UgXCYjMzQ7ZnMvZXh0Mi9LY29uZmlnXCYjMzQ7XG4gIDM2Olx0c291cmNlIFwmIzM0O2ZzL2V4dDQvS2NvbmZpZ1wmIzM0O1xuICAzNzpcdHNvdXJjZSBcJiMzNDtmcy9qYmQyL0tjb25maWdcJiMzNDtcbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgRlNfTUJDQUNIRVxuICA0MDpcdCMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpXG4gIDQxOlx0XHR0cmlzdGF0ZVxuICA0MjpcdFx0ZGVmYXVsdCB5IGlmIEVYVDJfRlM9eSBcdTAwMjZcdTAwMjYgRVhUMl9GU19YQVRUUlxuICA0MzpcdFx0ZGVmYXVsdCB5IGlmIEVYVDRfRlM9eVxuICA0NDpcdFx0ZGVmYXVsdCBtIGlmIEVYVDJfRlNfWEFUVFIgfHwgRVhUNF9GU1xuICA0NTpcdFxuICA0NjpcdHNvdXJjZSBcJiMzNDtmcy9qZnMvS2NvbmZpZ1wmIzM0O1xuICA0NzpcdFxuICA0ODpcdHNvdXJjZSBcJiMzNDtmcy94ZnMvS2NvbmZpZ1wmIzM0O1xuICA0OTpcdHNvdXJjZSBcJiMzNDtmcy9nZnMyL0tjb25maWdcJiMzNDtcbiAgNTA6XHRzb3VyY2UgXCYjMzQ7ZnMvb2NmczIvS2NvbmZpZ1wmIzM0O1xuICA1MTpcdHNvdXJjZSBcJiMzNDtmcy9idHJmcy9LY29uZmlnXCYjMzQ7XG4gIDUyOlx0c291cmNlIFwmIzM0O2ZzL25pbGZzMi9LY29uZmlnXCYjMzQ7XG4gIDUzOlx0c291cmNlIFwmIzM0O2ZzL2YyZnMvS2NvbmZpZ1wmIzM0O1xuICA1NDpcdHNvdXJjZSBcJiMzNDtmcy96b25lZnMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzMAoJCQkJCQkJb3V0cHV0OiAxMTYKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgWGF0dHIgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYEZTX01CQ0FDSEVgIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIGBFWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBtZWFuaW5nIG15IHByaW1hcnkgZm9jdXMgaXMgc29sZWx5IG9uIGBFWFQ0X0ZTYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGEgdG9wLWxldmVsIGNvbmZpZywgdGhhbmtmdWxseSwgc28gbm8gZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0IHRoZXJlLgoKTXkgaW1tZWRpYXRlIGxpc3Qgb2YgY29uZmlncyBpczoKYEVYVDRfRlNgCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHhhdHRyIG1hbmlwdWxhdGlvbiwgSSBzZWUgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGdsYW5jZWQgYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gaXQgY2FuJiMzOTt0IGJlIHVzZWQgZXh0ZXJuYWxseSBhbmQgZG9lc24mIzM5O3Qgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW4gdGhpcyBjb250ZXh0LiBgZXh0NF94YXR0cl9zZXRgIGFwcGVhcnMgdG8gYmUgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCB3aGlsZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBpcyB1c2VkIGluIHRoZSBwcmVzZW5jZSBvZiBhIHRyYW5zYWN0aW9uIGhhbmRsZS4gQm90aCBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nLgoKTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZiwgSSBjYW4gc2VlIHdoYXQgaXMgaGFwcGVuaW5nLiBUaGUgcGF0Y2ggY29ycmVjdHMgYSBidWcgcmVsYXRlZCB0byB0aGUgeGF0dHIgcmVmZXJlbmNlIGNvdW50LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQgKmJlZm9yZSogY2hlY2tpbmcgaWYgaXQgaGFkIHJlYWNoZWQgdGhlIG1heGltdW0sIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gaW50ZWdlciBvdmVyZmxvdy4gVGhlIHVwZGF0ZWQgdmVyc2lvbiBjaGVja3MgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBhdCBpdHMgbWF4aW11bSAqYmVmb3JlKiBpbmNyZW1lbnRpbmcuIElmIGl0IGlzIGF0IHRoZSBtYXhpbXVtLCB0aGUgcHJvY2VzcyB0aGVuIGNsZWFycyB0aGUgYE1CRV9SRVVTQUJMRV9CYCBmbGFnIG9uIHRoZSBjYWNoZSBlbnRyeSB0byBwcmV2ZW50IHRoZSBidWZmZXIgZnJvbSBiZWluZyByZXVzZWQsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGZpeC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgaW1wYWN0aW5nIHVzZXJzcGFjZSB0aHJvdWdoIGBzZXR4YXR0cmAgc3lzY2FsbHMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIGEgdXNlcmxhbmQgcHJvZ3JhbSBhbmQgaXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB1cGRhdGVkIGNvbmZpZywgdGhlbiwgaXM6CmBFWFQ0X0ZTYAoKRm9jdXMgc3ltYm9sczoKYGV4dDRfeGF0dHJfc2V0YApgZXh0NF94YXR0cl9zZXRfaGFuZGxlYAoKSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU3OjUxLjQ0NjE1MTU2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTQ0NjAwODkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTc6NTEuNDQ2MTU5NDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMzNTU4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OWJkNDUyYzU4Yzg5ZTEzNzliNjZhY2M1OTcxNjkzODVlNzZiZThkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTY6NTc6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXFxuaW5kZXggOTgyYTFmODMxZTIyOC4uM2MxYmI1NDdiMmY1NCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMjA3NSwxMiArMjA3NSwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHQgKiBzdGFibGUgc28gd2UgY2FuIGNoZWNrIHRoZSBhZGRpdGlvbmFsXFxuIFxcdFxcdFxcdFxcdCAqIHJlZmVyZW5jZSBmaXRzLlxcbiBcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0cmVmID0gbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVxcdTAwM2VoX3JlZmNvdW50KSArIDE7XFxuLVxcdFxcdFxcdFxcdGlmIChyZWYgXFx1MDAzZSBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkge1xcbitcXHRcXHRcXHRcXHRyZWYgPSBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXFx1MDAzZWhfcmVmY291bnQpO1xcbitcXHRcXHRcXHRcXHRpZiAocmVmIFxcdTAwM2U9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7XFxuIFxcdFxcdFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdFxcdFxcdCAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZVxcbiBcXHRcXHRcXHRcXHRcXHQgKiBhZ2Fpbi5cXG4gXFx0XFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdFxcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXFx1MDAyNmNlLVxcdTAwM2VlX2ZsYWdzKTtcXG4gXFx0XFx0XFx0XFx0XFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xcbiBcXHRcXHRcXHRcXHRcXHRkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgRVhUNF9DMkIoRVhUNF9TQihzYiksXFxuQEAgLTIwOTEsNiArMjA5Miw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdG5ld19iaCA9IE5VTEw7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gaW5zZXJ0ZWQ7XFxuIFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0cmVmKys7XFxuIFxcdFxcdFxcdFxcdEJIRFIobmV3X2JoKS1cXHUwMDNlaF9yZWZjb3VudCA9IGNwdV90b19sZTMyKHJlZik7XFxuIFxcdFxcdFxcdFxcdGlmIChyZWYgPT0gRVhUNF9YQVRUUl9SRUZDT1VOVF9NQVgpXFxuIFxcdFxcdFxcdFxcdFxcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXFx1MDAyNmNlLVxcdTAwM2VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTc6NTEuOTIwNTA2MDU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg0OTcxNjQxNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIGlzc3VlIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNldHhhdHRyIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWJkNDUyYzU4Yzg5ZTEzNzliNjZhY2M1OTcxNjkzODVlNzZiZThkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxNjo1Nzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uM2MxYmI1NDdiMmY1NCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMjA3NSwxMiArMjA3NSwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICogc3RhYmxlIHNvIHdlIGNhbiBjaGVjayB0aGUgYWRkaXRpb25hbFxuIFx0XHRcdFx0ICogcmVmZXJlbmNlIGZpdHMuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHJlZiA9IGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50KSArIDE7XG4tXHRcdFx0XHRpZiAocmVmIFx1MDAzZSBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWCkge1xuK1x0XHRcdFx0cmVmID0gbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVx1MDAzZWhfcmVmY291bnQpO1xuK1x0XHRcdFx0aWYgKHJlZiBcdTAwM2U9IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIFVuZG8gZXZlcnl0aGluZyBhbmQgY2hlY2sgbWJjYWNoZVxuIFx0XHRcdFx0XHQgKiBhZ2Fpbi5cbiBcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdGNsZWFyX2JpdChNQkVfUkVVU0FCTEVfQiwgXHUwMDI2Y2UtXHUwMDNlZV9mbGFncyk7XG4gXHRcdFx0XHRcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbiBcdFx0XHRcdFx0ZHF1b3RfZnJlZV9ibG9jayhpbm9kZSxcbiBcdFx0XHRcdFx0XHRcdCBFWFQ0X0MyQihFWFQ0X1NCKHNiKSxcbkBAIC0yMDkxLDYgKzIwOTIsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRuZXdfYmggPSBOVUxMO1xuIFx0XHRcdFx0XHRnb3RvIGluc2VydGVkO1xuIFx0XHRcdFx0fVxuK1x0XHRcdFx0cmVmKys7XG4gXHRcdFx0XHRCSERSKG5ld19iaCktXHUwMDNlaF9yZWZjb3VudCA9IGNwdV90b19sZTMyKHJlZik7XG4gXHRcdFx0XHRpZiAocmVmID09IEVYVDRfWEFUVFJfUkVGQ09VTlRfTUFYKVxuIFx0XHRcdFx0XHRjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsIFx1MDAyNmNlLVx1MDAzZWVfZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTc6NTEuOTIwNTA3ODY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3NzE4MzUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgZXh0NCB4YXR0ciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2V4dDQveGF0dHIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBmdW5jdGlvbi4gVGhlIGNvZGUgc25pcHBldCBJJ20gc2VlaW5nIGludm9sdmVzIGEgY2hhbmdlIGluIGhvdyB3ZSBoYW5kbGUgeGF0dHIgYmxvY2sgcmVmZXJlbmNlIGNvdW50cyB3aGVuIHRoZXkgaGl0IHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUsIGBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWGAuIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQgKmJlZm9yZSogdGhlIGNoZWNrLCBidXQgbm93IGl0IHNlZW1zIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgcmVmY291bnQgKmFscmVhZHkqIGVxdWFscyB0aGUgbWF4aW11bS4gVGhlIGtleSBoZXJlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBpbmNyZW1lbnQgd2l0aCBhbiBlcXVhbGl0eSBjaGVjayBhbmQgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9iaXQoTUJFX1JFVVNBQkxFX0IsIFx1MDAyNmNlLVx1MDAzZWVfZmxhZ3MpYCB3aXRoaW4gdGhhdCBgaWZgIGJsb2NrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgcmV1c2Ugb2YgYSBidWZmZXIuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgYSBuZXcgcmVmZXJlbmNlIGlzIGF0dGVtcHRlZCB3aGVuIHRoZSBjb3VudCBpcyBhdCB0aGUgbWF4aW11bSwgYW5kIGluc3RlYWQgb2YgZmFpbGluZywgd2UncmUgY2xlYXJpbmcgYSBmbGFnIHJlbGF0ZWQgdG8gcmV1c2FiaWxpdHkuIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGV4dDQgeGF0dHIgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aGVuIHdlIGhpdCB0aGUgcmVmY291bnQgbGltaXQgd2hpbGUgYWRkaW5nIGEgbmV3IHJlZmVyZW5jZS4gSXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseSwgYXMgYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIHRoaXMgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzIGZvciBidWdzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNoYW5nZSBpcyBjb3JyZWN0IGFuZCBub3QgaW50cm9kdWNlIGEgcmVncmVzc2lvbiwgYW5kIGl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUuIEkgcmVtZW1iZXIgYEVYVDRfRlNgIGlzIHRoZSBtYWluIG9uZSwgYW5kIEkgKnRoaW5rKiBgRVhUNF9GU19YQVRUUmAgaXMgYW5vdGhlciBvbmUsIHRob3VnaCBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3Igc2VsZWN0ZWQgYXV0b21hdGljYWxseS4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhpcyBpbiBgZnMvZXh0NC9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MDAuMzk3Njk1MzEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzg2MzcyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNfWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODowMC41NzU1Njg3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzU2ODY4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRVhUNCBDb25maWd1cmF0aW9uIElzc3VlKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYSBwb3NzaWJsZSBpc3N1ZSBoZXJlIHdpdGggYW4gYEVYVDRfRlNfWEFUVFJgIHNldHRpbmcuIFRoYXQgbmFtZSBkb2Vzbid0IGltbWVkaWF0ZWx5IHJpbmcgYSBiZWxsLCBvciBtYXliZSBpdCdzIGp1c3QgYmVlbiByZW5hbWVkIGluIGEgbW9yZSByZWNlbnQga2VybmVsIHZlcnNpb24/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJJ2xsIHNlYXJjaCBmb3IgYFhBVFRSYCBhbmQgc2VlIHdoYXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGF2YWlsYWJsZSBhbmQgd2hldGhlciB0aGUgb2xkIG5hbWluZyBjb252ZW50aW9uIGlzIG5vdyBkZXByZWNhdGVkIG9yIGludGVncmF0ZWQgdW5kZXIgYSBicm9hZGVyIGBFWFQ0X0ZTYCBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCBvciBhIG1vcmUgZnVuZGFtZW50YWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtJ3MgY29uZmlndXJhdGlvbiwgc28gSSBzaG91bGQgYmUgcXVpY2sgdG8gZmluZCB0aGUgcmlnaHQgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjAzLjYxMTI1ODM1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM3NTczOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODowMy42ODg2NDE2MTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU3NzQ1Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRVhUNCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgS2NvbmZpZyBmaWxlLCBvZiBjb3Vyc2UuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEknbGwganVzdCBvcGVuIHVwIGBmcy9leHQ0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQgaW5pdGlhbGx5OyBsZXQncyBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlLiBBbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIGBncmVwYCBmb3IgYEVYVDRfRlNgIGNvdWxkIGJlIGEgZmFzdGVyIHdheSB0byBmaW5kIHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMgb3IgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBpZiB0aGUgZmlsZSBpcyB2ZXJ5IGxhcmdlIG9yIGNvbXBsZXgsIHNvIEkgbWlnaHQganVzdCBzdGFydCB3aXRoIHRoYXQgYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBmaWxlLiBUaGF0IHdvdWxkIGJlIHRoZSBlZmZpY2llbnQgYXBwcm9hY2ggZm9yIGEgcHJvamVjdCBvZiB0aGlzIG5hdHVyZSwgZ2l2ZW4gdGhlIHRpbWUgY29uc3RyYWludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODowNy45NDYzODk1NjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxMzczOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjA4LjAzMjUzMjM5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzODYzNzA3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVYVDQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgRVhUNF9GU2AgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBjb3JlLiBOb3csIHdoZW4gZGVhbGluZyB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYC4gVGhvc2UgY291bGQgZGVmaW5pdGVseSBiZSByZWxldmFudC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIGlmIGl0J3MgZXhwb3J0ZWQgb3IgaWYgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IGhvdyBpdCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSwgYW5kIHRoZXJlZm9yZSBob3cgeGF0dHJzIGNhbiBiZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MTYuNDE4OTA2MDczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3OTM2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xMjcyPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyOTQtXFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTI5NTpcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xcbmZzL2V4dDQveGF0dHIuYy0xMjk2LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4OTg9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzoxODk5OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5MDAtXFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE5NDQtXFx0XFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTk0NTpcXHRcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxcbmZzL2V4dDQveGF0dHIuYy0xOTQ2LVxcdFxcdFxcdCAqIGJsb2NrXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjM1MT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQzNC1cXHRcXHRlbHNlIGlmICghYnMucy5ub3RfZm91bmQpXFxuZnMvZXh0NC94YXR0ci5jOjI0MzU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQzNi1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI0NTEtXFx0XFx0XFx0aS52YWx1ZSA9IE5VTEw7XFxuZnMvZXh0NC94YXR0ci5jOjI0NTI6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQ1My1cXHRcXHR9IGVsc2UgaWYgKGVycm9yID09IC1FTk9TUEMpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNDYwLVxcdFxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjQ2MTpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2YnMpO1xcbmZzL2V4dDQveGF0dHIuYy0yNDYyLVxcdFxcdFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIWlzLnMubm90X2ZvdW5kKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjYwNz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI2NzItXFx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNjczOlxcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIGJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjY3NC1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjE2LjYyNTcwNzc2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI4MzU4MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYYXR0ciBCbG9jayBTZXR0aW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSwgaGlkZGVuIGZyb20gZGlyZWN0IGV4dGVybmFsIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaG8ncyB1c2luZyB0aGlzIHRoaW5nP1wiIExldCdzIHNlZS4uLiB0aGUgY29kZSB0ZWxscyBtZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhbmQgYGV4dDRfeGF0dHJfbW92ZV90b19ibG9ja2AgYXJlIHRoZSBjYWxsZXJzLiBGaW5lLCBnb29kIHRvIGtub3cuIE5vdywgc2luY2UgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgcHJvY2VzcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gR290dGEgdW5kZXJzdGFuZCB3aGF0ICppdCdzKiBkb2luZyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBkb2VzLiBUaGF0IGNhbGwgcGF0aCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy4gVGltZSB0byBkaWcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODoyMC4wNTQwNjg5ODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg0MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3NldF9oYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yMzIwPXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfeGF0dHJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjMzOC0vKlxcbmZzL2V4dDQveGF0dHIuYzoyMzM5OiAqIGV4dDRfeGF0dHJfc2V0X2hhbmRsZSgpXFxuZnMvZXh0NC94YXR0ci5jLTIzNDAtICpcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMzUwPWludFxcbmZzL2V4dDQveGF0dHIuYzoyMzUxOmV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCxcXG5mcy9leHQ0L3hhdHRyLmMtMjM1Mi1cXHRcXHQgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTAzPWludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjUzMi0gKlxcbmZzL2V4dDQveGF0dHIuYzoyNTMzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxcbmZzL2V4dDQveGF0dHIuYy0yNTM0LSAqIGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gaXMgYSBmaWxlc3lzdGVtIHRyYW5zYWN0aW9uIGJ5IGl0c2VsZi5cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTM5PWV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NjItXFxuZnMvZXh0NC94YXR0ci5jOjI1NjM6XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjIwLjIxMjkxNzkxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAwMjY5NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgZXh0NCBYQVRUUiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpIGFyZSBoYW5kbGVkIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkndmUgZ290IGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9zZXRgIGluIG15IHNpZ2h0cywgYW5kIGl0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgdGhhdCB0aGV5J3JlIGJvdGggZGVjbGFyZWQgbm9uLXN0YXRpYy4gVGhhdCB0ZWxscyBtZSB0aGV5J3JlIGxpa2VseSBkZXNpZ25lZCBmb3IgdXNlIG91dHNpZGUgdGhlaXIgaW1tZWRpYXRlIHNvdXJjZSBmaWxlLCBwZXJoYXBzIGZvciBzb21lIHNvcnQgb2YgbW9kdWxhcml0eSBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBTaW5jZSB0aGV5J3JlIG5vdCBzdGF0aWMsIHRoZSBzY29wZSBvZiB0aGUgbWV0aG9kIGlzIHdpZGVyIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC5cblxuTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gYGV4dDRfeGF0dHJfc2V0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBYQVRUUiBmdW5jdGlvbmFsaXR5LiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIGRpZyBpbnRvIGl0cyBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGRvaW5nIG9uIGEgZGVlcGVyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MjMuNTEzMTkwNzQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODI5ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTkyOD1zdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtOTM4LVxcbmZzL2V4dDQveGF0dHIuYzo5Mzk6aW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuYy05NDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsb2NrX2JoLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE1Nzg9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTYyOC1cXG5mcy9leHQ0L3hhdHRyLmM6MTYyOTpzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuZnMvZXh0NC94YXR0ci5jLTE2MzAtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoICpzLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xOTYyLVxcdFxcdFxcdGVhX2JkZWJ1Zyhicy1cXHUwMDNlYmgsIFxcXCJtb2RpZnlpbmcgaW4tcGxhY2VcXFwiKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTk2MzpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5NjQtXFx0XFx0XFx0XFx0XFx0ICAgICBlYV9pbm9kZSwgdHJ1ZSAvKiBpc19ibG9jayAqLyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTk5MC1cXHRcXHQgKiBJZiBleGlzdGluZyBlbnRyeSBwb2ludHMgdG8gYW4geGF0dHIgaW5vZGUsIHdlIG5lZWRcXG5mcy9leHQ0L3hhdHRyLmM6MTk5MTpcXHRcXHQgKiB0byBwcmV2ZW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KCkgZnJvbSBkZWNyZW1lbnRpbmdcXG5mcy9leHQ0L3hhdHRyLmMtMTk5Mi1cXHRcXHQgKiByZWYgY291bnQgb24gaXQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gdGhlXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjAzMS1cXG5mcy9leHQ0L3hhdHRyLmM6MjAzMjpcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yMDMzLVxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBpc19ibG9jayAqLyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjI1Nj1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjc2LVxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjI3NzpcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yMjc4LVxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogaXNfYmxvY2sgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIzMjA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMzM4LS8qXFxuZnMvZXh0NC94YXR0ci5jOjIzMzk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcXG5mcy9leHQ0L3hhdHRyLmMtMjM0MC0gKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIzNTA9aW50XFxuZnMvZXh0NC94YXR0ci5jOjIzNTE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxcbmZzL2V4dDQveGF0dHIuYy0yMzUyLVxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIzODgtXFxuZnMvZXh0NC94YXR0ci5jOjIzODk6XFx0XFx0Y3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMzkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTAyLVxcbmZzL2V4dDQveGF0dHIuYzoyNTAzOmludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXFxuZnMvZXh0NC94YXR0ci5jLTI1MDQtXFx0XFx0XFx0ICAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cylcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTE5LVxcdH0gZWxzZSB7XFxuZnMvZXh0NC94YXR0ci5jOjI1MjA6XFx0XFx0KmNyZWRpdHMgPSBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLCBiaCxcXG5mcy9leHQ0L3hhdHRyLmMtMjUyMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmFsdWVfbGVuLCBpc19jcmVhdGUpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1MzAtLypcXG5mcy9leHQ0L3hhdHRyLmM6MjUzMTogKiBleHQ0X3hhdHRyX3NldCgpXFxuZnMvZXh0NC94YXR0ci5jLTI1MzItICpcXG5mcy9leHQ0L3hhdHRyLmM6MjUzMzogKiBMaWtlIGV4dDRfeGF0dHJfc2V0X2hhbmRsZSwgYnV0IHN0YXJ0IGZyb20gYW4gaW5vZGUuIFRoaXMgZXh0ZW5kZWRcXG5mcy9leHQ0L3hhdHRyLmMtMjUzNC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjUzOD1pbnRcXG5mcy9leHQ0L3hhdHRyLmM6MjUzOTpleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU0MC1cXHQgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sIGludCBmbGFncylcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTUxLXJldHJ5OlxcbmZzL2V4dDQveGF0dHIuYzoyNTUyOlxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZSwgdmFsdWVfbGVuLCBmbGFncyBcXHUwMDI2IFhBVFRSX0NSRUFURSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU1My1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNyZWRpdHMpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NjItXFxuZnMvZXh0NC94YXR0ci5jOjI1NjM6XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjIzLjYwMTQ5NTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjE3MTk1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYYXR0ciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBzZXR0aW5nIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBmZWVscyBsaWtlIGEgc29saWQgcGxhY2UgdG8gc3RhcnQ7IGl0J3MgYSBnb29kIHByaW1hcnkgc3ltYm9sIHRvIGZvbGxvdy4gTXkgbmV4dCBtb3ZlIGlzIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBBcmUgdGhlcmUgYW55IG90aGVyIG9idmlvdXMgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gc2V0dGluZyB0aGVzZSBhdHRyaWJ1dGVzPyBBaCwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAganVtcHMgb3V0IGFzIGFub3RoZXIgbGlrZWx5IGNhbmRpZGF0ZS4gQW5kIHdoYXQgYWJvdXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YD8gSXQncyBzdGF0aWMsIHNvIHRoYXQncyBvdXQsIHdlIGNhbid0IGRpcmVjdGx5IHVzZSB0aGF0IGFzIG91ciBmb2N1cy5cblxuVGltZSB0byByZXZpc2l0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIGBFWFQ0X0ZTYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCB3ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGF0LiBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgbGlrZSBgRVhUNF9GU19YQVRUUmAgZGlyZWN0bHkuIFdhaXQgYSBtb21lbnQhIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb21waWxhdGlvbiwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGZzL2V4dDQvTWFrZWZpbGVgIHRvIHNlZSBleGFjdGx5IGhvdyBgeGF0dHIuY2AgaXMgY29tcGlsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyBtaWdodCBnaXZlIHVzIGEgZ29vZCBpbmRpY2F0aW9uIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6MjguMTYzMjE3OTA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIzNjQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTExLVxcdFxcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcXHRcXHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcXHRcXHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVxcdCs9IGFjbC5vXFxuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXFx0XFx0Kz0geGF0dHJfc2VjdXJpdHkub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcXHRcXHRcXHRcXHQrPSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODoyOC4yMzg0NTg3MThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNDQ4MDg2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVYVDQgWEFUVFIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGB4YXR0ci5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgaXQgaW1wbGllcyB0aGF0IGVuYWJsaW5nIGBFWFQ0X0ZTYCBzaG91bGQgYmUgdGhlIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhdCBsZWFzdCBhdCB0aGUgYmFzZSBsZXZlbC5cblxuTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byB2ZXJpZnkgaWYgd2UgbmVlZCBgRVhUNF9GU19TRUNVUklUWWAgb3IgYEVYVDRfRlNfUE9TSVhfQUNMYCB0byBhY3R1YWxseSAqdXNlKiBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbiB0byBjb25maXJtIHdoaWNoIGNvbmZpZyBmbGFncyBhcmUgdHJ1bHkgcmVxdWlyZWQuXG5cbkFscmlnaHQsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgY2FsbGVkIGJ5IGJvdGggYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYW5kIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBEaWdnaW5nIGRlZXBlciwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgZXh0NF94YXR0cl9zZXRgLCBhbmQgKnRoYXQqIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGV4dDRfeGF0dHJfdHJ1c3RlZF9zZXRgLCBgZXh0NF94YXR0cl91c2VyX3NldGAsIGBleHQ0X3hhdHRyX3NlY3VyaXR5X3NldGAsIGFuZCBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCAqYW55KiB4YXR0ciBzZXQgb3BlcmF0aW9uIHNob3VsZCB1bHRpbWF0ZWx5IHJlYWNoIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIHdoaWNoIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbi5cblxuR2l2ZW4gdGhhdCBjaGFpbiBvZiBkZXBlbmRlbmNpZXMsIGl0IGxvb2tzIGxpa2UganVzdCBlbmFibGluZyBgRVhUNF9GU2Agc2hvdWxkIGluZGVlZCBiZSBzdWZmaWNpZW50IHRvIGdldCBldmVyeXRoaW5nIGxpbmtlZCBjb3JyZWN0bHkuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIGZvciBjb25maXJtYXRpb246IGBleHQ0X3hhdHRyX3NldGAsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgcG90ZW50aWFsbHkgYGV4dDRfeGF0dHJfdXNlcl9zZXRgIGFuZCBgZXh0NF94YXR0cl90cnVzdGVkX3NldGAuXG5cbkkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGNvbmZpcm0gdGhpcyBpcyB0byBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9leHQ0L3hhdHRyX3VzZXIuY2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgdXNlci1zcGFjZSBlbnRyeSBwb2ludHMgYXJlLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIHRvIGNvbmZpcm0gaG93IHRoZSB4YXR0ciBzeXN0ZW0gaXMgZW50ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1ODozOC41ODMyNjk4OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODYzNDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3VzZXJfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQveGF0dHJfdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHJfdXNlci5jPTMyPXN0YXRpYyBpbnRcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYzozMzpleHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTM0LVxcdFxcdCAgICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2V4dDQveGF0dHJfdXNlci5jPTQ1PWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyID0ge1xcbi0tXFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDgtXFx0LmdldFxcdD0gZXh0NF94YXR0cl91c2VyX2dldCxcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0OTpcXHQuc2V0XFx0PSBleHQ0X3hhdHRyX3VzZXJfc2V0LFxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjM4Ljc1MTkxMjAzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIwMDg1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgdGhlIHhhdHRyIFNldHRpbmcgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgZXh0NF94YXR0cl91c2VyX3NldGAgaXMgc3RhdGljIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgbWVhbnMgaWYgSSdtIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBhbmFseXplIGluIHJlbGF0aW9uIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGBleHQ0X3hhdHRyX3NldGAgaXMgZGVmaW5pdGVseSB0aGUgYmV0dGVyIGNhbmRpZGF0ZSB0byBmb2N1cyBvbi4gSXQgaGFzIHRvIGJlLCBnaXZlbiB0aGUgb3RoZXIgb25lJ3Mgc3RhdGljIG5hdHVyZS4gTm93LCBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIHRvIHNlZSBpZiBgZXh0NF94YXR0cl9zZXRgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIG9yIHVzZXJsYW5kLiBVbmRlcnN0YW5kaW5nIGl0cyBleHBvcnQgc3RhdHVzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyBJIGNhbiBhcHByb2FjaCBhbmQgaW5zdHJ1bWVudCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjQ1LjA3MTk5OTU2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NDk5OTU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipleHQ0X3hhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU4OjQ1LjI1ODUwOTQxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwNzUzMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleHQ0X3hhdHRyX3NldGAqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfc2V0YC4gSSBrbm93IGl0J3MgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIG15IGZpcnN0IGNsdWUuIE5vdywgbGV0IG1lIGNvbmZpcm0gd2hlcmUgaXQncyBhY3R1YWxseSBkZWZpbmVkOyBJIGJlbGlldmUgSSBzYXcgaXQgaW4gYGZzL2V4dDQveGF0dHIuY2AuIFllcCwgdGhlcmUgaXQgaXMhIEJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXIgZmlsZT8gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L3hhdHRyLmhgLiBJZiBpdCdzIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIsIHRoYXQgY2hhbmdlcyBldmVyeXRoaW5nIGluIHRlcm1zIG9mIGhvdyBJIG5lZWQgdG8gaGFuZGxlIGl0LiBMZXQgbWUgZ2V0IHRoYXQgaGVhZGVyIGZpbGUgb3Blbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6NDkuNTE5MjY1OTA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxOTg3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuaD0xODA9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgxOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgyOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XFxuZnMvZXh0NC94YXR0ci5oOjE4MzpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG5mcy9leHQ0L3hhdHRyLmgtMTg0LVxcdFxcdFxcdFxcdCAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cyk7XFxuZnMvZXh0NC94YXR0ci5oOjE4NTpleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuaC0xODYtXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibG9ja19iaCwgc2l6ZV90IHZhbHVlX2xlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NTg6NDkuNjU1NDcwNDYzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Mjg1NTgyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgUmVmZXJlbmNlIENvdW50IE92ZXJmbG93IEZpeCoqXG5cbk9rYXksIHNvIEkgc2VlIGl0LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cgaW4gdGhlIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSBjb2RlIGNoYW5nZSBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0byBlbnN1cmUgdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50IGRvZXNuJ3QgZXhjZWVkIGBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWGAuIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIHRoZSByZWZjb3VudCAqYmVmb3JlKiB0aGUgY2hlY2ssIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3ZlcmZsb3cuIFRoZSBmaXggY29ycmVjdHMgdGhpcyBhbmQgYWxzbyBjbGVhcnMgdGhlIGBNQkVfUkVVU0FCTEVfQmAgYml0IGluIHRoZSBtYmNhY2hlIGVudHJ5IHdoZW4gdGhlIG1heGltdW0gcmVmZXJlbmNlIGNvdW50IGlzIHJlYWNoZWQsIHdoaWNoIHByZXZlbnRzIHRoZSBibG9jayBmcm9tIGJlaW5nIHJldXNlZC5cblxuSSdtIHRoaW5raW5nLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIG5vIHZpcnR1YWxpemF0aW9uIHRyaWNrcyBuZWVkZWQsIGl0J3MganVzdCBwbGFpbiBleHQ0IG9wZXJhdGlvbnMuIEdpdmVuIHRoYXQgdGhpcyBkZWFscyB3aXRoIGEgY29yZSBmaWxlc3lzdGVtIGZlYXR1cmUsIHhhdHRycywgSSB3b3VsZCBzYXkgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJ3JlIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgcHJpbWUgYXJlYXMgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpcz8gSXQgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB3aGljaCB3ZSBuZWVkIHRvIGVuYWJsZSwgYW5kIGdpdmVuIHRoYXQgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIG1iY2FjaGUsIHRoYXQgbXVzdCBhbHNvIGJlIGNvbmZpZ3VyZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfTUJDQUNIRWAgaXMgdXNlZCBmb3IgbWJjYWNoZSBhbmQgdmVyaWZ5IGl0IGlzIHNlbGVjdGVkIGJ5IGBFWFQ0X0ZTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1OTo0NS45NDEwNTU2OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQ1OTUxOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU5OjQ2LjA2NzUyNTg1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDgzMDc1MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgTUJDQUNIRSBTZWxlY3Rpb24gd2l0aGluIGV4dDQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgYE1CQ0FDSEVgIGlzIHNlbGVjdGVkLiBUaGlzIHN1Z2dlc3RzIGEgZGVwZW5kZW5jeSBvciBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBibG9jayBjYWNoaW5nIGluIGV4dDQsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXJvdW5kIGl0LiBLbm93aW5nIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgd2lsbCBoZWxwIG1lIGluIFtpbnNlcnQgZXhwZXJ0LWxldmVsIGFwcGxpY2F0aW9uLCBlLmcuLCBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBpc3N1ZSwgdmVyaWZ5aW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbiwgZXRjLl0uIE15IGZvY3VzIGlzIHNoYXJwLCBhcyBJIGV4cGVjdCB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIGBNQkNBQ0hFYCBiZWNvbWVzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHRoYXQgZHJpdmUgdGhhdCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo1OTo1My4xNTA2MDQ2MDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTI3NDQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjU5OjUzLjI0MjU0MzUxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA0MTMxMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBDYWNoZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgYSBodW5jaCwgYW5kIGl0J3MgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gdGhlIGNvcmUgb2YgdGhlIGZpbGUgc3lzdGVtIGNhY2hlIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCBgZnMvbWJjYWNoZS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgYW5hbG9nb3VzIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pc21zIGZvciBtYW5hZ2luZyB0aGUgbWV0YWRhdGEgY2FjaGUgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2FjaGUgZW50cmllcyBhcmUgY3JlYXRlZCwgaW52YWxpZGF0ZWQsIGFuZCBhY2Nlc3NlZC4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZTogaG93IHRoZSBtYmNhY2hlcyBhcmUgYWNjZXNzZWQsIGhvdyBsb29rdXBzIHdvcmsgKGFyZSB0aGV5IGhhc2ggdGFibGVzPyBCLXRyZWVzPyksIHdoYXQgdGhlIGNhY2hlIHJlcGxhY2VtZW50IHBvbGljaWVzIGFyZSwgYW5kIGhvdyBzeW5jaHJvbml6YXRpb24gaXMgaGFuZGxlZC4gSXMgaXQgbG9ja2luZy1pbnRlbnNpdmU/IFdoYXQgYWJvdXQgY29uY3VycmVuY3kgaXNzdWVzPyBEb2VzIGl0IHVzZSBhbnkgc3BlY2lhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlPyBVbmRlcnN0YW5kaW5nIHRoZSBncmFudWxhciBkZXRhaWxzIGhlcmUgd2lsbCBhbGxvdyBtZSB0byB0cmFjayBkb3duIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjAyLjA0NjY3NzMxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1NjM1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9Mzc9c291cmNlIFxcXCJmcy9qYmQyL0tjb25maWdcXFwiXFxuZnMvS2NvbmZpZy0zOC1cXG5mcy9LY29uZmlnOjM5OmNvbmZpZyBGU19NQkNBQ0hFXFxuZnMvS2NvbmZpZy00MC0jIE1ldGEgYmxvY2sgY2FjaGUgZm9yIEV4dGVuZGVkIEF0dHJpYnV0ZXMgKGV4dDIvZXh0My9leHQ0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDowMi4xMTYyNDY2OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MjM3MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgRlNfTUJDQUNIRSoqXG5cblJpZ2h0LCBzbyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgRlNfTUJDQUNIRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBgZnMvZXh0NC9LY29uZmlnYCBzb3VuZHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLiBUaGF0IGZpbGUgc2hvdWxkIGRlZmluZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYW5kLCBieSBhc3NvY2lhdGlvbiwgbWVtb3J5IGJ1ZmZlciBjYWNoaW5nIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgcXVpY2tseSBzY2FuIGZvciBgRlNfTUJDQUNIRWAgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0J3MgY29udHJvbGxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbmZvcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MDUuMzc4NjIyNzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgxNDk0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlNfTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjA1LjQ1MTQ0NDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MzIzODA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZXZpc2l0aW5nIGV4dDQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBmb3IgdGhpcyBjdXJyZW50IHdvcmsuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGEgY3Vyc29yeSBnbGFuY2UgbWlnaHQgYmUgc3VmZmljaWVudCwgYnV0IEkgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCBldmVyeSBzZXR0aW5nLiBJJ2xsIGZvY3VzIG9uIHRoZSBzZWN0aW9ucyByZWxhdGVkIHRvIHRoZSBmZWF0dXJlIEknbSBleGFtaW5pbmcsIGJ1dCBJJ2xsIGFsc28gc2NhbiBmb3IgYW55dGhpbmcgYWRqYWNlbnQgdGhhdCBtaWdodCBoYXZlIGFuIGltcGFjdCwgYW55IGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGF0IHBsYXkuIEdvdHRhIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHN1YnRsZSBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzICpiZWZvcmUqIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIE5vIHN1cnByaXNlcyB0aGlzIHRpbWUgYXJvdW5kLiBJJ2xsIHBhcnRpY3VsYXJseSBsb29rIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgb3IgY29tbWl0cyB0aGF0IG1pZ2h0IGhhdmUgYWZmZWN0ZWQgdGhlIGRlZmF1bHQgb3B0aW9ucy4gT2theSwgbGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDowOS4xNDQ2ODU3MDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2OTQxNDM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlNfTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjA5LjI0MTYzNTU5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTc5OTAxMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTAwNTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjE3LjgyMTU0MDA4N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTc4OTE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGU19NQkNBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDoxNy45OTk1MzAxMjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5ODQyMjQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBgbWJjYWNoZWAgYW5kIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBleHQ0J3MgYG1iY2FjaGVgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uSSdtIG11bGxpbmcgb3ZlciBgbWJjYWNoZWAgYW5kIGl0cyByb2xlIHdpdGhpbiBleHQ0LCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqLiBJIGtub3cgaXQgZXhpc3RzLCBjb25jZXB0dWFsbHksIGFzIGEgbWV0YWRhdGEgYmxvY2sgY2FjaGluZyBtZWNoYW5pc20uIEJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGltcGxlbWVudGF0aW9uLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIG1ldGFkYXRhIGJsb2NrcyDigJMgaW5vZGVzLCBiaXRtYXBzLCBibG9jayBncm91cCBkZXNjcmlwdG9ycywgdGhlIGpvdXJuYWwsIHRoZSB3b3Jrcy4gSG93IGRvZXMgYG1iY2FjaGVgIGludGVyYWN0IHdpdGggKnRob3NlKj8gSXMgaXQgYWN0aW5nIGFzIGEgZGlyZWN0IGNhY2hlIGZvciB0aG9zZSBibG9ja3MsIHJlZHVjaW5nIHRoZSBuZWVkIGZvciBkaXNrIEkvTyB3aGVuIHRoZXkgYXJlIGZyZXF1ZW50bHkgYWNjZXNzZWQ/IE9yIGlzIGl0IG1vcmUgb2YgYSBidWZmZXIsIG1heWJlIGEgc3RhZ2luZyBhcmVhLCBmb3IgYmxvY2sgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyBhcmUgdXBkYXRlZCBvbiBkaXNrP1xuXG5JIGtub3cgZXh0NCBlbXBsb3lzIHNldmVyYWwgc3RyYXRlZ2llcyB0byBvcHRpbWl6ZSBtZXRhZGF0YSBhY2Nlc3MsIGxpa2UgYmxvY2sgZ3JvdXAgbG9jYWxpdHkgYW5kIGpvdXJuYWxpbmcuIEJ1dCB3aGVyZSBkb2VzIGBtYmNhY2hlYCBmaXQgaW50byAqdGhhdCogcGljdHVyZT8gSXMgaXQgdXNlZCBmb3IgZmFzdGVyIGlub2RlIGxvb2t1cHMsIG9yIHBlcmhhcHMgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBvZiBuZXcgYmxvY2tzIGluIHNwZWNpZmljIGJsb2NrIGdyb3Vwcywgb3IgYm90aD9cblxuSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHR5cGljYWwgZXh0NCByZWFkIGFuZCB3cml0ZSBwYXRocy4gV2hlcmUgZG9lcyB0aGUgYG1iY2FjaGVgIGdldCBjYWxsZWQgd2l0aGluIHRob3NlIHBhdGhzPyBBcmUgdGhlcmUgc3BlY2lmaWMgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgdGhhdCBhcmUgdGllZCBpbnRvIGl0PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVudCBgbWJjYWNoZWAgb3BlcmF0aW9ucyAoZ2V0LCBwdXQsIHVwZGF0ZSBldGMpLiBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyB3aGVuIGJsb2NrcyBhcmUgY2FjaGVkP1xuRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBob3cgYG1iY2FjaGVgIHJlZHVjZXMgbGF0ZW5jeSBmb3IgbWV0YWRhdGEgb3BlcmF0aW9ucyB3aXRoaW4gZXh0NCwgYW5kIHdoYXQgdGhlIGNvcmUgYWxnb3JpdGhtcyBhcmUuIEFuZCBJIG5lZWQgdG8gZ2V0IHRoZSBcImJpZyBwaWN0dXJlXCIgb2YgdGhlIHJvbGUgb2YgYG1iY2FjaGVgIGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBleHQ0J3Mgb3ZlcmFsbCBwZXJmb3JtYW5jZSBzdHJhdGVnaWVzLCBhbmQgbWF5YmUgaG93IGl0IGFmZmVjdHMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiB3b3JrbG9hZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MjUuNTk3OTU1Mzk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE4NTEyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWJjYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTI0OS0gKi9cXG5mcy9leHQ0L2V4dDQuaDoxMjUwOiNkZWZpbmUgRVhUNF9NT1VOVF9OT19NQkNBQ0hFXFx0XFx0MHgwMDAwMSAvKiBEbyBub3QgdXNlIG1iY2FjaGUgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMjUxLSNkZWZpbmUgRVhUNF9NT1VOVF9HUlBJRFxcdFxcdDB4MDAwMDRcXHQvKiBDcmVhdGUgZmlsZXMgd2l0aCBkaXJlY3RvcnkncyBncm91cCAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2OTI9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTcxMi1cXHRPcHRfZGlzY2FyZCwgT3B0X25vZGlzY2FyZCwgT3B0X2luaXRfaXRhYmxlLCBPcHRfbm9pbml0X2l0YWJsZSxcXG5mcy9leHQ0L3N1cGVyLmM6MTcxMzpcXHRPcHRfbWF4X2Rpcl9zaXplX2tiLCBPcHRfbm9qb3VybmFsX2NoZWNrc3VtLCBPcHRfbm9tYmNhY2hlLFxcbmZzL2V4dDQvc3VwZXIuYy0xNzE0LVxcdE9wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBPcHRfbWJfb3B0aW1pemVfc2NhbixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXh0NF9wYXJhbV9zcGVjc1tdID0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE4NDUtXFx0ZnNwYXJhbV9mbGFnXFx0KFxcXCJpbmxpbmVjcnlwdFxcXCIsXFx0XFx0T3B0X2lubGluZWNyeXB0KSxcXG5mcy9leHQ0L3N1cGVyLmM6MTg0NjpcXHRmc3BhcmFtX2ZsYWdcXHQoXFxcIm5vbWJjYWNoZVxcXCIsXFx0XFx0T3B0X25vbWJjYWNoZSksXFxuZnMvZXh0NC9zdXBlci5jOjE4NDc6XFx0ZnNwYXJhbV9mbGFnXFx0KFxcXCJub19tYmNhY2hlXFxcIixcXHRcXHRPcHRfbm9tYmNhY2hlKSxcXHQvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xcbmZzL2V4dDQvc3VwZXIuYy0xODQ4LVxcdGZzcGFyYW1fZmxhZ1xcdChcXFwicHJlZmV0Y2hfYmxvY2tfYml0bWFwc1xcXCIsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTg3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NDItXFx0e09wdF9qcWZtdCwgMCwgTU9QVF9RRk1UfSxcXG5mcy9leHQ0L3N1cGVyLmM6MTk0MzpcXHR7T3B0X25vbWJjYWNoZSwgRVhUNF9NT1VOVF9OT19NQkNBQ0hFLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jLTE5NDQtXFx0e09wdF9ub19wcmVmZXRjaF9ibG9ja19iaXRtYXBzLCBFWFQ0X01PVU5UX05PX1BSRUZFVENIX0JMT0NLX0JJVE1BUFMsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjU1OD1zdGF0aWMgaW50IF9fZXh0NF9yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02NjU3LVxcdGlmICgoc2JpLVxcdTAwM2VzX21vdW50X29wdCBeIG9sZF9vcHRzLnNfbW91bnRfb3B0KSBcXHUwMDI2IEVYVDRfTU9VTlRfTk9fTUJDQUNIRSkge1xcbmZzL2V4dDQvc3VwZXIuYzo2NjU4OlxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcImNhbid0IGVuYWJsZSBub21iY2FjaGUgZHVyaW5nIHJlbW91bnRcXFwiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNjY1OS1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTU2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZnMvZXh0NC94YXR0ci5jOjU3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYmNhY2hlLmhcXHUwMDNlXFxuZnMvZXh0NC94YXR0ci5jLTU4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9xdW90YW9wcy5oXFx1MDAzZVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTQyND1zdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaWdldChzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBlYV9pbm8sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNDcwLVxcbmZzL2V4dDQveGF0dHIuYzo0NzE6LyogUmVtb3ZlIGVudHJ5IGZyb20gbWJjYWNoZSB3aGVuIEVBIGlub2RlIGlzIGdldHRpbmcgZXZpY3RlZCAqL1xcbmZzL2V4dDQveGF0dHIuYy00NzItdm9pZCBleHQ0X2V2aWN0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTg5OT1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwODAtXFx0XFx0XFx0XFx0XFx0LypcXG5mcy9leHQ0L3hhdHRyLmM6MjA4MTpcXHRcXHRcXHRcXHRcXHQgKiBVbmRvIGV2ZXJ5dGhpbmcgYW5kIGNoZWNrIG1iY2FjaGVcXG5mcy9leHQ0L3hhdHRyLmMtMjA4Mi1cXHRcXHRcXHRcXHRcXHQgKiBhZ2Fpbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MjUuNzc5ODEyMTUzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjM5MDQ2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkV4YW1pbmluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSXQgc2VlbXMgSSByZW1lbWJlciBgRlNfTUJDQUNIRWAgYmVpbmcgc29tZWhvdyB0aWVkIHRvIGBFWFQ0X0ZTYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuIFdoZXJlIHdhcyB0aGF0IHNldHRpbmcgZGVmaW5lZCBhZ2Fpbj8gQWgsIHllcywgaXQncyBpbiBgZnMvZXh0NC9LY29uZmlnYC4gTGV0IG1lIGdvIGJhY2sgYW5kIGhhdmUgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoYXQgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWV0YWRhdGEgYmxvY2sgY2FjaGUgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzY2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6MzEuMzQzNzIxMjI2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM5MDA0NjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZTX01CQ0FDSEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDozMS41NDc2Mjk3NDNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc1OTIwNjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjExNzM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDo0MS4zMDY4Mzk1NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwOTk2NTA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlNfTUJDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQxLjQxNzg0Mzg2OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYzODQ0MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTM2MjgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQzLjE4MTY5MDg1MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMzI3NTE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGU19NQkNBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNzowMDo0My4yODQwMjlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU2ODgwMjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBgRlNfTUJDQUNIRWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBvdXQgYWJvdXQgYEZTX01CQ0FDSEVgLiBUaGF0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gVGhlcmVmb3JlLCBteSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgaW50byB0aGUgYGZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb24sIGFueSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIHByb21wdCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHdoYXQgdGhpcyBvcHRpb24gKmRvZXMqIHRvIHVzZXJzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYEZTX01CQ0FDSEVgLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY3MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQ1Ljg1MjgzNDcwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MzI1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU19NQkNBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0zNz1zb3VyY2UgXFxcImZzL2piZDIvS2NvbmZpZ1xcXCJcXG5mcy9LY29uZmlnLTM4LVxcbmZzL0tjb25maWc6Mzk6Y29uZmlnIEZTX01CQ0FDSEVcXG5mcy9LY29uZmlnLTQwLSMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQ2LjAzMDE2NzA2N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA1ODQ2Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzkuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvLi4uIHdlbGwsIEknbSBub3QgZW50aXJlbHkgc3VyZSAqeWV0KiwgYnV0IG9mdGVuIEtjb25maWcgZmlsZXMgZGVhbCB3aXRoIGZlYXR1cmUgY29uZmlndXJhdGlvbi4gTGluZSAzOSBjb3VsZCBiZSBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwgYW4gb3B0aW9uLCBvciBhIGNvbW1lbnQgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgdGhlcmUgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGdyZWF0ZXIgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTc6MDA6NDguODM2MDE2NjIzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdHNvdXJjZSBcXFwiZnMvZXh0Mi9LY29uZmlnXFxcIlxcbiAgMzY6XFx0c291cmNlIFxcXCJmcy9leHQ0L0tjb25maWdcXFwiXFxuICAzNzpcXHRzb3VyY2UgXFxcImZzL2piZDIvS2NvbmZpZ1xcXCJcXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIEZTX01CQ0FDSEVcXG4gIDQwOlxcdCMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpXFxuICA0MTpcXHRcXHR0cmlzdGF0ZVxcbiAgNDI6XFx0XFx0ZGVmYXVsdCB5IGlmIEVYVDJfRlM9eSBcXHUwMDI2XFx1MDAyNiBFWFQyX0ZTX1hBVFRSXFxuICA0MzpcXHRcXHRkZWZhdWx0IHkgaWYgRVhUNF9GUz15XFxuICA0NDpcXHRcXHRkZWZhdWx0IG0gaWYgRVhUMl9GU19YQVRUUiB8fCBFWFQ0X0ZTXFxuICA0NTpcXHRcXG4gIDQ2OlxcdHNvdXJjZSBcXFwiZnMvamZzL0tjb25maWdcXFwiXFxuICA0NzpcXHRcXG4gIDQ4OlxcdHNvdXJjZSBcXFwiZnMveGZzL0tjb25maWdcXFwiXFxuICA0OTpcXHRzb3VyY2UgXFxcImZzL2dmczIvS2NvbmZpZ1xcXCJcXG4gIDUwOlxcdHNvdXJjZSBcXFwiZnMvb2NmczIvS2NvbmZpZ1xcXCJcXG4gIDUxOlxcdHNvdXJjZSBcXFwiZnMvYnRyZnMvS2NvbmZpZ1xcXCJcXG4gIDUyOlxcdHNvdXJjZSBcXFwiZnMvbmlsZnMyL0tjb25maWdcXFwiXFxuICA1MzpcXHRzb3VyY2UgXFxcImZzL2YyZnMvS2NvbmZpZ1xcXCJcXG4gIDU0OlxcdHNvdXJjZSBcXFwiZnMvem9uZWZzL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjQ4LjgzNjEyNTQ0M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODcwMTA3NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYEZTX01CQ0FDSEVgIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIGBFWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBtZWFuaW5nIG15IHByaW1hcnkgZm9jdXMgaXMgc29sZWx5IG9uIGBFWFQ0X0ZTYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uIEl0J3MgYSB0b3AtbGV2ZWwgY29uZmlnLCB0aGFua2Z1bGx5LCBzbyBubyBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBsaXN0IG9mIGNvbmZpZ3MgaXM6XG5gRVhUNF9GU2BcblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHhhdHRyIG1hbmlwdWxhdGlvbiwgSSBzZWUgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGdsYW5jZWQgYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgYnV0IGl0J3Mgc3RhdGljLCBzbyBpdCBjYW4ndCBiZSB1c2VkIGV4dGVybmFsbHkgYW5kIGRvZXNuJ3Qgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW4gdGhpcyBjb250ZXh0LiBgZXh0NF94YXR0cl9zZXRgIGFwcGVhcnMgdG8gYmUgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCB3aGlsZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBpcyB1c2VkIGluIHRoZSBwcmVzZW5jZSBvZiBhIHRyYW5zYWN0aW9uIGhhbmRsZS4gQm90aCBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nLlxuXG5Ob3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBJIGNhbiBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuIFRoZSBwYXRjaCBjb3JyZWN0cyBhIGJ1ZyByZWxhdGVkIHRvIHRoZSB4YXR0ciByZWZlcmVuY2UgY291bnQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCAqYmVmb3JlKiBjaGVja2luZyBpZiBpdCBoYWQgcmVhY2hlZCB0aGUgbWF4aW11bSwgd2hpY2ggd291bGQgbGVhZCB0byBhbiBpbnRlZ2VyIG92ZXJmbG93LiBUaGUgdXBkYXRlZCB2ZXJzaW9uIGNoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGF0IGl0cyBtYXhpbXVtICpiZWZvcmUqIGluY3JlbWVudGluZy4gSWYgaXQgaXMgYXQgdGhlIG1heGltdW0sIHRoZSBwcm9jZXNzIHRoZW4gY2xlYXJzIHRoZSBgTUJFX1JFVVNBQkxFX0JgIGZsYWcgb24gdGhlIGNhY2hlIGVudHJ5IHRvIHByZXZlbnQgdGhlIGJ1ZmZlciBmcm9tIGJlaW5nIHJldXNlZCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgZml4LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyB1c2Vyc3BhY2UgdGhyb3VnaCBgc2V0eGF0dHJgIHN5c2NhbGxzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBhIHVzZXJsYW5kIHByb2dyYW0gYW5kIGlzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBjb25maWcsIHRoZW4sIGlzOlxuYEVYVDRfRlNgXG5cbkZvY3VzIHN5bWJvbHM6XG5gZXh0NF94YXR0cl9zZXRgXG5gZXh0NF94YXR0cl9zZXRfaGFuZGxlYFxuXG5JJ2xsIHNldCB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDMwLCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE3OjAwOjU2LjcwNjIzNTg3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1OTA3Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2Nrcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBpc3N1ZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyBFWFQ0X1hBVFRSX1JFRkNPVU5UX01BWC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzZXR4YXR0ciBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjz8kd[1] Phase: Succeeded StartedAt: 2026-08-02 17:01:08 +0000 UTC FinishedAt: 2026-08-02 17:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 17:01:08 +0000 UTC FinishedAt: 2026-08-02 17:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2] Phase: Succeeded StartedAt: 2026-08-02 17:01:08 +0000 UTC FinishedAt: 2026-08-02 20:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 17:01:09 +0000 UTC FinishedAt: 2026-08-02 20:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 17:01:09 +0000 UTC FinishedAt: 2026-08-02 17:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 17:01:09 +0000 UTC FinishedAt: 2026-08-02 17:01:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowjz8kd/series-workflowjz8kd-convert-artifact-1148543820/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 17:01:19 +0000 UTC FinishedAt: 2026-08-02 17:22:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 17:01:19 +0000 UTC FinishedAt: 2026-08-02 17:22:57 +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:*4a6d0d92-7cc9-42d6-b6d7-e4e8cda8dd61,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-workflowjz8kd/series-workflowjz8kd-convert-artifact-1148543820/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": "9f33258b-9920-40e5-9453-7303c8bca7f2", "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-workflowjz8kd/series-workflowjz8kd-build-action-977494394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 17:01:19 +0000 UTC FinishedAt: 2026-08-02 17:22:47 +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:*4a6d0d92-7cc9-42d6-b6d7-e4e8cda8dd61,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-workflowjz8kd/series-workflowjz8kd-convert-artifact-1148543820/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": "9f33258b-9920-40e5-9453-7303c8bca7f2", "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-workflowjz8kd/series-workflowjz8kd-build-action-977494394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 17:22:57 +0000 UTC FinishedAt: 2026-08-02 17:22:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 17:22:57 +0000 UTC FinishedAt: 2026-08-02 17:22:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 17:22:57 +0000 UTC FinishedAt: 2026-08-02 17:23:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 17:22:57 +0000 UTC FinishedAt: 2026-08-02 17:23:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowjz8kd/series-workflowjz8kd-convert-artifact-1640392843/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 17:23:07 +0000 UTC FinishedAt: 2026-08-02 17:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 17:23:07 +0000 UTC FinishedAt: 2026-08-02 17:24:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f33258b-9920-40e5-9453-7303c8bca7f2,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-workflowjz8kd/series-workflowjz8kd-build-action-977494394/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-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 17:25:06 +0000 UTC FinishedAt: 2026-08-02 17:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 17:25:06 +0000 UTC FinishedAt: 2026-08-02 17:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 17:25:06 +0000 UTC FinishedAt: 2026-08-02 17:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 17:25:06 +0000 UTC FinishedAt: 2026-08-02 17:46:23 +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:*4a6d0d92-7cc9-42d6-b6d7-e4e8cda8dd61,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-workflowjz8kd/series-workflowjz8kd-convert-artifact-1640392843/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": "479d6578-462a-4592-8a65-a2a0c0bcbd90", "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-workflowjz8kd/series-workflowjz8kd-build-action-14747439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 17:25:06 +0000 UTC FinishedAt: 2026-08-02 17:46: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:*4a6d0d92-7cc9-42d6-b6d7-e4e8cda8dd61,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-workflowjz8kd/series-workflowjz8kd-convert-artifact-1640392843/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": "479d6578-462a-4592-8a65-a2a0c0bcbd90", "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-workflowjz8kd/series-workflowjz8kd-build-action-14747439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 17:46:23 +0000 UTC FinishedAt: 2026-08-02 17:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 17:46:23 +0000 UTC FinishedAt: 2026-08-02 17:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 17:46:23 +0000 UTC FinishedAt: 2026-08-02 17:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 17:46:23 +0000 UTC FinishedAt: 2026-08-02 17:48:20 +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:*479d6578-462a-4592-8a65-a2a0c0bcbd90,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-workflowjz8kd/series-workflowjz8kd-build-action-14747439/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-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 20:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 20:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},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:*9f33258b-9920-40e5-9453-7303c8bca7f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*479d6578-462a-4592-8a65-a2a0c0bcbd90,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-workflowjz8kd/series-workflowjz8kd-build-action-977494394/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-workflowjz8kd/series-workflowjz8kd-build-action-14747439/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 17:48:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 17:48:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},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-workflowjz8kd/series-workflowjz8kd-convert-artifact-620722724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 17:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 17:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 17:48:30 +0000 UTC FinishedAt: 2026-08-02 17:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 17:48:40 +0000 UTC FinishedAt: 2026-08-02 20:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjz8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"5c6bacbe-1da9-40f6-aa2a-6d1b0363a1a7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 17:48:40 +0000 UTC FinishedAt: 2026-08-02 20:51:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f33258b-9920-40e5-9453-7303c8bca7f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*479d6578-462a-4592-8a65-a2a0c0bcbd90,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-workflowjz8kd/series-workflowjz8kd-build-action-977494394/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-workflowjz8kd/series-workflowjz8kd-build-action-14747439/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-workflowjz8kd/series-workflowjz8kd-convert-artifact-620722724/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,}