Name: series-workflow9hmrb Phase: Succeeded StartedAt: 2026-07-28 01:57:54 +0000 UTC FinishedAt: 2026-07-28 06:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[0] Phase: Succeeded StartedAt: 2026-07-28 01:57:54 +0000 UTC FinishedAt: 2026-07-28 02:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 01:57:54 +0000 UTC FinishedAt: 2026-07-28 02:17:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5ff172f6c94d282d83cb88bdfec5f647ad9c6105", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEM_ALLOC_PROFILING", "KFENCE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5ff172f6c94d282d83cb88bdfec5f647ad9c6105", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEM_ALLOC_PROFILING", "KFENCE" ], "series_id": "2f019ae5-f129-460e-bfb8-eba5db2aed39" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts", "__memcg_slab_post_alloc_hook", "__memcg_slab_free_hook", "__kmem_cache_create_args", "kmem_cache_charge" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfY2hhcmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIGhvdyBgc2xhYm9ial9leHRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgd2hlbiBib3RoIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFyZSBlbmFibGVkLiBJdCBpbnRyb2R1Y2VzIGBTTEFCX01BWV9BQ0NPVU5UYCBhbmQgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGBzbGFib2JqX2V4dGAuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhY2NvdW50aW5nIGVycm9ycyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ4Zjg0MDMyZDFiZDkwOGU0NjE0OWNjYWNkYjkwMTNlZTMzNjk5MjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMjoxMzoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uZDAyZWI1NGVlOGYyYzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbkBAIC0xMTIsMyAmIzQzOzExMiwxMCBAQCBUbyBkbyBzbzpcbiBcbiAtIFRoZW4sIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHlvdXIgYWxsb2NhdGlvbnM6XG4gICBhbGxvY19ob29rc190YWcoaHQtXHUwMDNleW91cl9zYXZlZF90YWcsIGttYWxsb2Nfbm9wcm9mKC4uLikpXG4mIzQzO1xuJiM0MztOb3Rlc1xuJiM0Mzs9PT09PVxuJiM0MztcbiYjNDM7LSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLlxuJiM0MzsgIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgbGltaXRlZCB0byBhIHNtYWxsIG51bWJlciwgc28gdGhpcyBvbWlzc2lvblxuJiM0MzsgIGlzIG5lZ2xpZ2libGUuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTQ0MCwxOSAmIzQzOzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4tLypcbi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLVx1MDAzZW1lbWNnX2RhdGFcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuLSAqL1xuLXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuLVx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuLSNlbmRpZlxuLX0gX19hbGlnbmVkKDgpO1xuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmhcbmluZGV4IDMyYzlmOGVkN2FlMjA1Li5lMTkxNTAyNmUwMzA0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTQ1LDYgJiM0Mzs0NSw3IEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRfU0xBQl9BQ0NPVU5ULFxuJiM0MztcdF9TTEFCX01BWV9BQ0NPVU5ULFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIFx0X1NMQUJfS0FTQU4sXG5AQCAtMjA0LDggJiM0MzsyMDUsMTAgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4mIzQzOyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlRcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9NQVlfQUNDT1VOVClcbiAjZWxzZVxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFx0XHRfX1NMQUJfRkxBR19VTlVTRURcbiYjNDM7IyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li45MDkyNWM2NDZjNGMyNCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9jb3JlLmNcbkBAIC02MzYsMTEgJiM0Mzs2MzYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpXG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gJiM0MzsgaSk7XG4gXHRcdF9fU2V0UGFnZVNsYWIocGFnZSk7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbi1cdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmtmZW5jZV9tZXRhZGF0YV9pbml0W2kgLyAyIC0gMV0ub2JqX2V4dHMgfFxuLVx0XHRcdFx0IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0jZW5kaWZcbiBcdH1cbiBcbiBcdC8qXG5AQCAtNzA0LDEwICYjNDM7Njk5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICYjNDM7IGkpO1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLSNlbmRpZlxuIFx0XHRfX0NsZWFyUGFnZVNsYWIocGFnZSk7XG4gXHR9XG4gXG5AQCAtMTI0OCw5ICYjNDM7MTIzOSw2IEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIHtcbiBcdHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xuIFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdEtGRU5DRV9XQVJOX09OKG1ldGEtXHUwMDNlb2JqX2V4dHMub2JqY2cpO1xuLSNlbmRpZlxuIFx0LypcbiBcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcbiBcdCAqIHRoZSBvYmplY3QsIGFzIHRoZSBvYmplY3QgcGFnZSBtYXkgYmUgcmVjeWNsZWQgZm9yIG90aGVyLXR5cGVkXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5pbmRleCAxZjYxOGY5YjBkMTJkOS4uZTZiNGJmMzQ5ZmY3MzAgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2UuaFxuQEAgLTEwMiw5ICYjNDM7MTAyLDYgQEAgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XG4gXHRzdHJ1Y3Qga2ZlbmNlX3RyYWNrIGZyZWVfdHJhY2sgX19ndWFyZGVkX2J5KFx1MDAyNmxvY2spO1xuIFx0LyogRm9yIHVwZGF0aW5nIGFsbG9jX2NvdmVyZWQgb24gZnJlZXMuICovXG4gXHR1MzIgYWxsb2Nfc3RhY2tfaGFzaCBfX2d1YXJkZWRfYnkoXHUwMDI2bG9jayk7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IHNsYWJvYmpfZXh0IG9ial9leHRzO1xuLSNlbmRpZlxuIH07XG4gXG4gI2RlZmluZSBLRkVOQ0VfTUVUQURBVEFfU0laRSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhKSAqIFxcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuaW5kZXggZGUyZDBmN2Q2MmIxNWUuLjk4NjdjMDNlZjBhZTNkIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG5AQCAtMjk1LDcgJiM0MzsyOTUsNyBAQCBzdGF0aWMgdm9pZCAqdGVzdF9hbGxvYyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGVudW0gYWxsb2NhdFxuIFx0XHRcdCAqIG1lbWNnIGFjY291bnRpbmcgd29ya3MgY29ycmVjdGx5LlxuIFx0XHRcdCAqL1xuIFx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpfdG9faW5kZXgocywgc2xhYiwgYWxsb2MpLCAwVSk7XG4tXHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ianNfcGVyX3NsYWIocywgc2xhYiksIDEpO1xuJiM0MztcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi1cdTAwM2VvYmplY3RzKSwgMSk7XG4gXG4gXHRcdFx0aWYgKHBvbGljeSA9PSBBTExPQ0FURV9BTlkpXG4gXHRcdFx0XHRyZXR1cm4gYWxsb2M7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uNmI1MWRkZjZkZmUwMjIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI4NjUsMTggJiM0MzsyODY1LDE5IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKnApXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4tXHR1bnNpZ25lZCBpbnQgb2ZmO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmICghb2JqX2V4dHMpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0b2ZmID0gb2JqX3RvX2luZGV4KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgcCk7XG4tXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0aWYgKG9ial9leHQtXHUwMDNlb2JqY2cpIHtcbi1cdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC1cdTAwM2VvYmpjZztcbiYjNDM7XHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4mIzQzO1x0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIG9ial9leHRzLCBwKTtcbiYjNDM7XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiYjNDM7XHRpZiAob2JqY2cpIHtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gXHR9XG5AQCAtMzU0MSw3ICYjNDM7MzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXHRzaXplX3Qgb2JqX3NpemUgPSBvYmpfZnVsbF9zaXplKHMpO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBsb25nIG9mZjtcbiBcdHNpemVfdCBpO1xuIFxuIFx0LypcbkBAIC0zNTgzLDExICYjNDM7MzU4MywxNiBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuIFxuLVx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpKSB7XG4mIzQzO1x0XHRcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhwW2ldKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIHNsYWJfYWxsb2NfZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFx1MDAyNlx1MDAyNiBXQVJOX09OX09OQ0UoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIGlmIHdlIGZhaWwgYW5kIHNpemUgaXMgMSwgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKCkgd2lsbFxuIFx0XHQgKiBqdXN0IGZyZWUgdGhlIG9iamVjdCwgd2hpY2ggaXMgb2sgYXMgd2UgaGF2ZSBub3QgYXNzaWduZWRcbkBAIC0zNjE2LDEwICYjNDM7MzYyMSwxMSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuJiM0MztcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4mIzQzO1xuIFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG4tXHRcdG9ial9leHQtXHUwMDNlb2JqY2cgPSBvYmpjZztcbiYjNDM7XHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgb2JqY2cpO1xuJiM0MztcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fVxuIFxuQEAgLTM2MzUsMTUgJiM0MzszNjQxLDEzIEBAIHZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuIFx0XHRzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2s7XG4tXHRcdHVuc2lnbmVkIGludCBvZmY7XG4gXG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdFx0b2JqY2cgPSBvYmpfZXh0LVx1MDAzZW9iamNnO1xuJiM0MztcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4mIzQzO1x0XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiBcdFx0aWYgKCFvYmpjZylcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IE5VTEw7XG4mIzQzO1x0XHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIE5VTEwpO1xuIFxuIFx0XHRzdG9jayA9IHRyeWxvY2tfc3RvY2soKTtcbiBcdFx0X19yZWZpbGxfb2JqX3N0b2NrKG9iamNnLCBzdG9jaywgb2JqX3NpemUsIHRydWUpO1xuZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaFxuaW5kZXggZjVlMzM2YjZiNmIwNGMuLjA0NjAwZjU3YjQwMTQ2IDEwMDY0NFxuLS0tIGEvbW0vc2xhYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmhcbkBAIC04MSwxMCAmIzQzOzgxLDExIEBAIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyB7XG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0XHRcdFx0XHQvKlxuIFx0XHRcdFx0XHQgKiBTb21lIG9wdGltaXphdGlvbnMgdXNlIGZyZWUgYml0cyBpbiAmIzM5O2NvdW50ZXJzJiMzOTsgZmllbGRcbi1cdFx0XHRcdFx0ICogdG8gc2F2ZSBtZW1vcnkuIEluIGNhc2UgLVx1MDAzZXN0cmlkZSBmaWVsZCBpcyBub3QgYXZhaWxhYmxlLFxuLVx0XHRcdFx0XHQgKiBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuJiM0MztcdFx0XHRcdFx0ICogdG8gc2F2ZSBtZW1vcnkgb3IgQ1BVLiBJZiB0aGVzZSBmcmVlIGJpdHMgYXJlIG5vdFxuJiM0MztcdFx0XHRcdFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuIFx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0cmlkZTtcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIG9ial9leHRzX2luX29iamVjdDoxO1xuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfbmVlZHNfb2JqY2c6MTtcbiAjZW5kaWZcbiBcdFx0XHRcdH07XG4gXHRcdFx0fTtcbkBAIC0zMzAsMTIgJiM0MzszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0cmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNsYWItXHUwMDNlb2JqZWN0cztcbi19XG4tXG4gLypcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXG4gICpcbkBAIC01NTUsNiAmIzQzOzU1MCw5MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluXG4mIzQzOyAqIHNsYWItXHUwMDNlb2JqX2V4dHMgKGFsaWFzaW5nIHBhZ2UtXHUwMDNlbWVtY2dfZGF0YSkgaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzbGFib2JqX2V4dCB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHVuaW9uIHNob3VsZCBiZSBwb2ludGVyLXNpemVkIHRvIGF2b2lkIG1lbW9yeVxuJiM0MztcdCAqIHdhc3RlXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5pb24ge1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO1x0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqX29iamNnO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4mIzQzO1x0XHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XG4mIzQzOyNlbmRpZlxuJiM0MztcdH07XG4mIzQzO30gX19hbGlnbmVkKDgpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4mIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG4mIzQzO1x0XHRcdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGNhY2hlLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX01BWV9BQ0NPVU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdHJldHVybiBzbGFiLVx1MDAzZW9ial9leHRzX25lZWRzX29iamNnO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVx1MDAzZXNsYWJfY2FjaGUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBzeiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbiYjNDM7XHRcdHN6ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXG4mIzQzO1x0XHRzeiAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHN6ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4mIzQzO1x0XHRzeiAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuJiM0MztcdFx0c3ogJiM0Mzs9IDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG4gXG4gLypcbkBAIC01NzIsNyAmIzQzOzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuICAqIGlmIChvYmpfZXh0cykge1xuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xuJiM0MzsgKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iaik7XG4gICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCBvYmpfZXh0XG4gICogICAgICAgICBwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gICogfVxuQEAgLTYxMCw0OCAmIzQzOzY5Miw4NiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NsYWJfb2JqX2V4dHModW5zaWduZWQgbG9uZyBvYmpfZXh0cylcbiB9XG4gXG4gI2lmZGVmIENPTkZJR182NEJJVFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0c2xhYi1cdTAwM2VzdHJpZGUgPSBzdHJpZGU7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VzdHJpZGU7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0b1xuJiM0MztcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuJiM0MztcdCAqIGFsbG9jYXRpb25zIHdpdGhpbl9zbGFiX2xlZnRvdmVyIGFyZSBwcmVmZXJyZWQuIEFuZCB0aG9zZSBtYXkgYmVcbiYjNDM7XHQgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWImIzM5O3Mgc2l6ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gc2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3Q7XG4gfVxuICNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcbi17XG4tXHRWTV9XQVJOX09OX09OQ0Uoc3RyaWRlICE9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbi19XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuIC8qXG4gICogc2xhYl9vYmpfZXh0IC0gZ2V0IHRoZSBwb2ludGVyIHRvIHRoZSBzbGFiIG9iamVjdCBleHRlbnNpb24gbWV0YWRhdGFcbiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi5cbiYjNDM7ICogQHM6IGNhY2hlIHRoYXQgdGhlIHNsYWIgYmVsb25ncyB0b1xuICAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XG4gICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXG4tICogQGluZGV4OiBhbiBpbmRleCBvZiB0aGUgb2JqZWN0XG4mIzQzOyAqIEBvYmo6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSBzZWN0aW9uIGNvdmVyZWQgYnkgZ2V0L3B1dF9zbGFiX29ial9leHRzKCkuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiYjNDM7XHQgICAgIGNvbnN0IHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IGluZGV4O1xuJiM0MztcdHVuc2lnbmVkIGludCBzdHJpZGU7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XG4gXG4tXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzO1xuLVx0XHRcdFx0XHQgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS0ZFTkNFIG9iamVjdHMgaGF2ZSBOVUxMIG9ial9leHRzIGFuZCB0aHVzIGNhbiYjMzk7dCByZWFjaCB0aGlzXG4mIzQzO1x0ICogYW5kIHdlIGRvbiYjMzk7dCBuZWVkIG9ial90b19pbmRleCgpXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5kZXggPSBfX29ial90b19pbmRleChzLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4mIzQzO1xuJiM0MztcdGlmICghb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuJiM0MztcdFx0c3RyaWRlID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c3RyaWRlID0gcy1cdTAwM2VzaXplO1xuJiM0MztcbiYjNDM7XHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOyBpbmRleCAqIHN0cmlkZSk7XG4mIzQzO1xuIFx0cmV0dXJuIGthc2FuX3Jlc2V0X3RhZyhvYmpfZXh0KTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbiYjNDM7e1xuJiM0MztcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4mIzQzO1x0cmV0dXJuIG9ial9leHQtXHUwMDNlX29iamNnO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjNDM7e1xuJiM0MztcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4mIzQzO1x0b2JqX2V4dC1cdTAwM2Vfb2JqY2cgPSBvYmpjZztcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuJiM0MztzdGF0aWMgaW5saW5lIHVuaW9uIGNvZGV0YWdfcmVmICpcbiYjNDM7c2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdG9ial9leHQgJiM0Mzs9IDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZvYmpfZXh0LVx1MDAzZV9jdHJlZjtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiBcbkBAIC02NjIsMTYgJiM0Mzs3ODIsMTcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiYjNDM7XHQgICAgIGNvbnN0IHZvaWQgKm9iailcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiAwOyB9XG4tXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiBcbiAjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuIFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAwM2VjYWMxMmNkODY1Zi4uMWUxZDNmZWVjMzUzNWIgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7XG4gXHRcdFNMQUJfT0JKX0VYVF9JTl9PQkopXG4gXG4gI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcXFxuLVx0XHRcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UKVxuJiM0MztcdFx0XHQgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCB8IFNMQUJfTUFZX0FDQ09VTlQpXG4gXG4gLypcbiAgKiBNZXJnZSBjb250cm9sLiBJZiB0aGlzIGlzIHNldCB0aGVuIG5vIG1lcmdpbmcgb2Ygc2xhYiBjYWNoZXMgd2lsbCBvY2N1ci5cbkBAIC0zNTksNiAmIzQzOzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBub3cgd2UgYXNzdW1lIGFueSBjYWNoZSBjYW4gYmUgdXNlZCB3aXRoIF9fR0ZQX0FDQ09VTlQgYW5kIHRodXNcbiYjNDM7XHQgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0c1xuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4mIzQzO1x0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuJiM0MztcbiBcdC8qIEZhaWwgY2xvc2VkIG9uIGJhZCB1c2Vyc2l6ZSBvZiB1c2Vyb2Zmc2V0IHZhbHVlcy4gKi9cbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpIHx8XG4gXHQgICAgV0FSTl9PTighYXJncy1cdTAwM2V1c2Vyc2l6ZSBcdTAwMjZcdTAwMjYgYXJncy1cdTAwM2V1c2Vyb2Zmc2V0KSB8fFxuQEAgLTk4NCwxMSAmIzQzOzk5MSwyMCBAQCBuZXdfa21hbGxvY19jYWNoZShpbnQgaWR4LCBlbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB0eXBlKVxuICNlbmRpZlxuIFxuIFx0Lypcbi1cdCAqIElmIENPTkZJR19NRU1DRyBpcyBlbmFibGVkLCBkaXNhYmxlIGNhY2hlIG1lcmdpbmcgZm9yXG4tXHQgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuXG4mIzQzO1x0ICogSWYgbWVtY2dfa21lbSBpcyBlbmFibGVkIGFuZCB0aGlzIGlzIGEgS01BTExPQ19OT1JNQUwgY2FjaGUgYW5kIG5vdFxuJiM0MztcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0JiMzOTtzIG5ldmVyIG1lcmdlZCB3aXRoIGFueSBvdGhlclxuJiM0MztcdCAqIGNhY2hlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gb3RoZXIgY2FzZXMgdGhlIGttYWxsb2MgY2FjaGUgbWF5IGVuZCB1cCBiZWluZyB1c2VkIGZvciBhXG4mIzQzO1x0ICogX19HRlBfQUNDT1VOVCBhbGxvY2F0aW9uIHNvIG1hcmsgaXQgYXMgc3VjaC4gVGhlIGV4Y2VwdGlvbiBpcyBhXG4mIzQzO1x0ICogS01BTExPQ19OT19PQkpfRVhUIGNhY2hlLlxuIFx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXG4tXHRcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwgXHUwMDI2XHUwMDI2IEtNQUxMT0NfUkVDTEFJTSAhPSBLTUFMTE9DX05PUk1BTClcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbiYjNDM7XHRcdGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IFNMQUJfTk9fT0JKX0VYVCkpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG1pbmFsaWduIFx1MDAzZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHtcbiBcdFx0YWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7XG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCAwMzM3ZTYwZGI1YWNlMC4uOTRiNzQ0ZTVhYzc5MTkgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuY1xuQEAgLTIxMyw2ICYjNDM7MjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XG4gc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHN0cmljdF9udW1hKTtcbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4mIzQzO0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbiYjNDM7XHRcdFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovXG4gc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7XG4gXHR1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyO1xuQEAgLTgwMyw3ICYjNDM7ODA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuJiM0MztcdHJldHVybiBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbiB9XG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuQEAgLTg3MCwxOCAmIzQzOzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHQvKlxuLVx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbi1cdCAqIGNoZWNrIHRoZSBzdHJpZGUuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuLVx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuLVx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJiMzOTtzIHNpemUuXG4tXHQgKi9cbi1cdHJldHVybiBvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChzbGFiX2dldF9zdHJpZGUoc2xhYikgPT0gcy1cdTAwM2VzaXplKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfaW5mb19lbmQocyk7XG5AQCAtODk2LDE2ICYjNDM7ODg5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBcdHJldHVybiBvZmZzZXQ7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRzbGFiLVx1MDAzZW9ial9leHRzX2luX29iamVjdCA9IDE7XG4gfVxuLVxuJiM0MzsjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5AQCAtMTIwNiw4ICYjNDM7MTIwMyw4IEBAIHN0YXRpYyB2b2lkIHByaW50X3RyYWlsZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1OCAqcClcbiBcbiBcdG9mZiAmIzQzOz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuLVx0XHRvZmYgJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuJiM0MztcdGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXG4mIzQzO1x0XHRvZmYgJiM0Mzs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuIFxuIFx0aWYgKG9mZiAhPSBzaXplX2Zyb21fb2JqZWN0KHMpKVxuIFx0XHQvKiBCZWdpbm5pbmcgb2YgdGhlIGZpbGxlciBpcyB0aGUgZnJlZSBwb2ludGVyICovXG5AQCAtMTQxMSw4ICYjNDM7MTQwOCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfcGFkX2J5dGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiYjNDM7XHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuJiM0MztcdFx0b2ZmICYjNDM7PSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcbiBcbiBcdGlmIChzaXplX2Zyb21fb2JqZWN0KHMpID09IG9mZilcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMTQzOSw3ICYjNDM7MTQzNiw3IEBAIHNsYWJfcGFkX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdGxlbmd0aCA9IHNsYWJfc2l6ZShzbGFiKTtcbiBcdGVuZCA9IHN0YXJ0ICYjNDM7IGxlbmd0aDtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XG4mIzQzO1x0aWYgKG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXHUwMDI2XHUwMDI2ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHtcbiBcdFx0cmVtYWluZGVyID0gbGVuZ3RoO1xuIFx0XHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XG4gXHRcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7XG5AQCAtMjA3MCwyMCAmIzQzOzIwNjcsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxuIFx0b2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbiBcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xuIFx0aWYgKHNsYWJfZXh0cykge1xuJiM0MztcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4mIzQzO1x0XHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmO1xuJiM0MztcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbi1cdFx0dW5zaWduZWQgaW50IG9mZnMgPSBvYmpfdG9faW5kZXgob2JqX3NsYWItXHUwMDNlc2xhYl9jYWNoZSxcbi1cdFx0XHRcdFx0XHQgb2JqX3NsYWIsIG9iaik7XG4tXHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLFxuLVx0XHRcdFx0XHRcdCAgICAgICBzbGFiX2V4dHMsIG9mZnMpO1xuJiM0MztcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7XG4mIzQzO1x0XHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7XG4gXG4tXHRcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpKSkge1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHtcbiBcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi9cbi1cdFx0V0FSTl9PTihleHQtXHUwMDNlcmVmLmN0KTtcbi1cdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZik7XG4mIzQzO1x0XHRXQVJOX09OKHJlZi1cdTAwM2VjdCk7XG4mIzQzO1x0XHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuIFx0fVxuIH1cbkBAIC0yMDkzLDE5ICYjNDM7MjA5MSwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHJldHVybiBjbXB4Y2hnKFx1MDAyNnNsYWItXHUwMDNlb2JqX2V4dHMsIDAsIE9CSkVYVFNfQUxMT0NfRkFJTCkgPT0gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cylcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbiBcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbiBcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbiBcdCAqL1xuLVx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpZiAob2JqX2V4dHMgIT0gT0JKRVhUU19BTExPQ19GQUlMKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAvIHNpemVvZigqdmVjKTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIHNsYWItXHUwMDNlb2JqZWN0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgdmVjKTtcbiBcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSYjNDM7JiM0MzspXG4tXHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4mIzQzO1x0XHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xuJiM0MztcdFx0dmVjICYjNDM7PSBzdHJpZGU7XG4gXHR9XG4gfVxuIFxuQEAgLTIxMTMsOCAmIzQzOzIxMjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYykge31cbiBcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbiBcbkBAIC0yMTI3LDEyICYjNDM7MjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xuLVx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xuIFx0Ym9vbCBuZXdfc2xhYiA9IGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcbi1cdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuJiM0MztcdHNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuIFxuIFx0Z2ZwIFx1MDAyNj0gfk9CSkNHU19DTEVBUl9NQVNLO1xuIFx0LypcbkBAIC0yMTgzLDcgJiM0MzsyMTkwLDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuICNlbmRpZlxuIHJldHJ5OlxuIFx0b2xkX2V4dHMgPSBSRUFEX09OQ0Uoc2xhYi1cdTAwM2VvYmpfZXh0cyk7XG4tXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XG4mIzQzO1x0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIsIG9sZF9leHRzLCB2ZWMpO1xuIFxuIFx0aWYgKG5ld19zbGFiKSB7XG4gXHRcdC8qXG5AQCAtMjI1MCw5ICYjNDM7MjI1Nyw2IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0dm9pZCAqYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXG4tXHQvKiBJbml0aWFsaXplIHN0cmlkZSBlYXJseSB0byBhdm9pZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzICovXG4tXHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuLVxuIFx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0yMjc4LDE1ICYjNDM7MjI4MiwxNCBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVx1MDAzZW9iamVjdHMpXG4tXHRcdFx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSAmIzQzOyBvZmZzZXQsIDAsXG4tXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbiYjNDM7XHRcdFx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSAmIzQzOyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuICNlbmRpZlxuIFx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gb2JqX2V4dHM7XG4tXHRcdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0c2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMzIzLDExICYjNDM7MjMyNiwxNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0ICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdm9pZCAqcClcbiB7XG4tXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG4tXHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgIF9fZnVuY19fLCBzLVx1MDAzZW5hbWUpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikpIHtcbiYjNDM7XHRcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBfX2Z1bmNfXywgcy1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbkBAIC0yMzYwLDE0ICYjNDM7MjM2NywyNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxuIFx0ICogY2hlY2sgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhbGxvY190YWdfYWRkKCkuXG4gXHQgKi9cbiBcdGlmIChvYmpfZXh0cykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb2JqX2lkeCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmplY3QpO1xuJiM0MztcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcbiBcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTtcbi1cdFx0YWxsb2NfdGFnX2FkZChcdTAwMjZvYmpfZXh0LVx1MDAzZXJlZiwgY3VycmVudC1cdTAwM2VhbGxvY190YWcsIHMtXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqZWN0KTtcbiYjNDM7XHRcdHJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCBvYmpfZXh0KTtcbiYjNDM7XG4mIzQzO1x0XHRhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC1cdTAwM2VhbGxvY190YWcsIHMtXHUwMDNlc2l6ZSk7XG4mIzQzO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRhbGxvY190YWdfc2V0X2luYWNjdXJhdGUoY3VycmVudC1cdTAwM2VhbGxvY190YWcpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZ1xuJiM0MztcdFx0ICogb25lcyBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIHNvIGl0JiMzOTtzIG5vdCB3b3J0aCBzZXR0aW5nXG4mIzQzO1x0XHQgKiB0YWdzIGFzIGluYWNjdXJhdGUgYmVjYXVzZSBvZiB0aGVtLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWlzX2tmZW5jZV9hZGRyZXNzKG9iamVjdCkpXG4mIzQzO1x0XHRcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyk7XG4gXHR9XG4gfVxuIFxuQEAgLTIzODQsNyAmIzQzOzI0MDEsNiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZFxuIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRcdCAgICAgICBpbnQgb2JqZWN0cylcbiB7XG4tXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXG4gXHQvKiBzbGFiLVx1MDAzZW9ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqL1xuQEAgLTIzOTYsMTAgJiM0MzsyNDEyLDExIEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwXG4gXHRcdHJldHVybjtcbiBcbiBcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHVuc2lnbmVkIGludCBvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcbiBcbi1cdFx0YWxsb2NfdGFnX3N1YihcdTAwMjZzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZiktXHUwMDNlcmVmLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XHRcdGFsbG9jX3RhZ19zdWIoc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIGV4dCksIHMtXHUwMDNlc2l6ZSk7XG4gXHR9XG4gXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gfVxuQEAgLTI0MTIsNiAmIzQzOzI0MjksMjUgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGVcbiYjNDM7ICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKVxuJiM0MzsgKlxuJiM0MzsgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24mIzM5O3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5XG4mIzQzOyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4mIzQzO1x0XHRpZiAobmVlZF9jb2RldGFnKVxuJiM0MztcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuQEAgLTI0MjYsNiAmIzQzOzI0NjIsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICYjNDM7MjUxMSw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTtcbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbkBAIC0yNDg0LDcgJiM0MzsyNTI3LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuLVx0dW5zaWduZWQgbG9uZyBvZmY7XG4gXG4gXHRwYWdlID0gdmlydF90b19wYWdlKHApO1xuIFx0aWYgKFBhZ2VMYXJnZUttYWxsb2MocGFnZSkpIHtcbkBAIC0yNTE3LDE2ICYjNDM7MjU1OSwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbiYjNDM7XHRpZiAoIWNhY2hlX25lZWRzX29iamNnKHMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIElnbm9yZSBhbHJlYWR5IGNoYXJnZWQgb2JqZWN0cy4gKi9cbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmIChvYmpfZXh0cykge1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KG9ial9leHQtXHUwMDNlb2JqY2cpKSB7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCAmIzQzOzM0MzIsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbiBcdFx0c3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7XG4gXHR9XG4gXG4mIzQzO1x0LyogSW5pdGlhbGl6ZXMgZnJvemVuLCBpbnVzZSwgYW5kIGFueSBleHRyYSA2NGJpdC1vbmx5IGZsYWdzICovXG4mIzQzO1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4mIzQzO1xuIFx0c2xhYi1cdTAwM2VvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7XG4tXHRzbGFiLVx1MDAzZWludXNlID0gMDtcbi1cdHNsYWItXHUwMDNlZnJvemVuID0gMDtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbiYjNDM7XHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuJiM0MzsjZW5kaWZcbiBcdHNsYWItXHUwMDNlc2xhYl9jYWNoZSA9IHM7XG4gXG4gXHRrYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbkBAIC02NTI2LDcgJiM0Mzs2NTcyLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuJiM0MztcdGVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiBcdFx0cmV0dXJuIHMtXHUwMDNlaW51c2U7XG4gXHQvKlxuIFx0ICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uXG5AQCAtNzkyOSw3ICYjNDM7Nzk3NSw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0YWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy1cdTAwM2VhbGlnbik7XG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuIFx0aWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQoYWxpZ25lZF9zaXplIC0gc2l6ZSBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKSlcbiYjNDM7XHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiAmIzQzOzg1ODUsOCBAQCB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZClcbiBcdFx0Ym9vdF9rbWVtX2NhY2hlX25vZGU7XG4gXHRpbnQgbm9kZTtcbiBcbiYjNDM7XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpO1xuJiM0MztcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2NoYXJnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgY2hhbmdlcyBob3cgYHNsYWJvYmpfZXh0YCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFjY2Vzc2VkLCBhbmQgbWFuYWdlZCwgcGFydGljdWxhcmx5IHdoZW4gYm90aCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhcmUgZW5hYmxlZC4gSXQgaW50cm9kdWNlcyBgU0xBQl9NQVlfQUNDT1VOVGAgYW5kIGNoYW5nZXMgdGhlIGxheW91dCBvZiBgc2xhYm9ial9leHRgLiBUaGVzZSBhcmUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uLCBsZWFrcywgb3IgYWNjb3VudGluZyBlcnJvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OGY4NDAzMmQxYmQ5MDhlNDYxNDljY2FjZGI5MDEzZWUzMzY5OTIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDI6MTM6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0CmluZGV4IDUzODlkMjQxMTc2YThhLi5kMDJlYjU0ZWU4ZjJjNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKQEAgLTExMiwzICYjNDM7MTEyLDEwIEBAIFRvIGRvIHNvOgogCiAtIFRoZW4sIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHlvdXIgYWxsb2NhdGlvbnM6CiAgIGFsbG9jX2hvb2tzX3RhZyhodC0mZ3Q7eW91cl9zYXZlZF90YWcsIGttYWxsb2Nfbm9wcm9mKC4uLikpCiYjNDM7CiYjNDM7Tm90ZXMKJiM0Mzs9PT09PQomIzQzOwomIzQzOy0gV2hlbiBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIEtGRU5DRSwgaXRzIGFjY291bnRpbmcgaXMgc2tpcHBlZC4KJiM0MzsgIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgbGltaXRlZCB0byBhIHNtYWxsIG51bWJlciwgc28gdGhpcyBvbWlzc2lvbgomIzQzOyAgaXMgbmVnbGlnaWJsZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMTQ0MCwxOSAmIzQzOzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwogCi0vKgotICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYW4gYXJyYXkgaW4gcGFnZS0mZ3Q7bWVtY2dfZGF0YQotICogaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC4KLSAqLwotc3RydWN0IHNsYWJvYmpfZXh0IHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLQlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwotCXVuaW9uIGNvZGV0YWdfcmVmIHJlZjsKLSNlbmRpZgotfSBfX2FsaWduZWQoOCk7Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAzMmM5ZjhlZDdhZTIwNS4uZTE5MTUwMjZlMDMwNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC00NSw2ICYjNDM7NDUsNyBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlfU0xBQl9BQ0NPVU5ULAomIzQzOwlfU0xBQl9NQVlfQUNDT1VOVCwKICNlbmRpZgogI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDCiAJX1NMQUJfS0FTQU4sCkBAIC0yMDQsOCAmIzQzOzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7CiAgKi8KICNpZmRlZiBDT05GSUdfTUVNQ0cKICMgZGVmaW5lIFNMQUJfQUNDT1VOVAkJX19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpCiYjNDM7IyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVAlfX1NMQUJfRkxBR19CSVQoX1NMQUJfTUFZX0FDQ09VTlQpCiAjZWxzZQogIyBkZWZpbmUgU0xBQl9BQ0NPVU5UCQlfX1NMQUJfRkxBR19VTlVTRUQKJiM0MzsjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UCV9fU0xBQl9GTEFHX1VOVVNFRAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQwpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmMKaW5kZXggNjU3N2JkNzY5NTRlYjQuLjkwOTI1YzY0NmM0YzI0IDEwMDY0NAotLS0gYS9tbS9rZmVuY2UvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9jb3JlLmMKQEAgLTYzNiwxMSAmIzQzOzYzNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZCkKIAogCQlwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICYjNDM7IGkpOwogCQlfX1NldFBhZ2VTbGFiKHBhZ2UpOwotI2lmZGVmIENPTkZJR19NRU1DRwotCQlzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKLQkJc2xhYi0mZ3Q7b2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZykmYW1wO2tmZW5jZV9tZXRhZGF0YV9pbml0W2kgLyAyIC0gMV0ub2JqX2V4dHMgfAotCQkJCSBNRU1DR19EQVRBX09CSkVYVFM7Ci0jZW5kaWYKIAl9CiAKIAkvKgpAQCAtNzA0LDEwICYjNDM7Njk5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKQogCQkJY29udGludWU7CiAKIAkJcGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAmIzQzOyBpKTsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLQkJc3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7Ci0JCXNsYWItJmd0O29ial9leHRzID0gMDsKLSNlbmRpZgogCQlfX0NsZWFyUGFnZVNsYWIocGFnZSk7CiAJfQogCkBAIC0xMjQ4LDkgJiM0MzsxMjM5LDYgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpCiB7CiAJc3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLQlLRkVOQ0VfV0FSTl9PTihtZXRhLSZndDtvYmpfZXh0cy5vYmpjZyk7Ci0jZW5kaWYKIAkvKgogCSAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmcKIAkgKiB0aGUgb2JqZWN0LCBhcyB0aGUgb2JqZWN0IHBhZ2UgbWF5IGJlIHJlY3ljbGVkIGZvciBvdGhlci10eXBlZApkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oCmluZGV4IDFmNjE4ZjliMGQxMmQ5Li5lNmI0YmYzNDlmZjczMCAxMDA2NDQKLS0tIGEvbW0va2ZlbmNlL2tmZW5jZS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2UuaApAQCAtMTAyLDkgJiM0MzsxMDIsNiBAQCBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHsKIAlzdHJ1Y3Qga2ZlbmNlX3RyYWNrIGZyZWVfdHJhY2sgX19ndWFyZGVkX2J5KCZhbXA7bG9jayk7CiAJLyogRm9yIHVwZGF0aW5nIGFsbG9jX2NvdmVyZWQgb24gZnJlZXMuICovCiAJdTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KCZhbXA7bG9jayk7Ci0jaWZkZWYgQ09ORklHX01FTUNHCi0Jc3RydWN0IHNsYWJvYmpfZXh0IG9ial9leHRzOwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIEtGRU5DRV9NRVRBREFUQV9TSVpFIFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEpICogXApkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYwppbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCkBAIC0yOTUsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkICp0ZXN0X2FsbG9jKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgZW51bSBhbGxvY2F0CiAJCQkgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS4KIAkJCSAqLwogCQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ial90b19pbmRleChzLCBzbGFiLCBhbGxvYyksIDBVKTsKLQkJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTsKJiM0MzsJCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi0mZ3Q7b2JqZWN0cyksIDEpOwogCiAJCQlpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSkKIAkJCQlyZXR1cm4gYWxsb2M7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZmQuLjZiNTFkZGY2ZGZlMDIyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yODY1LDE4ICYjNDM7Mjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKQogCSAqLwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwotCXVuc2lnbmVkIGludCBvZmY7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAogCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAlpZiAoIW9ial9leHRzKQogCQlyZXR1cm4gTlVMTDsKIAotCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQlvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgc2xhYiwgcCk7Ci0Jb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTsKLQlpZiAob2JqX2V4dC0mZ3Q7b2JqY2cpIHsKLQkJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC0mZ3Q7b2JqY2c7CiYjNDM7CWlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCXJldHVybiBOVUxMOwogCiYjNDM7CWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKJiM0MzsJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmpfZXh0cywgcCk7CiYjNDM7CW9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpOwomIzQzOwlpZiAob2JqY2cpIHsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCQlyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiAJfQpAQCAtMzU0MSw3ICYjNDM7MzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAJc2l6ZV90IG9ial9zaXplID0gb2JqX2Z1bGxfc2l6ZShzKTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgbG9uZyBvZmY7CiAJc2l6ZV90IGk7CiAKIAkvKgpAQCAtMzU4MywxMSAmIzQzOzM1ODMsMTYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSwKIAogCQlzbGFiID0gdmlydF90b19zbGFiKHBbaV0pOwogCi0JCWlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSAmYW1wOyZhbXA7Ci0JCSAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkgewotCQkJY29udGludWU7CiYjNDM7CQlpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikpIHsKJiM0MzsJCQlpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkKJiM0MzsJCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSAmYW1wOyZhbXA7IFdBUk5fT05fT05DRSghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qCiAJCSAqIGlmIHdlIGZhaWwgYW5kIHNpemUgaXMgMSwgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKCkgd2lsbAogCQkgKiBqdXN0IGZyZWUgdGhlIG9iamVjdCwgd2hpY2ggaXMgb2sgYXMgd2UgaGF2ZSBub3QgYXNzaWduZWQKQEAgLTM2MTYsMTAgJiM0MzszNjIxLDExIEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAKIAkJb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpOwogCQlnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7Ci0JCW9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTsKLQkJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTsKJiM0MzsJCW9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pOwomIzQzOwogCQlvYmpfY2dyb3VwX2dldChvYmpjZyk7Ci0JCW9ial9leHQtJmd0O29iamNnID0gb2JqY2c7CiYjNDM7CQlzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTsKJiM0MzsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCX0KIApAQCAtMzYzNSwxNSAmIzQzOzM2NDEsMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7CiAJCXN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jazsKLQkJdW5zaWduZWQgaW50IG9mZjsKIAotCQlvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7Ci0JCW9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7Ci0JCW9iamNnID0gb2JqX2V4dC0mZ3Q7b2JqY2c7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTsKJiM0MzsJCW9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpOwogCQlpZiAoIW9iamNnKQogCQkJY29udGludWU7CiAKLQkJb2JqX2V4dC0mZ3Q7b2JqY2cgPSBOVUxMOwomIzQzOwkJc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBOVUxMKTsKIAogCQlzdG9jayA9IHRyeWxvY2tfc3RvY2soKTsKIAkJX19yZWZpbGxfb2JqX3N0b2NrKG9iamNnLCBzdG9jaywgb2JqX3NpemUsIHRydWUpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IGY1ZTMzNmI2YjZiMDRjLi4wNDYwMGY1N2I0MDE0NiAxMDA2NDQKLS0tIGEvbW0vc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaApAQCAtODEsMTAgJiM0Mzs4MSwxMSBAQCBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgewogI2lmZGVmIENPTkZJR182NEJJVAogCQkJCQkvKgogCQkJCQkgKiBTb21lIG9wdGltaXphdGlvbnMgdXNlIGZyZWUgYml0cyBpbiAmIzM5O2NvdW50ZXJzJiMzOTsgZmllbGQKLQkJCQkJICogdG8gc2F2ZSBtZW1vcnkuIEluIGNhc2UgLSZndDtzdHJpZGUgZmllbGQgaXMgbm90IGF2YWlsYWJsZSwKLQkJCQkJICogc3VjaCBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4KJiM0MzsJCQkJCSAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3QKJiM0MzsJCQkJCSAqIGF2YWlsYWJsZSwgc3VjaCBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4KIAkJCQkJICovCi0JCQkJCXVuc2lnbmVkIGludCBzdHJpZGU7CiYjNDM7CQkJCQl1bnNpZ25lZCBvYmpfZXh0c19pbl9vYmplY3Q6MTsKJiM0MzsJCQkJCXVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7CiAjZW5kaWYKIAkJCQl9OwogCQkJfTsKQEAgLTMzMCwxMiAmIzQzOzMzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJcmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLAotCQkJCWNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKQotewotCXJldHVybiBzbGFiLSZndDtvYmplY3RzOwotfQotCiAvKgogICogU3RhdGUgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLgogICoKQEAgLTU1NSw2ICYjNDM7NTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyoKJiM0MzsgKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW4KJiM0MzsgKiBzbGFiLSZndDtvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS0mZ3Q7bWVtY2dfZGF0YSkgaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3Qgc2xhYm9ial9leHQgewomIzQzOwkvKgomIzQzOwkgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHVuaW9uIHNob3VsZCBiZSBwb2ludGVyLXNpemVkIHRvIGF2b2lkIG1lbW9yeQomIzQzOwkgKiB3YXN0ZQomIzQzOwkgKi8KJiM0MzsJdW5pb24gewomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MzsJCXN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7CiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7CQl1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7CiYjNDM7I2VuZGlmCiYjNDM7CX07CiYjNDM7fSBfX2FsaWduZWQoOCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCwKJiM0MzsJCQkgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULAomIzQzOwkJCQkgICAmYW1wO3NsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKGNhY2hlLSZndDtmbGFncyAmYW1wOyBTTEFCX01BWV9BQ0NPVU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsJcmV0dXJuIHNsYWItJmd0O29ial9leHRzX25lZWRzX29iamNnOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLSZndDtzbGFiX2NhY2hlKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKQomIzQzO3sKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGNhY2hlX25lZWRzX29iamNnKHMpKQomIzQzOwkJc3ogJiM0Mzs9IDE7CiYjNDM7CiYjNDM7CWlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSkKJiM0MzsJCXN6ICYjNDM7PSAxOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlzaXplX3Qgc3ogPSAwOwomIzQzOwomIzQzOwlpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCXN6ICYjNDM7PSAxOwomIzQzOwomIzQzOwlpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpCiYjNDM7CQlzeiAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFQKIAogLyoKQEAgLTU3Miw3ICYjNDM7NjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZCkKICAqIG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKICAqIGlmIChvYmpfZXh0cykgewogICogICAgICAgICBnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7Ci0gKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial90b19pbmRleChzLCBzbGFiLCBvYmopKTsKJiM0MzsgKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iaik7CiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHQKICAqICAgICAgICAgcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogICogfQpAQCAtNjEwLDQ4ICYjNDM7NjkyLDg2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc2xhYl9vYmpfZXh0cyh1bnNpZ25lZCBsb25nIG9ial9leHRzKQogfQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0Jc2xhYi0mZ3Q7c3RyaWRlID0gc3RyaWRlOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKQotewotCXJldHVybiBzbGFiLSZndDtzdHJpZGU7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvCiYjNDM7CSAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dAomIzQzOwkgKiBhbGxvY2F0aW9ucyB3aXRoaW5fc2xhYl9sZWZ0b3ZlciBhcmUgcHJlZmVycmVkLiBBbmQgdGhvc2UgbWF5IGJlCiYjNDM7CSAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHNsYWItJmd0O29ial9leHRzX2luX29iamVjdDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCVZNX1dBUk5fT05fT05DRShzdHJpZGUgIT0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIAogLyoKICAqIHNsYWJfb2JqX2V4dCAtIGdldCB0aGUgcG9pbnRlciB0byB0aGUgc2xhYiBvYmplY3QgZXh0ZW5zaW9uIG1ldGFkYXRhCiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi4KJiM0MzsgKiBAczogY2FjaGUgdGhhdCB0aGUgc2xhYiBiZWxvbmdzIHRvCiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdAogICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yCi0gKiBAaW5kZXg6IGFuIGluZGV4IG9mIHRoZSBvYmplY3QKJiM0MzsgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LgogICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqCiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKJiM0MzsJICAgICBjb25zdCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwomIzQzOwl1bnNpZ25lZCBpbnQgaW5kZXg7CiYjNDM7CXVuc2lnbmVkIGludCBzdHJpZGU7CiAKIAlWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7CiAKLQlvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOwotCQkJCQkgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpOwomIzQzOwkvKgomIzQzOwkgKiBLRkVOQ0Ugb2JqZWN0cyBoYXZlIE5VTEwgb2JqX2V4dHMgYW5kIHRodXMgY2FuJiMzOTt0IHJlYWNoIHRoaXMKJiM0MzsJICogYW5kIHdlIGRvbiYjMzk7dCBuZWVkIG9ial90b19pbmRleCgpCiYjNDM7CSAqLwomIzQzOwlpbmRleCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTsKJiM0MzsKJiM0MzsJaWYgKCFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpCiYjNDM7CQlzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTsKJiM0MzsJZWxzZQomIzQzOwkJc3RyaWRlID0gcy0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJb2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MzsgaW5kZXggKiBzdHJpZGUpOwomIzQzOwogCXJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCkKJiM0Mzt7CiYjNDM7CS8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueXRoaW5nICovCiYjNDM7CXJldHVybiBvYmpfZXh0LSZndDtfb2JqY2c7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCwKJiM0MzsJCQkJCSAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQomIzQzO3sKJiM0MzsJLyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KJiM0MzsJb2JqX2V4dC0mZ3Q7X29iamNnID0gb2JqY2c7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwomIzQzO3N0YXRpYyBpbmxpbmUgdW5pb24gY29kZXRhZ19yZWYgKgomIzQzO3NsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KQomIzQzO3sKJiM0MzsJaWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpCiYjNDM7CQlvYmpfZXh0ICYjNDM7PSAxOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtvYmpfZXh0LSZndDtfY3RyZWY7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQkJZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpOwogCkBAIC02NjIsMTYgJiM0Mzs3ODIsMTcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGluZGV4KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICoKJiM0MztzbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLAomIzQzOwkgICAgIGNvbnN0IHZvaWQgKm9iaikKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIDA7IH0KLQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogCiAjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqLwogCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCAwM2VjYWMxMmNkODY1Zi4uMWUxZDNmZWVjMzUzNWIgMTAwNjQ0Ci0tLSBhL21tL3NsYWJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYl9jb21tb24uYwpAQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7CiAJCVNMQUJfT0JKX0VYVF9JTl9PQkopCiAKICNkZWZpbmUgU0xBQl9NRVJHRV9TQU1FIChTTEFCX1JFQ0xBSU1fQUNDT1VOVCB8IFNMQUJfQ0FDSEVfRE1BIHwgXAotCQkJIFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQpCiYjNDM7CQkJIFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQgfCBTTEFCX01BWV9BQ0NPVU5UKQogCiAvKgogICogTWVyZ2UgY29udHJvbC4gSWYgdGhpcyBpcyBzZXQgdGhlbiBubyBtZXJnaW5nIG9mIHNsYWIgY2FjaGVzIHdpbGwgb2NjdXIuCkBAIC0zNTksNiAmIzQzOzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogRm9yIG5vdyB3ZSBhc3N1bWUgYW55IGNhY2hlIGNhbiBiZSB1c2VkIHdpdGggX19HRlBfQUNDT1VOVCBhbmQgdGh1cwomIzQzOwkgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0cwomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKJiM0MzsJCWZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7CiYjNDM7CiAJLyogRmFpbCBjbG9zZWQgb24gYmFkIHVzZXJzaXplIG9mIHVzZXJvZmZzZXQgdmFsdWVzLiAqLwogCWlmICghSVNfRU5BQkxFRChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpIHx8CiAJICAgIFdBUk5fT04oIWFyZ3MtJmd0O3VzZXJzaXplICZhbXA7JmFtcDsgYXJncy0mZ3Q7dXNlcm9mZnNldCkgfHwKQEAgLTk4NCwxMSAmIzQzOzk5MSwyMCBAQCBuZXdfa21hbGxvY19jYWNoZShpbnQgaWR4LCBlbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB0eXBlKQogI2VuZGlmCiAKIAkvKgotCSAqIElmIENPTkZJR19NRU1DRyBpcyBlbmFibGVkLCBkaXNhYmxlIGNhY2hlIG1lcmdpbmcgZm9yCi0JICogS01BTExPQ19OT1JNQUwgY2FjaGVzLgomIzQzOwkgKiBJZiBtZW1jZ19rbWVtIGlzIGVuYWJsZWQgYW5kIHRoaXMgaXMgYSBLTUFMTE9DX05PUk1BTCBjYWNoZSBhbmQgbm90CiYjNDM7CSAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0JiMzOTtzIG5ldmVyIG1lcmdlZCB3aXRoIGFueSBvdGhlcgomIzQzOwkgKiBjYWNoZS4KJiM0MzsJICoKJiM0MzsJICogSW4gb3RoZXIgY2FzZXMgdGhlIGttYWxsb2MgY2FjaGUgbWF5IGVuZCB1cCBiZWluZyB1c2VkIGZvciBhCiYjNDM7CSAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2guIFRoZSBleGNlcHRpb24gaXMgYQomIzQzOwkgKiBLTUFMTE9DX05PX09CSl9FWFQgY2FjaGUuCiAJICovCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7ICh0eXBlID09IEtNQUxMT0NfTk9STUFMKSkKLQkJZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkgewomIzQzOwkJaWYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwgJmFtcDsmYW1wOyBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpCiYjNDM7CQkJZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTsKJiM0MzsJCWVsc2UgaWYgKCEoZmxhZ3MgJmFtcDsgU0xBQl9OT19PQkpfRVhUKSkKJiM0MzsJCQlmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UOwomIzQzOwl9CiAKIAlpZiAobWluYWxpZ24gJmd0OyBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHsKIAkJYWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggMDMzN2U2MGRiNWFjZTAuLjk0Yjc0NGU1YWM3OTE5IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC0yMTMsNiAmIzQzOzIxMywxMSBAQCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpOwogc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHN0cmljdF9udW1hKTsKICNlbmRpZgogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULAomIzQzOwkJCXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpOwomIzQzOyNlbmRpZgomIzQzOwogLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqLwogc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7CiAJdW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjsKQEAgLTgwMyw3ICYjNDM7ODA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKQogewotCXJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItJmd0O29iamVjdHM7CiYjNDM7CXJldHVybiBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItJmd0O29iamVjdHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywKQEAgLTg3MCwxOCAmIzQzOzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHXzY0QklUKQotc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKLXsKLQkvKgotCSAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvCi0JICogY2hlY2sgdGhlIHN0cmlkZS4gQSBjYWNoZSBjYW4gaGF2ZSBTTEFCX09CSl9FWFRfSU5fT0JKIHNldCwgYnV0Ci0JICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZQotCSAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLgotCSAqLwotCXJldHVybiBvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpICZhbXA7JmFtcDsKLQkgICAgICAgKHNsYWJfZ2V0X3N0cmlkZShzbGFiKSA9PSBzLSZndDtzaXplKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfaW5mb19lbmQocyk7CkBAIC04OTYsMTYgJiM0Mzs4ODksMjAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCiAJcmV0dXJuIG9mZnNldDsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKQogewotCXJldHVybiBmYWxzZTsKJiM0MzsJc2xhYi0mZ3Q7b2JqX2V4dHNfaW5fb2JqZWN0ID0gMTsKIH0KLQomIzQzOyNlbHNlCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzO30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKQEAgLTEyMDYsOCAmIzQzOzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApCiAKIAlvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpOwogCi0JaWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkKLQkJb2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTsKJiM0MzsJaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSkKJiM0MzsJCW9mZiAmIzQzOz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7CiAKIAlpZiAob2ZmICE9IHNpemVfZnJvbV9vYmplY3QocykpCiAJCS8qIEJlZ2lubmluZyBvZiB0aGUgZmlsbGVyIGlzIHRoZSBmcmVlIHBvaW50ZXIgKi8KQEAgLTE0MTEsOCAmIzQzOzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKQogCiAJb2ZmICYjNDM7PSBrYXNhbl9tZXRhZGF0YV9zaXplKHMsIGZhbHNlKTsKIAotCWlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpCi0JCW9mZiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7CiYjNDM7CWlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpCiYjNDM7CQlvZmYgJiM0Mzs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpOwogCiAJaWYgKHNpemVfZnJvbV9vYmplY3QocykgPT0gb2ZmKQogCQlyZXR1cm4gMTsKQEAgLTE0MzksNyAmIzQzOzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpCiAJbGVuZ3RoID0gc2xhYl9zaXplKHNsYWIpOwogCWVuZCA9IHN0YXJ0ICYjNDM7IGxlbmd0aDsKIAotCWlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpICZhbXA7JmFtcDsgIW9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkgewomIzQzOwlpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSAmYW1wOyZhbXA7ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHsKIAkJcmVtYWluZGVyID0gbGVuZ3RoOwogCQlyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7CiAJCXJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7CkBAIC0yMDcwLDIwICYjNDM7MjA2NywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopCiAJb2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTsKIAlzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTsKIAlpZiAoc2xhYl9leHRzKSB7CiYjNDM7CQlzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDsKJiM0MzsJCXVuaW9uIGNvZGV0YWdfcmVmICpyZWY7CiYjNDM7CiAJCWdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7Ci0JCXVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLSZndDtzbGFiX2NhY2hlLAotCQkJCQkJIG9ial9zbGFiLCBvYmopOwotCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYiwKLQkJCQkJCSAgICAgICBzbGFiX2V4dHMsIG9mZnMpOwomIzQzOwkJZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLSZndDtzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopOwomIzQzOwkJcmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKG9ial9zbGFiLCBleHQpOwogCi0JCWlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHsKIAkJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi8KLQkJV0FSTl9PTihleHQtJmd0O3JlZi5jdCk7Ci0JCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpOwomIzQzOwkJV0FSTl9PTihyZWYtJmd0O2N0KTsKJiM0MzsJCXNldF9jb2RldGFnX2VtcHR5KHJlZik7CiAJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJfQogfQpAQCAtMjA5MywxOSAmIzQzOzIwOTEsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpCiAJcmV0dXJuIGNtcHhjaGcoJmFtcDtzbGFiLSZndDtvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCi0JCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYiwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc3RyaWRlOwomIzQzOwomIzQzOwlpZiAoIXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qCiAJICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlCiAJICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpcwogCSAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi4KIAkgKi8KLQlpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7Ci0JCXVuc2lnbmVkIGludCBpOwomIzQzOwlpZiAob2JqX2V4dHMgIT0gT0JKRVhUU19BTExPQ19GQUlMKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAvIHNpemVvZigqdmVjKTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBzbGFiLSZndDtvYmplY3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpOwogCi0JCWZvciAoaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykKLQkJCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7dmVjW2ldLnJlZik7CiYjNDM7CQlzZXRfY29kZXRhZ19lbXB0eShyZWYpOwomIzQzOwkJdmVjICYjNDM7PSBzdHJpZGU7CiAJfQogfQogCkBAIC0yMTEzLDggJiM0MzsyMTIxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCXN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLAomIzQzOwkJdW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpIHt9CiAKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqLwogCkBAIC0yMTI3LDEyICYjNDM7MjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAljb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7Ci0JdW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpOwogCWJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05FV19TTEFCOwogCXVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7CiAJdW5zaWduZWQgbG9uZyBvbGRfZXh0czsKIAlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYzsKLQlzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItJmd0O29iamVjdHM7CiYjNDM7CXNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi0mZ3Q7b2JqZWN0czsKIAogCWdmcCAmYW1wOz0gfk9CSkNHU19DTEVBUl9NQVNLOwogCS8qCkBAIC0yMTgzLDcgJiM0MzsyMTkwLDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogI2VuZGlmCiByZXRyeToKIAlvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLSZndDtvYmpfZXh0cyk7Ci0JaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKG9sZF9leHRzLCB2ZWMsIG9iamVjdHMpOwomIzQzOwloYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7CiAKIAlpZiAobmV3X3NsYWIpIHsKIAkJLyoKQEAgLTIyNTAsOSAmIzQzOzIyNTcsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAl2b2lkICphZGRyOwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAKLQkvKiBJbml0aWFsaXplIHN0cmlkZSBlYXJseSB0byBhdm9pZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzICovCi0Jc2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKLQogCWlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKQogCQlyZXR1cm47CiAKQEAgLTIyNzgsMTUgJiM0MzsyMjgyLDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQogCiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAkJZm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi0mZ3Q7b2JqZWN0cykKLQkJCW1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgJiM0Mzsgb2Zmc2V0LCAwLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKJiM0MzsJCQltZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCwgc2xhYl9vYmpfZXh0X3NpemUoc2xhYikpOwogCQlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAkJb2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTOwogI2VuZGlmCiAJCXNsYWItJmd0O29ial9leHRzID0gb2JqX2V4dHM7Ci0JCXNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLSZndDtzaXplKTsKJiM0MzsJCXNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzbGFiKTsKIAl9CiB9CiAKQEAgLTIzMjMsMTEgJiM0MzsyMzI2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLAogCQkJICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdm9pZCAqcCkKIHsKLQlpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgJmFtcDsmYW1wOwotCSAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHsKLQkJcHJfd2Fybl9vbmNlKCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcbiYjMzQ7LAotCQkJICAgICBfX2Z1bmNfXywgcy0mZ3Q7bmFtZSk7Ci0JCXJldHVybiAwOwomIzQzOwlpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikpIHsKJiM0MzsJCWlmIChpc19rZmVuY2VfYWRkcmVzcyhwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHsKJiM0MzsJCQlwcl93YXJuX29uY2UoJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxuJiMzNDssCiYjNDM7CQkJCSAgICAgX19mdW5jX18sIHMtJmd0O25hbWUpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQogCX0KIAogCXJldHVybiBzbGFiX29ial9leHRzKHNsYWIpOwpAQCAtMjM2MCwxNCAmIzQzOzIzNjcsMjQgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncywKIAkgKiBjaGVjayBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIGFsbG9jX3RhZ19hZGQoKS4KIAkgKi8KIAlpZiAob2JqX2V4dHMpIHsKLQkJdW5zaWduZWQgaW50IG9ial9pZHggPSBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqZWN0KTsKJiM0MzsJCXVuaW9uIGNvZGV0YWdfcmVmICpyZWY7CiAKIAkJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTsKLQkJYWxsb2NfdGFnX2FkZCgmYW1wO29ial9leHQtJmd0O3JlZiwgY3VycmVudC0mZ3Q7YWxsb2NfdGFnLCBzLSZndDtzaXplKTsKJiM0MzsKJiM0MzsJCW9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iamVjdCk7CiYjNDM7CQlyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7CiYjNDM7CiYjNDM7CQlhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC0mZ3Q7YWxsb2NfdGFnLCBzLSZndDtzaXplKTsKJiM0MzsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCX0gZWxzZSB7Ci0JCWFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LSZndDthbGxvY190YWcpOwomIzQzOwkJLyoKJiM0MzsJCSAqIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZwomIzQzOwkJICogb25lcyBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIHNvIGl0JiMzOTtzIG5vdCB3b3J0aCBzZXR0aW5nCiYjNDM7CQkgKiB0YWdzIGFzIGluYWNjdXJhdGUgYmVjYXVzZSBvZiB0aGVtLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWlzX2tmZW5jZV9hZGRyZXNzKG9iamVjdCkpCiYjNDM7CQkJYWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtJmd0O2FsbG9jX3RhZyk7CiAJfQogfQogCkBAIC0yMzg0LDcgJiM0MzsyNDAxLDYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQKIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLAogCQkJICAgICAgIGludCBvYmplY3RzKQogewotCWludCBpOwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAKIAkvKiBzbGFiLSZndDtvYmpfZXh0cyBtaWdodCBub3QgYmUgTlVMTCBpZiBpdCB3YXMgY3JlYXRlZCBmb3IgTUVNQ0cgYWNjb3VudGluZy4gKi8KQEAgLTIzOTYsMTAgJiM0MzsyNDEyLDExIEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwCiAJCXJldHVybjsKIAogCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgb2JqZWN0czsgaSYjNDM7JiM0MzspIHsKLQkJdW5zaWduZWQgaW50IG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7CiAKLQkJYWxsb2NfdGFnX3N1YigmYW1wO3NsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKS0mZ3Q7cmVmLCBzLSZndDtzaXplKTsKJiM0MzsJCWV4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7CiYjNDM7CQlhbGxvY190YWdfc3ViKHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCBleHQpLCBzLSZndDtzaXplKTsKIAl9CiAJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogfQpAQCAtMjQxMiw2ICYjNDM7MjQyOSwyNSBAQCBhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiAJCV9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwLCBvYmplY3RzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWFrZSBzdXJlIHRoZSBzdGF0aWMga2V5IHVzZWQgYnkgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkgcmVmbGVjdHMgdGhlCiYjNDM7ICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKQomIzQzOyAqCiYjNDM7ICogQW55IGxhdGVyIG1lbSBhbGxvYyBwcm9maWxpbmcgc2h1dGRvd24gd29uJiMzOTt0IGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGljIGtleQomIzQzOyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJYm9vbCBuZWVkX2NvZGV0YWcgPSAhbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCgpOwomIzQzOwomIzQzOwlpZiAobmVlZF9jb2RldGFnICE9IHN0YXRpY19rZXlfZW5hYmxlZCgmYW1wO3NsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7CiYjNDM7CQlpZiAobmVlZF9jb2RldGFnKQomIzQzOwkJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc3RhdGljX2JyYW5jaF9kaXNhYmxlKCZhbXA7c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTI0MjYsNiAmIzQzOzI0NjIsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLAogewogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqLwogCiAKQEAgLTI0NzEsNiAmIzQzOzI1MTEsOSBAQCB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiAJaWYgKGxpa2VseSghb2JqX2V4dHMpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAlfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTsKIAlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CkBAIC0yNDg0LDcgJiM0MzsyNTI3LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKQogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBzbGFiICpzbGFiOwotCXVuc2lnbmVkIGxvbmcgb2ZmOwogCiAJcGFnZSA9IHZpcnRfdG9fcGFnZShwKTsKIAlpZiAoUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkgewpAQCAtMjUxNywxNiAmIzQzOzI1NTksMTUgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKQogCSAqIG9mIHNsYWJfb2JqX2V4dHMgYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgc2xhYiBhbmQgdGh1cyB0aGUgc2xhYgogCSAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuCiAJICovCi0JaWYgKGlzX2ttYWxsb2Nfbm9ybWFsKHMpKQomIzQzOwlpZiAoIWNhY2hlX25lZWRzX29iamNnKHMpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qIElnbm9yZSBhbHJlYWR5IGNoYXJnZWQgb2JqZWN0cy4gKi8KIAlvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7CiAJaWYgKG9ial9leHRzKSB7CiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQkJb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApOwotCQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpOwotCQlpZiAodW5saWtlbHkob2JqX2V4dC0mZ3Q7b2JqY2cpKSB7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTsKJiM0MzsJCWlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7CiAJCQlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMzM5MSwxMCAmIzQzOzM0MzIsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywKIAkJc3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7CiAJfQogCiYjNDM7CS8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqLwomIzQzOwlzbGFiLSZndDtjb3VudGVycyA9IDA7CiYjNDM7CiAJc2xhYi0mZ3Q7b2JqZWN0cyA9IG9vX29iamVjdHMob28pOwotCXNsYWItJmd0O2ludXNlID0gMDsKLQlzbGFiLSZndDtmcm96ZW4gPSAwOwogCiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOwlpZiAoY2FjaGVfbmVlZHNfb2JqY2cocykpCiYjNDM7CQlzbGFiLSZndDtvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7CiYjNDM7I2VuZGlmCiAJc2xhYi0mZ3Q7c2xhYl9jYWNoZSA9IHM7CiAKIAlrYXNhbl9wb2lzb25fc2xhYihzbGFiKTsKQEAgLTY1MjYsNyAmIzQzOzY1NzIsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKQogCSAqLwogCWlmIChzLSZndDtmbGFncyAmYW1wOyAoU0xBQl9UWVBFU0FGRV9CWV9SQ1UgfCBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm4gcy0mZ3Q7aW51c2U7Ci0JZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKQomIzQzOwllbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpCiAJCXJldHVybiBzLSZndDtpbnVzZTsKIAkvKgogCSAqIEVsc2Ugd2UgY2FuIHVzZSBhbGwgdGhlIHBhZGRpbmcgZXRjIGZvciB0aGUgYWxsb2NhdGlvbgpAQCAtNzkyOSw3ICYjNDM7Nzk3NSw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCWFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtJmd0O2FsaWduKTsKICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfNjRCSVQpCiAJaWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLSZndDtmbGFncykgJmFtcDsmYW1wOwotCQkJKGFsaWduZWRfc2l6ZSAtIHNpemUgJmd0Oz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpKQomIzQzOwkJCShhbGlnbmVkX3NpemUgLSBzaXplICZndDs9IGNhY2hlX29ial9leHRfc2l6ZShzKSkpCiAJCXMtJmd0O2ZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7CiAjZW5kaWYKIAlzaXplID0gYWxpZ25lZF9zaXplOwpAQCAtODUzOSw2ICYjNDM7ODU4NSw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKQogCQlib290X2ttZW1fY2FjaGVfbm9kZTsKIAlpbnQgbm9kZTsKIAomIzQzOwlzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpOwomIzQzOwogCWlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSkKIAkJc2x1Yl9tYXhfb3JkZXIgPSAwOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzUwCgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgT2JqZWN0IEV4dGVuc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2gsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBzdWJzdGFudGlhbCBjaGFuZ2VzIHRvIGhvdyBgc2xhYm9ial9leHRgIGlzIGhhbmRsZWQgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB0aGlzIGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBob3cgb2JqZWN0IGV4dGVuc2lvbnMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBzbyB0aGlzIGFic29sdXRlbHkgKm5lZWRzKiBmdXp6aW5nLgoKVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhlIHdheSBgc2xhYm9ial9leHRgIGlzIGRlZmluZWQgaW5pdGlhbGx5IGNvbmZ1c2VkIG1lLCBhcyB0aGUgdW5pb24gc3RydWN0dXJlIHNlZW1lZCB0byBzdWdnZXN0IHRoYXQgaWYgYm90aCBmZWF0dXJlcyB3ZXJlIGVuYWJsZWQsIHRoZXkgd291bGQgc2hhcmUgdGhlIHNhbWUgbWVtb3J5LiBCdXQsIG5vLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFjdHVhbGx5IGFuIGFycmF5IG9mIGBzbGFib2JqX2V4dGAgZWxlbWVudHMgcGVyIG9iamVjdC4gSWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgdGhlIGZpcnN0IGVsZW1lbnQgd2lsbCBiZSB1c2VkIGZvciBgb2JqY2dgLCBhbmQgdGhlbiBgY29kZXRhZ19yZWZgIGdvZXMgaW4gdGhlIHNlY29uZC4gVGhlIHNpemUgb2YgYHNsYWJvYmpfZXh0YCBpcyA4IGJ5dGVzLCBhbmQgYHNsYWJfb2JqX2V4dF9zaXplYCByZXR1cm5zIGBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6YCB3aGVyZSBgc3pgIGlzIGVpdGhlciAxIG9yIDIgZGVwZW5kaW5nIG9uIHRoZSBuZWVkLgoKVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUmIzM5O3MgYSBnb29kIGFtb3VudCBvZiBleHRyYSBtZW1vcnkgdXNlIGlmIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFyZSBib3RoIGVuYWJsZWQuCgpMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgbmV3bHkgaW50cm9kdWNlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwb3NlZCBzeW1ib2xzIOKAkyB0aGluZ3MgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG1pZ2h0IGJlIGNhbGxpbmcuIFdlJiMzOTt2ZSBnb3QgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCB0aGUgaW5saW5lIGBzbGFiX29ial9leHRgLCBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBhbmQgYGttZW1fY2FjaGVfY3JlYXRlYCAoaW5kaXJlY3RseSB2aWEgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2ApLCBwbHVzIGBrbWVtX2NhY2hlX2FsbG9jYCBhbmQgYGttZW1fY2FjaGVfZnJlZWAgdmlhIGhvb2tzLgoKTm93LCBsZXQmIzM5O3MgaHVudCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHJlbGV2YW50IGZpbGVzLiBJJiMzOTttIGNoZWNraW5nIGBtbS9zbHViLmNgLCBgbW0vc2xhYl9jb21tb24uY2AsIGFuZCBgbW0vbWVtY29udHJvbC5jYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIG5vbi1zdGF0aWMgaW4gYG1tL3NsdWIuY2AsIGFuZCBzbyBhcmUgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBhbmQgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGhvb2tzLiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGNvbmZpcm0gdGhhdCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyBub24tc3RhdGljLiBGaW5hbGx5LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpcyBub24tc3RhdGljIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4KCkFsc28gdG8ga2VlcCBpbiBtaW5kIGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgQ09ORklHX01FTUNHYCwgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCwgYENPTkZJR19TTEFCX09CSl9FWFRgIChzZWxlY3RlZCBieSB0aGUgYWJvdmUpLCBhbmQgYENPTkZJR19LRkVOQ0VgLiBJIHNob3VsZCB2ZXJpZnkgdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbmFtZXMsIGxhdGVyLCBidXQgdGhlc2UgYXJlIGFsbCBzdGFydGluZyBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sfHN0cnVjdCBbYS16X10mIzQzOyBcXCo/KSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9NDAzPXN0YXRpYyBpbmxpbmVcbm1tL3NsdWIuYzo0MDQ6dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxubW0vc2x1Yi5jLTQwNS17XG4tLVxubW0vc2x1Yi5jPTkzNT1zdGF0aWMgYm9vbCBzbGFiX2FkZF9rdW5pdF9lcnJvcnModm9pZClcbi0tXG5tbS9zbHViLmMtOTUwLVxubW0vc2x1Yi5jOjk1MTpib29sIHNsYWJfaW5fa3VuaXRfdGVzdCh2b2lkKVxubW0vc2x1Yi5jLTk1Mi17XG4tLVxubW0vc2x1Yi5jPTEwOTM9c3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0LCB1bnNpZ25lZCBsb25nIHByX3RpbWUpXG4tLVxubW0vc2x1Yi5jLTExMTAtXG5tbS9zbHViLmM6MTExMTp2b2lkIHByaW50X3RyYWNraW5nKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtMTExMi17XG4tLVxubW0vc2x1Yi5jPTExMjE9c3RhdGljIHZvaWQgcHJpbnRfc2xhYl9pbmZvKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0xMTI3LVxubW0vc2x1Yi5jOjExMjg6dm9pZCBza2lwX29yaWdfc2l6ZV9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTExMjkte1xuLS1cbm1tL3NsdWIuYz0xNzA4PXN0YXRpY1xubW0vc2x1Yi5jOjE3MDk6dm9pZCBzZXR1cF9zbGFiX2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqYWRkcilcbm1tL3NsdWIuYy0xNzEwLXtcbi0tXG5tbS9zbHViLmM9MjAxMD1zdGF0aWMgaW5saW5lXG5tbS9zbHViLmM6MjAxMTp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKSB7fVxubW0vc2x1Yi5jLTIwMTItXG4tLVxubW0vc2x1Yi5jPTIxMjk9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjEzMy1cbm1tL3NsdWIuYzoyMTM0OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM1LVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yNDc2PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI0Nzc6Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjQ3OC1cdFx0XHRcdHNpemVfdCBzaXplLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmM9MjUwMT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTAyOnZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbm1tL3NsdWIuYy0yNTAzLVx0XHRcdCAgaW50IG9iamVjdHMpXG4tLVxubW0vc2x1Yi5jPTI1MjI9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6MjUyMzpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjUyNC17XG4tLVxubW0vc2x1Yi5jPTI2MzY9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vc2x1Yi5jOjI2Mzc6Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxubW0vc2x1Yi5jLTI2MzgtXHRcdCAgICBib29sIGFmdGVyX3JjdV9kZWxheSlcbi0tXG5tbS9zbHViLmM9MjcyMT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNzIyOmJvb2wgc2xhYl9mcmVlX2ZyZWVsaXN0X2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipoZWFkLCB2b2lkICoqdGFpbCxcbm1tL3NsdWIuYy0yNzIzLVx0XHRcdCAgICAgaW50ICpjbnQpXG4tLVxubW0vc2x1Yi5jPTQwNjc9c3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS9zbHViLmMtNDA5MC0vKiBuZWVkZWQgZm9yIGt2ZnJlZV9yY3VfYmFycmllcigpICovXG5tbS9zbHViLmM6NDA5MTp2b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTQwOTIte1xuLS1cbm1tL3NsdWIuYy00MTIxLVxubW0vc2x1Yi5jOjQxMjI6dm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZClcbm1tL3NsdWIuYy00MTIzLXtcbi0tXG5tbS9zbHViLmM9NDU5MT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzo0NTkyOmJvb2wgc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3Qgc2l6ZSxcbm1tL3NsdWIuYy00NTkzLVx0XHRcdCAgdm9pZCAqKnAsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxuLS1cbm1tL3NsdWIuYz01MDAyPUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKTtcbm1tL3NsdWIuYy01MDAzLVxubW0vc2x1Yi5jOjUwMDQ6Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcbm1tL3NsdWIuYy01MDA1LXtcbi0tXG5tbS9zbHViLmM9NTA3OD1rbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubW0vc2x1Yi5jLTUxNjAtICovXG5tbS9zbHViLmM6NTE2MTp2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5tbS9zbHViLmMtNTE2Mi1cdFx0XHQgICAgIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG5tbS9zbHViLmMtNTIxOC0gKi9cbm1tL3NsdWIuYzo1MjE5OmludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxubW0vc2x1Yi5jLTUyMjAtXHRcdFx0ICAgIHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmM9NTk3Nz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzo1OTc4OmJvb2wgZnJlZV90b19wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTU5Nzkte1xuLS1cbm1tL3NsdWIuYz02MDcxPXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYwNzItXG5tbS9zbHViLmM6NjA3Mzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG5tbS9zbHViLmMtNjA3NC17XG4tLVxubW0vc2x1Yi5jPTYzOTU9c3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjQwNy1cbm1tL3NsdWIuYzo2NDA4OnZvaWQgZGVmZXJfZnJlZV9iYXJyaWVyKHZvaWQpXG5tbS9zbHViLmMtNjQwOS17XG4tLVxubW0vc2x1Yi5jPTY0MTY9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjQxNzp2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcbm1tL3NsdWIuYy02NDE4LVx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9NjQzNT1zdGF0aWMgbm9pbmxpbmVcbm1tL3NsdWIuYzo2NDM2OnZvaWQgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtNjQzNy17XG4tLVxubW0vc2x1Yi5jPTY0NDc9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjQ0ODp2b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcbm1tL3NsdWIuYy02NDQ5LVx0XHQgICAgdm9pZCAqdGFpbCwgdm9pZCAqKnAsIGludCBjbnQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9NjQ2ND1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4tLVxubW0vc2x1Yi5jLTY0OTItI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmM6NjQ5Mzp2b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9zbHViLmMtNjQ5NC17XG4tLVxubW0vc2x1Yi5jPTY1MDA9c3RhdGljIG5vaW5saW5lIHZvaWQgd2Fybl9mcmVlX2JhZF9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbi0tXG5tbS9zbHViLmMtNjUyOS0gKi9cbm1tL3NsdWIuYzo2NTMwOnZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KVxubW0vc2x1Yi5jLTY1MzEte1xuLS1cbm1tL3NsdWIuYz02NjQ0PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy02NjY5LSAqL1xubW0vc2x1Yi5jOjY2NzA6dm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm1tL3NsdWIuYy02NjcxLXtcbi0tXG5tbS9zbHViLmMtNjcxNi0gKi9cbm1tL3NsdWIuYzo2NzE3OnZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTY3MTgte1xuLS1cbm1tL3NsdWIuYz02NzQwPUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuLS1cbm1tL3NsdWIuYy02NzUwLSAqL1xubW0vc2x1Yi5jOjY3NTE6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTY3NTIte1xuLS1cbm1tL3NsdWIuYz02OTgzPUVYUE9SVF9TWU1CT0woX19rdm1hbGxvY19ub2RlX25vcHJvZik7XG4tLVxubW0vc2x1Yi5jLTY5OTQtICovXG5tbS9zbHViLmM6Njk5NTp2b2lkIGt2ZnJlZShjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTY5OTYte1xuLS1cbm1tL3NsdWIuYz03MDAyPUVYUE9SVF9TWU1CT0woa3ZmcmVlKTtcbi0tXG5tbS9zbHViLmMtNzAxMC0gKi9cbm1tL3NsdWIuYzo3MDExOnZvaWQga3ZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTcwMTIte1xuLS1cbm1tL3NsdWIuYz03MDE4PUVYUE9SVF9TWU1CT0woa3ZmcmVlX2F0b21pYyk7XG4tLVxubW0vc2x1Yi5jLTcwMjgtICovXG5tbS9zbHViLmM6NzAyOTp2b2lkIGt2ZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcbm1tL3NsdWIuYy03MDMwLXtcbi0tXG5tbS9zbHViLmM9NzA4Nz1zdGF0aWMgaW5saW5lXG5tbS9zbHViLmM6NzA4ODppbnQgYnVpbGRfZGV0YWNoZWRfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTcwODktXHRcdFx0ICAgIHZvaWQgKipwLCBzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgKmRmKVxuLS1cbm1tL3NsdWIuYz03MTUyPXN0YXRpYyB2b2lkIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzE3Mi0vKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXG5tbS9zbHViLmM6NzE3Mzp2b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG5tbS9zbHViLmMtNzE3NC17XG4tLVxubW0vc2x1Yi5jPTczNzI9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDIxLSAqL1xubW0vc2x1Yi5jOjc0MjI6Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbm1tL3NsdWIuYy03NDIzLVx0XHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jPTc3Mzg9c3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03NzYwLVxubW0vc2x1Yi5jOjc3NjE6dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy03NzYyLXtcbi0tXG5tbS9zbHViLmM9ODA0OT1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXG4tLVxubW0vc2x1Yi5jLTgwNjktXG5tbS9zbHViLmM6ODA3MDpib29sIF9fa21lbV9jYWNoZV9lbXB0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04MDcxLXtcbi0tXG5tbS9zbHViLmMtODA4My0gKi9cbm1tL3NsdWIuYzo4MDg0OmludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtODA4NS17XG4tLVxubW0vc2x1Yi5jLTgxMTEtI2lmZGVmIENPTkZJR19QUklOVEtcbm1tL3NsdWIuYzo4MTEyOnZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtODExMy17XG4tLVxubW0vc2x1Yi5jPTgyMzY9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFx1MDAyNnBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hLCBOVUxMLCAwKTtcbi0tXG5tbS9zbHViLmMtODI0OC0gKi9cbm1tL3NsdWIuYzo4MjQ5OnZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbm1tL3NsdWIuYy04MjUwLVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCB0b191c2VyKVxuLS1cbm1tL3NsdWIuYz04MzAxPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODM2OS1cbm1tL3NsdWIuYzo4MzcwOmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTgzNzEte1xuLS1cbm1tL3NsdWIuYz04NjQ2PXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXG4tLVxubW0vc2x1Yi5jLTg2NTUtXG5tbS9zbHViLmM6ODY1NjppbnQgZG9fa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbHViLmMtODY1Ny1cdFx0XHQgdW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsXG4tLVxubW0vc2x1Yi5jPTk2ODk9c3RhdGljIGludCBzeXNmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtOTczMi1cbm1tL3NsdWIuYzo5NzMzOnZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtOTczNC17XG4tLVxubW0vc2x1Yi5jLTk3MzgtXG5tbS9zbHViLmM6OTczOTp2b2lkIHN5c2ZzX3NsYWJfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy05NzQwLXtcbi0tXG5tbS9zbHViLmM9OTc1ND1zdGF0aWMgc3RydWN0IHNhdmVkX2FsaWFzICphbGlhc19saXN0O1xubW0vc2x1Yi5jLTk3NTUtXG5tbS9zbHViLmM6OTc1NjppbnQgc3lzZnNfc2xhYl9hbGlhcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSlcbm1tL3NsdWIuYy05NzU3LXtcbi0tXG5tbS9zbHViLmM9OTk5Nz1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy0xMDAxMi1cbm1tL3NsdWIuYzoxMDAxMzp2b2lkIGRlYnVnZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTEwMDE0LXtcbi0tXG5tbS9zbHViLmM9MTAwMzE9X19pbml0Y2FsbChzbGFiX2RlYnVnZnNfaW5pdCk7XG4tLVxubW0vc2x1Yi5jLTEwMDM2LSNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jOjEwMDM3OnZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxubW0vc2x1Yi5jLTEwMDM4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYyMgoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBTbHViIE1lbW9yeSBNYW5hZ2VtZW50IExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNsdWIuY2AgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgbWVtb3J5IGFjY291bnRpbmcgZnVuY3Rpb25zIGludGVyYWN0LiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgd2FzIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGFuZCBgbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGFyZSBhbGwgaG91c2VkIG5lYXRseSB3aXRoaW4gYG1tL3NsdWIuY2AuIEJ1dCBob2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBvZmYgYWJvdXQgdGhhdCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgbG9jYXRpb24uLi4gSXQgKmlzKiBpbiBgbW0vc2x1Yi5jYCwgaXNuJiMzOTt0IGl0PyBPaCByaWdodCwgSSYjMzk7bSBmb3JnZXR0aW5nIGFib3V0IHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQuIFllcywgaXQmIzM5O3MgbW9kaWZpZWQgd2l0aGluIGBtbS9zbHViLmNgLCB0aGF0IG1ha2VzIHNlbnNlLgoKTm93IEkmIzM5O20gcXVlc3Rpb25pbmcgd2hldGhlciBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYG1tL3NsYWJfY29tbW9uLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGNydWNpYWwgZGVwZW5kZW5jaWVzIGx1cmtpbmcgdGhlcmUgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gaGF2ZSBhIHdpZGVyIHZpZXcgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8c3RydWN0IFthLXpfXSYjNDM7IFxcKj8pIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jPTEyOD1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9hbGlnbm1lbnQoc2xhYl9mbGFnc190IGZsYWdzLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTU0LSAqL1xubW0vc2xhYl9jb21tb24uYzoxNTU6aW50IHNsYWJfdW5tZXJnZWFibGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbGFiX2NvbW1vbi5jLTE1Ni17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xNzYtXG5tbS9zbGFiX2NvbW1vbi5jOjE3Nzpib29sIHNsYWJfYXJnc191bm1lcmdlYWJsZShzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG5tbS9zbGFiX2NvbW1vbi5jLTE3OC17XG4tLVxubW0vc2xhYl9jb21tb24uYz01MTg9c3RhdGljIHZvaWQga21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNTI2LVxubW0vc2xhYl9jb21tb24uYzo1Mjc6dm9pZCBzbGFiX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtNTI4LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTUzMy1cbm1tL3NsYWJfY29tbW9uLmM6NTM0OnZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYl9jb21tb24uYy01MzUte1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9NTk4PUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9kZXN0cm95KTtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTYwOC0gKi9cbm1tL3NsYWJfY29tbW9uLmM6NjA5OmludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKVxubW0vc2xhYl9jb21tb24uYy02MTAte1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9NjE1PUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9zaHJpbmspO1xubW0vc2xhYl9jb21tb24uYy02MTYtXG5tbS9zbGFiX2NvbW1vbi5jOjYxNzpib29sIHNsYWJfaXNfYXZhaWxhYmxlKHZvaWQpXG5tbS9zbGFiX2NvbW1vbi5jLTYxOC17XG4tLVxubW0vc2xhYl9jb21tb24uYz02MjM9c3RhdGljIHZvaWQga21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNjQ0LSAqL1xubW0vc2xhYl9jb21tb24uYzo2NDU6Ym9vbCBrbWVtX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbm1tL3NsYWJfY29tbW9uLmMtNjQ2LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEwNzM9c3RhdGljIHZvaWQgZnJlZWxpc3RfcmFuZG9taXplKHVuc2lnbmVkIGludCAqbGlzdCxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEwODktLyogQ3JlYXRlIGEgcmFuZG9tIHNlcXVlbmNlIHBlciBjYWNoZSAqL1xubW0vc2xhYl9jb21tb24uYzoxMDkwOmludCBjYWNoZV9yYW5kb21fc2VxX2NyZWF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB1bnNpZ25lZCBpbnQgY291bnQsXG5tbS9zbGFiX2NvbW1vbi5jLTEwOTEtXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTEwNS0vKiBEZXN0cm95IHRoZSBwZXItY2FjaGUgcmFuZG9tIGZyZWVsaXN0IHNlcXVlbmNlICovXG5tbS9zbGFiX2NvbW1vbi5jOjExMDY6dm9pZCBjYWNoZV9yYW5kb21fc2VxX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcbm1tL3NsYWJfY29tbW9uLmMtMTEwNy17XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMTYzPXN0YXRpYyBpbnQgc2xhYl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTExNzItXG5tbS9zbGFiX2NvbW1vbi5jOjExNzM6dm9pZCBkdW1wX3VucmVjbGFpbWFibGVfc2xhYih2b2lkKVxubW0vc2xhYl9jb21tb24uYy0xMTc0LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyNDU9bW9kdWxlX2luaXQoc2xhYl9wcm9jX2luaXQpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTI1OS0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MTI2MDp2b2lkIGtmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICpwKVxubW0vc2xhYl9jb21tb24uYy0xMjYxLXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzAwLVxubW0vc2xhYl9jb21tb24uYzoxMzAxOnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxubW0vc2xhYl9jb21tb24uYy0xMzAyLXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTE5NTA9dm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xOTczLSAqL1xubW0vc2xhYl9jb21tb24uYzoxOTc0OnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxubW0vc2xhYl9jb21tb24uYy0xOTc1LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIwNTA9c3RhdGljIGlubGluZSB2b2lkIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMTI4LSAqL1xubW0vc2xhYl9jb21tb24uYzoyMTI5OnZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG5tbS9zbGFiX2NvbW1vbi5jLTIxMzAte1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjEzND1FWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjE0Mi0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MjE0Mzp2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE0NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMzMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyBzaWduaWZpY2FudC4gVGhlIG1lbW9yeSBjb250cm9sIHN1YnN5c3RlbSBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgYW55IGNoYW5nZXMgdGhlcmUgd2FycmFudCBhICp2ZXJ5KiBjbG9zZSBsb29rLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbiBpcyBzb3VuZCwgYW5kIEkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nICp3aHkqIHRoaXMgZmlsZSB3YXMgY2hvc2VuIGZvciBtb2RpZmljYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2VzIGFyZSBsb2dpY2FsbHkgcmVsYXRlZCB0byB0aGUgcHJpbWFyeSBpbnRlbnQgb2YgdGhlIHBhdGNoIG9yIGlmIHRoZXkgcmVwcmVzZW50IGEgcG90ZW50aWFsbHkgcmlza3kgc2lkZSBlZmZlY3Qgb3IgdW5yZWxhdGVkIHJlZmFjdG9yaW5nLiBBIGRlZXAgZGl2ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sfHN0cnVjdCBbYS16X10mIzQzOyBcXCo/KSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MTMxPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XG5tbS9tZW1jb250cm9sLmMtMTMyLVxubW0vbWVtY29udHJvbC5jOjEzMzpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxubW0vbWVtY29udHJvbC5jLTEzNC17XG4tLVxubW0vbWVtY29udHJvbC5jPTUyOT1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzEtXG5tbS9tZW1jb250cm9sLmM6NTMyOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy01MzMtXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmM9NzA0PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpXG4tLVxubW0vbWVtY29udHJvbC5jLTcyOC0gKi9cbm1tL21lbWNvbnRyb2wuYzo3Mjk6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy03MzAte1xuLS1cbm1tL21lbWNvbnRyb2wuYy03MzktXG5tbS9tZW1jb250cm9sLmM6NzQwOnZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzQxLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NzU3PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTc3Mi1cbm1tL21lbWNvbnRyb2wuYzo3NzM6Ym9vbCBtZW1jZ19zdGF0X2l0ZW1fdmFsaWQoaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy03NzQte1xuLS1cbm1tL21lbWNvbnRyb2wuYz04NDU9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzAtICovXG5tbS9tZW1jb250cm9sLmM6ODcxOnZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxubW0vbWVtY29udHJvbC5jLTg3Mi1cdFx0ICAgICAgIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTg4Nj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy05MDEtXG5tbS9tZW1jb250cm9sLmM6OTAyOnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTkwMy1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jPTkzNz1zdGF0aWMgdm9pZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTY0LSAqL1xubW0vbWVtY29udHJvbC5jOjk2NTp2b2lkIG1vZF9scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcbm1tL21lbWNvbnRyb2wuYy05NjYtXHRcdFx0aW50IHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtOTc1LVxubW0vbWVtY29udHJvbC5jOjk3Njp2b2lkIGxydXZlY19zdGF0X21vZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcbm1tL21lbWNvbnRyb2wuYy05NzctXHRcdFx0ICAgICBpbnQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYz05OTY9RVhQT1JUX1NZTUJPTChscnV2ZWNfc3RhdF9tb2RfZm9saW8pO1xubW0vbWVtY29udHJvbC5jLTk5Ny1cbm1tL21lbWNvbnRyb2wuYzo5OTg6dm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXG5tbS9tZW1jb250cm9sLmMtOTk5LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTAyNy0gKi9cbm1tL21lbWNvbnRyb2wuYzoxMDI4OnZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCxcbm1tL21lbWNvbnRyb2wuYy0xMDI5LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBjb3VudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTA0OT11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA1OC1cbm1tL21lbWNvbnRyb2wuYzoxMDU5OmJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxubW0vbWVtY29udHJvbC5jLTEwNjAte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMjEzPXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTEzMDQtICovXG5tbS9tZW1jb250cm9sLmM6MTMwNTp2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbm1tL21lbWNvbnRyb2wuYy0xMzA2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICpwcmV2KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMzI4PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKmRlYWRfbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTEzNjEtICovXG5tbS9tZW1jb250cm9sLmM6MTM2Mjp2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtMTM2My1cdFx0XHQgICBpbnQgKCpmbikoc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKiksIHZvaWQgKmFyZylcbi0tXG5tbS9tZW1jb250cm9sLmM9MTQ1Nj1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE0ODItICovXG5tbS9tZW1jb250cm9sLmM6MTQ4Mzp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTQ4NC1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTE3NTE9c3RhdGljIHZvaWQgbWVtb3J5X3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3NjktICovXG5tbS9tZW1jb250cm9sLmM6MTc3MDp2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5tbS9tZW1jb250cm9sLmMtMTc3MS17XG4tLVxubW0vbWVtY29udHJvbC5jLTE3OTAtICovXG5tbS9tZW1jb250cm9sLmM6MTc5MTp2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTE3OTIte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xODM1PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg1My1cbm1tL21lbWNvbnRyb2wuYzoxODU0OnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTE4NTUtXHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcbi0tXG5tbS9tZW1jb250cm9sLmM9MTk0Nz1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTkzLVxubW0vbWVtY29udHJvbC5jOjE5OTQ6dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMTk5NS17XG4tLVxubW0vbWVtY29udHJvbC5jPTIyNTk9c3RhdGljIHZvaWQgc2NoZWR1bGVfZHJhaW5fd29yayhpbnQgY3B1LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtY29udHJvbC5jLTIyNzUtICovXG5tbS9tZW1jb250cm9sLmM6MjI3Njp2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcbm1tL21lbWNvbnRyb2wuYy0yMjc3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjQ2OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI1MDQtICovXG5tbS9tZW1jb250cm9sLmM6MjUwNTp2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxubW0vbWVtY29udHJvbC5jLTI1MDYte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTIyPXN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMxMzQtICovXG5tbS9tZW1jb250cm9sLmM6MzEzNTppbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0zMTM2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1Ni0gKi9cbm1tL21lbWNvbnRyb2wuYzozMTU3OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0zMTU4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzQ3Mj1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTM0ODUtXG5tbS9tZW1jb250cm9sLmM6MzQ4NjppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxubW0vbWVtY29udHJvbC5jLTM0ODcte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTIzLVxubW0vbWVtY29udHJvbC5jOjM1MjQ6dm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpXG5tbS9tZW1jb250cm9sLmMtMzUyNS17XG4tLVxubW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNjM0LVxubW0vbWVtY29udHJvbC5jOjM2MzU6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL21lbWNvbnRyb2wuYy0zNjM2LVx0XHRcdCAgICB2b2lkICoqcCwgaW50IG9iamVjdHMsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXG4tLVxubW0vbWVtY29udHJvbC5jLTM2NjUtICovXG5tbS9tZW1jb250cm9sLmM6MzY2Njp2b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG9yZGVyKVxubW0vbWVtY29udHJvbC5jLTM2Njcte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0zNjc5LVxubW0vbWVtY29udHJvbC5jOjM2ODA6dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbm1tL21lbWNvbnRyb2wuYy0zNjgxLVx0XHR1bnNpZ25lZCBuZXdfb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM3Mzg9c3RydWN0IHdiX2RvbWFpbiAqbWVtX2Nncm91cF93Yl9kb21haW4oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNzY1LSAqL1xubW0vbWVtY29udHJvbC5jOjM3NjY6dm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgbG9uZyAqcGZpbGVwYWdlcyxcbm1tL21lbWNvbnRyb2wuYy0zNzY3LVx0XHRcdCB1bnNpZ25lZCBsb25nICpwaGVhZHJvb20sIHVuc2lnbmVkIGxvbmcgKnBkaXJ0eSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzgzNC0gKi9cbm1tL21lbWNvbnRyb2wuYzozODM1OnZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9tZW1jb250cm9sLmMtMzgzNi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vbWVtY29udHJvbC5jLTM4ODctLyogaXNzdWUgZm9yZWlnbiB3cml0ZWJhY2sgZmx1c2hlcyBmb3IgcmVjb3JkZWQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzozODg4OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yilcbm1tL21lbWNvbnRyb2wuYy0zODg5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDkwMT1zdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MDgtXG5tbS9tZW1jb250cm9sLmM6NDkwOTppbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5tbS9tZW1jb250cm9sLmMtNDkxMC17XG4tLVxubW0vbWVtY29udHJvbC5jPTUwODA9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTA1LSAqL1xubW0vbWVtY29udHJvbC5jOjUxMDY6dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxubW0vbWVtY29udHJvbC5jLTUxMDctXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmM9NTEyMT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNDAtXG5tbS9tZW1jb250cm9sLmM6NTE0MTppbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxubW0vbWVtY29udHJvbC5jLTUxNDIte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTY0LSAqL1xubW0vbWVtY29udHJvbC5jOjUxNjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxubW0vbWVtY29udHJvbC5jLTUxNjYte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTk4LSAqL1xubW0vbWVtY29udHJvbC5jOjUxOTk6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbm1tL21lbWNvbnRyb2wuYy01MjAwLVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1NT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1Zylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTMwMC1cbm1tL21lbWNvbnRyb2wuYzo1MzAxOnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTMwMi17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzMTMtXG5tbS9tZW1jb250cm9sLmM6NTMxNDp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXG5tbS9tZW1jb250cm9sLmMtNTMxNS17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzMzUtICovXG5tbS9tZW1jb250cm9sLmM6NTMzNjp2b2lkIG1lbV9jZ3JvdXBfcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG5tbS9tZW1jb250cm9sLmMtNTMzNy17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzODQtICovXG5tbS9tZW1jb250cm9sLmM6NTM4NTp2b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG5tbS9tZW1jb250cm9sLmMtNTM4Ni17XG4tLVxubW0vbWVtY29udHJvbC5jPTU0MTc9RVhQT1JUX1NZTUJPTChtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcbm1tL21lbWNvbnRyb2wuYy01NDE4LVxubW0vbWVtY29udHJvbC5jOjU0MTk6dm9pZCBtZW1fY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaylcbm1tL21lbWNvbnRyb2wuYy01NDIwLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQ0MS1cbm1tL21lbWNvbnRyb2wuYzo1NDQyOnZvaWQgbWVtX2Nncm91cF9za19mcmVlKHN0cnVjdCBzb2NrICpzaylcbm1tL21lbWNvbnRyb2wuYy01NDQzLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQ0OS1cbm1tL21lbWNvbnRyb2wuYzo1NDUwOnZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubW0vbWVtY29udHJvbC5jLTU0NTEte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NDc0LSAqL1xubW0vbWVtY29udHJvbC5jOjU0NzU6Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbm1tL21lbWNvbnRyb2wuYy01NDc2LVx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OTUtICovXG5tbS9tZW1jb250cm9sLmM6NTQ5Njp2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTQ5Ny17XG4tLVxubW0vbWVtY29udHJvbC5jLTU1MDktXG5tbS9tZW1jb250cm9sLmM6NTUxMDp2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNTUxMS17XG4tLVxubW0vbWVtY29udHJvbC5jPTU1NDE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU4NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NTg2OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTU4Ny17XG4tLVxubW0vbWVtY29udHJvbC5jLTU2MzUtICovXG5tbS9tZW1jb250cm9sLmM6NTYzNjp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTYzNy17XG4tLVxubW0vbWVtY29udHJvbC5jPTU2NTU9bG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY2Ny1cbm1tL21lbWNvbnRyb2wuYzo1NjY4OmJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy01NjY5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc5Mz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4NDAtICovXG5tbS9tZW1jb250cm9sLmM6NTg0MTpib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbm1tL21lbWNvbnRyb2wuYy01ODQyLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg4MS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1ODgyOnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy01ODgzLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTkxMy0gKi9cbm1tL21lbWNvbnRyb2wuYzo1OTE0OnZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxubW0vbWVtY29udHJvbC5jLTU5MTUte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01OTM0LVxubW0vbWVtY29udHJvbC5jOjU5MzU6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy01OTM2LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjA0MD1zdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MDQzLVxubW0vbWVtY29udHJvbC5jOjYwNDQ6dm9pZCBtZW1fY2dyb3VwX25vZGVfZmlsdGVyX2FsbG93ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBub2RlbWFza190ICptYXNrKVxubW0vbWVtY29udHJvbC5jLTYwNDUte1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MDYwLVxubW0vbWVtY29udHJvbC5jOjYwNjE6dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNjA2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNZW1vcnkgQ29udHJvbCBNb2R1bGUgRGVlcCBEaXZlKioKCkhtbSwgbGV0IG1lIHRoaW5rLi4uIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIHdhcyBzaXR1YXRlZCBpbiBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSBrZXJuZWwsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHNsYWIgYWxsb2NhdG9yIGl0c2VsZi4gQnV0IHdhaXQgYSBtaW51dGUuLi4gdGhhdCBkb2VzbiYjMzk7dCBxdWl0ZSBzaXQgcmlnaHQuIExldCYjMzk7cyByZXZpc2l0IHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlIGFnYWluLiBJIHNob3VsZCBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZnVuY3Rpb25zLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgcHJlY2lzZSBsb2NhdGlvbiBvZiBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IHJlZ2FyZGluZyBhbGwgb2YgdGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkwNi1cdGlmIChzbGFiKVxubW0vbWVtY29udHJvbC5jOjI5MDc6XHRcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XG5tbS9tZW1jb250cm9sLmMtMjkwOC1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjayh2aXJ0X3RvX2ZvbGlvKHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU2xhYiBDYWNoZSBIb29rIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG1hcmtlZCBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYW5kIGV4cGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHdpdGhpbiB0aGUgbW9kdWxlLiBCdXQgdGhlbiBteSBtaW5kIGp1bXBzIHRvIHRoZSBob29rcywgYW5kIEkgc2VlIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaGVyZSwgSeKAmW0gdGhpbmtpbmcsIHdoeSBhcmVu4oCZdCB0aGUgc2xhYiBjYWNoZSBhbGxvY2F0aW9uIGFuZCBmcmVlIGhvb2sgZnVuY3Rpb25zIHN0YXRpYz8gIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIHBhdXNlLiBBbmQgdGhlbiB0aGVyZeKAmXMgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBhbHNvIG5vdCBzdGF0aWMuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIGdsb2JhbCBpbnRlbnQgd2l0aCB0aGVpciBzY29wZSB0aGFuIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiBzdWdnZXN0cyBmb3IgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAuIFRoaXMgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGEgKnByb2JsZW0qLCBidXQgaXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24gZm9yIGhvdyB0aGVzZSBob29rIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIHNsYWIgYWxsb2NhdG9yIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVsbCBjb250ZXh0IGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBhcmUgcmVhbGx5IGludGVuZGVkIHRvIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jPTI2Nz1fX2ttZW1fY2FjaGVfYWxpYXMoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTI5MS0vKipcbm1tL3NsYWJfY29tbW9uLmM6MjkyOiAqIF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyAtIENyZWF0ZSBhIGttZW0gY2FjaGUuXG5tbS9zbGFiX2NvbW1vbi5jLTI5My0gKiBAbmFtZTogQSBzdHJpbmcgd2hpY2ggaXMgdXNlZCBpbiAvcHJvYy9zbGFiaW5mbyB0byBpZGVudGlmeSB0aGlzIGNhY2hlLlxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMzE3LSAqL1xubW0vc2xhYl9jb21tb24uYzozMTg6c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxubW0vc2xhYl9jb21tb24uYy0zMTktXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemUsXG4tLVxubW0vc2xhYl9jb21tb24uYy00MDgtfVxubW0vc2xhYl9jb21tb24uYzo0MDk6RVhQT1JUX1NZTUJPTChfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MpO1xubW0vc2xhYl9jb21tb24uYy00MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTFVCIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHRob3VnaCBpdCBpc24mIzM5O3Qgc3RhdGljIGVpdGhlci4gVGhpcyBzZWVtcyBhIGxpdHRsZSB1bnVzdWFsLiBOb3csIGxldCBtZSB0aGluay4uLiBBaGEhIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCB3aGljaCBpcyBpbmxpbmUgd2l0aGluIGBtbS9zbHViLmNgLiBSaWdodCwgdGhhdCBleHBsYWlucyB0aGUgYWNjZXNzLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgZGVmaW5lZC4gSXMgaXQgaW4gYG1tL3NsdWIuY2Agb3IgcGVyaGFwcyBoaWRpbmcgaW4gYG1tL3NsYWJfY29tbW9uLmNgPyBPa2F5LCBJJiMzOTt2ZSBjaGVja2VkLi4uIGl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYG1tL3NsdWIuY2AuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgKmRlY2xhcmVkKiBpbiBgbW0vc2xhYi5oYC4gSG1tLCB0aGF0JiMzOTtzIGEga2V5IGRldGFpbC4gVGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhbGxvY19zbGFiX29ial9leHRzYCB3aXRoaW4gYG1tL3NsdWIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIxMjk9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjEzMy1cbm1tL3NsdWIuYzoyMTM0OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM1LVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMjIzPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjI1NC0gKi9cbm1tL3NsdWIuYzoyMjU1OnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIyNTYte1xuLS1cbm1tL3NsdWIuYz0yMzAyPXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMDUtXG5tbS9zbHViLmM6MjMwNjpzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMDctXHRcdFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMzEyPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjMxNS1cbm1tL3NsdWIuYzoyMzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMTctXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz0yMzI2PXByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjMzMi1cbm1tL3NsdWIuYzoyMzMzOlx0XHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjMzNC1cdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzc3LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNzg6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzNzktXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzQwMD1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDU1LVx0ICovXG5tbS9zbHViLmM6MzQ1NjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQ1Ny1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBhbGxvY19zbGFiX29ial9leHRzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIHNsYWIgYWxsb2NhdG9yIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgZXh0ZW5kZWQgb2JqZWN0IGZlYXR1cmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgbGlrZWx5IG5vbi1zdGF0aWMgaWYgYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGVuYWJsZWQuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24uLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBkZWZpbml0aW9uIG5vdywgYW5kIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLgoKTm93LCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBJZiBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIHVzZWQgbW9yZSBicm9hZGx5LCBidXQgdGhlIGNvZGUgc2NhbiBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzICpvbmx5KiB1c2VkIHdpdGhpbiBgbW0vc2x1Yi5jYCBpdHNlbGYsIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyBub3QgdGhlIHVzdWFsIHBhdHRlcm4uIFVzdWFsbHksIGlmIGEgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYyBpdCB3aWxsIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgZmlsZS4KCkFoYSEgYG1tL21lbWNvbnRyb2wuY2AgKmRvZXMqIGNhbGwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgISBFeGNlbGxlbnQsIHRoYXQgYW5zd2VycyBhIGJpdCBvZiB0aGUgcHV6emxlLCBidXQgbGV0JiMzOTtzIGdvIGNoZWNrIGBtbS9tZW1jb250cm9sLmNgIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG51YW5jZSBpcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTg4LVx0XHRcdFx0Y29udGludWU7XG5tbS9tZW1jb250cm9sLmM6MzU4OTpcdFx0XHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpXG5tbS9tZW1jb250cm9sLmMtMzU5MC1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgSG9va3MqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgYXMgYSBrZXkgZnVuY3Rpb24sIHNlZWluZyBhcyBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGZ1bmN0aW9ucyBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQuIFdhaXQgYSBzZWNvbmQsIHRob3VnaDsgSSByZWNhbGwgbm93IHRoYXQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIHdoaWNoIGlzIGFjdHVhbGx5IGlubGluZWQgZnJvbSBgbW0vc2x1Yi5jYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0IG9uZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcnJlY3QgZGVmaW5pdGlvbi4gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AgZGlyZWN0bHkgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzUyOT1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZnVsbF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxubW0vbWVtY29udHJvbC5jOjM1Mzg6Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbm1tL21lbWNvbnRyb2wuYy0zNTM5LVx0XHRcdFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkhvb2sgSW52ZXN0aWdhdGlvbioqCgpSaWdodCwgc28gYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIHRoYXQmIzM5O3MgdXNlZnVsLCB0aGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIGludGVydmVudGlvbiwgbGlrZWx5IGZyb20gZXh0ZXJuYWwgbW9kdWxlcyBvciBwZXJoYXBzIGV2ZW4gaW4gYSBzeXN0ZW0td2lkZSBvciBjb3JlIHdheS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdHJhY2luZyBjYWxscyB0aHJvdWdoIHRoZSBhbGxvY2F0aW9uL2ZyZWUgcGF0aC4gV2hhdCBhYm91dCB0aGUgY291bnRlcnBhcnQ/IEkgbmVlZCB0byBjaGVjayBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AuIElzIGl0IHN0YXRpYyBhcyB3ZWxsPyBJcyB0aGVyZSBhbnkgc2ltaWxhciBiZWhhdmlvciB3aXRoIHRoZSBmcmVlIGhvb2s/IEJlY2F1c2UgdGhlIHBvc3QtYWxsb2NhdGlvbiBvbmUgaXMgbm9uIHN0YXRpYyBpdCB3aWxsIGhhdmUgc2VyaW91cyBpbXBsaWNhdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzg9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cbm1tL21lbWNvbnRyb2wuYzozNjM1OnZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9tZW1jb250cm9sLmMtMzYzNi1cdFx0XHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDExMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgSW50ZXJhY3Rpb24gd2l0aCBTTFVCIEFsbG9jYXRvcioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBpbnRlcmFjdCB3aXRoIHRoZSBTTFVCIGFsbG9jYXRvci4gTGV0IG1lIHNlZSwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tg4oCmIFl1cCwgdGhhdOKAmXMgY29uZmlybWVkLCBpdCYjMzk7cyBkZWZpbml0ZWx5ICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gR29vZCwgdGhhdCBoZWxwcyBjbGFyaWZ5IGEgc3BlY2lmaWMgcG9pbnQuIE5vdywgd2hhdCBhYm91dCB0aGUgb3RoZXIgc2lkZSBvZiB0aGlzPyBMZXQgbWUgY2hlY2vigKYgYWgsIHllcywgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLiBUaGF0IGxvb2tzIGludGVyZXN0aW5nLCBhbmQgaXQgbGl2ZXMgb3ZlciBpbiBgbW0vc2x1Yi5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGF0IGZpbGUgYW5kIHVuZGVyc3RhbmQgaG93IGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFNMVUIgY29kZS4gR290dGEgZGl2ZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfc2xhYl9wb3N0X2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjUyMj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTIzOmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbm1tL3NsdWIuYy0yNTI0LXtcbi0tXG5tbS9zbHViLmM9MjU5MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yNTk0LVxubW0vc2x1Yi5jOjI1OTU6c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjU5Ni17XG4tLVxubW0vc2x1Yi5jPTUwMDQ9Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcbi0tXG5tbS9zbHViLmMtNTAwOC1cbm1tL3NsdWIuYzo1MDA5Olx0cmV0dXJuIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uob2JqcCwgZ2ZwZmxhZ3MpO1xubW0vc2x1Yi5jLTUwMTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFNsYWIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZWAgd2l0aGluIGBtbS9zbHViLmNgLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3Mgb3B0aW1pemVkIGZvciBzcGVlZCBhbmQgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IHdpdGhpbiB0aGF0IGZpbGUuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgYGttZW1fY2FjaGVfY2hhcmdlYC4gVGhhdCYjMzk7cyBub3Qgc3RhdGljOyBpdCYjMzk7cyBleHBvcnRlZCwgbWVhbmluZyBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBjYWxsIGl0LiAgUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrbWVtX2NhY2hlX2NoYXJnZWAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBsaWVzLCBhbmQgd2hhdCYjMzk7cyBkcml2aW5nIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUwMDI9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2YpO1xubW0vc2x1Yi5jLTUwMDMtXG5tbS9zbHViLmM6NTAwNDpib29sIGttZW1fY2FjaGVfY2hhcmdlKHZvaWQgKm9ianAsIGdmcF90IGdmcGZsYWdzKVxubW0vc2x1Yi5jLTUwMDUte1xuLS1cbm1tL3NsdWIuYy01MDEwLX1cbm1tL3NsdWIuYzo1MDExOkVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9jaGFyZ2UpO1xubW0vc2x1Yi5jLTUwMTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBTbGFiIEFsbG9jYXRvciBJbnRlcm5hbHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc2xhYiBhbGxvY2F0b3Igc3R1ZmYuIGBrbWVtX2NhY2hlX2NoYXJnZWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGFsbG9jYXRpb24gY29zdHMsIHJpZ2h0PyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgcHJvY2Vzcy4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIG91dCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4gSXQgbG9va3MgbGlrZSB0aGF0IG9uZSYjMzk7cyB0aGUgaGVhcnQgb2YgaG93IHRoZXNlIGNhY2hlcyBhcmUgYWN0dWFsbHkgbWFkZSwgSSBzZWUgdGhhdCBpdCYjMzk7cyBpbiBgbW0vc2xhYl9jb21tb24uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBhcmUgd29ya2luZywgYW5kIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cbm1tL3NsYWJfY29tbW9uLmMtMjkzLSAqIEBuYW1lOiBBIHN0cmluZyB3aGljaCBpcyB1c2VkIGluIC9wcm9jL3NsYWJpbmZvIHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUuXG4tLVxubW0vc2xhYl9jb21tb24uYy0zMTctICovXG5tbS9zbGFiX2NvbW1vbi5jOjMxODpzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZSxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XG5tbS9zbGFiX2NvbW1vbi5jOjQwOTpFWFBPUlRfU1lNQk9MKF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyk7XG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1NDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKUmlnaHQsIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gY2VudGVyIG9uLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBjYWNoZSBjcmVhdGlvbiwgbWFraW5nIGl0IGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gQnV0IHdhaXQuLi4gd2hhdCBhYm91dCBgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2A/IFRoYXQmIzM5O3MgcmlnaHQsIGl0JiMzOTtzIGRlZmluZWQgaW5saW5lLCBzbyBpdHMgYmVoYXZpb3IgaXMgaW50aW1hdGVseSB0aWVkIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJbnRlcmVzdGluZy4uLiBub3csIGhhbmcgb24gYSBzZWNvbmQuIElzbiYjMzk7dCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLCBJIHNob3VsZCBjb25maXJtIHRoYXQgaW4gYG1tL3NsdWIuY2AgcmlnaHQgYXdheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTI0MDA9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyNDAxOl9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxubW0vc2x1Yi5jLTI0MDItXHRcdFx0ICAgICAgIGludCBvYmplY3RzKVxuLS1cbm1tL3NsdWIuYz0yNDI1PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQyOC1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyNDI5Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG5tbS9zbHViLmMtMjQzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlY2lwaGVyaW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGBzdGF0aWMgbm9pbmxpbmUgdm9pZGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgY3JpdGljYWwgdGhpbmdzLiBJdCYjMzk7cyBgc3RhdGljYCwgbWVhbmluZyBpdHMgc2NvcGUgaXMgcmVzdHJpY3RlZCB0byB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQg4oCTIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhpcyBtb2R1bGUuIFRoZSBgbm9pbmxpbmVgIGF0dHJpYnV0ZSBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbnN0cnVjdGluZyBpdCAqbm90KiB0byBpbmxpbmUgdGhpcyBmdW5jdGlvbiYjMzk7cyBjb2RlIGludG8gYW55IGNhbGwgc2l0ZXMuIFRoaXMgbWlnaHQgYmUgZHVlIHRvIHNpemUgY29uc3RyYWludHMsIGRlYnVnZ2luZyBjb25zaWRlcmF0aW9ucywgb3IgcGVyaGFwcyBiZWNhdXNlIHdlIHdhbnQgcHJlY2lzZSBjb250cm9sIG92ZXIgd2hlcmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGNvZGUgcmVzaWRlcyBpbiBtZW1vcnkuCgpOb3csIHRoYXQgbmFtZS4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLi4uIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gY2xlYXJseSBzdWdnZXN0cyBhIGhvb2sgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHNsYWIgYWxsb2NhdG9yLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgYXQgdGhlIGJlZ2lubmluZyBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYW4gaW50ZXJuYWwgb3IgcHJpdmF0ZSBmdW5jdGlvbi4gVGhlIHByZXNlbmNlIG9mICYjMzQ7dGFnZ2luZyYjMzQ7IGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGhpbnRzIGF0IG1ldGFkYXRhIG9yIGluc3RydW1lbnRhdGlvbi4gVGhlICYjMzQ7YWxsb2MgaG9vayYjMzQ7IHBpZWNlIGlzIHRoZSBtb3N0IG9idmlvdXMgcGFydC4gSXQgc291bmRzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzbGFiIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGhvb2sgZG9lcywgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGFsbG9jYXRpb24gYmVoYXZlcyBhdCBhIGxvd2VyIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMzQ1PXN0YXRpYyBub2lubGluZSB2b2lkXG5tbS9zbHViLmM6MjM0NjpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxubW0vc2x1Yi5jLTIzNDctXHRcdFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzOTI9YWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTIzOTUtXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG5tbS9zbHViLmM6MjM5NjpcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzLCBvYmplY3QsIGZsYWdzLCBhbGxvY19mbGFncyk7XG5tbS9zbHViLmMtMjM5Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJldmlzaXRpbmcgU2xhYiBBbGxvY2F0b3IgSW50ZXJuYWxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbiBhZ2Fpbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuIENvbnNpZGVyaW5nIGl0cyByb2xlIGluIG9iamVjdCBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBleHRlbmRlZCBtZXRhZGF0YSBpcyBpbnZvbHZlZCwgYSBjbG9zZXIgaW5zcGVjdGlvbiBpcyB3YXJyYW50ZWQuIEFuZCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdG8gdGFrZSBub3RlIG9mIHdoeSB0aGUgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYHN0YXRpYyBub2lubGluZSB2b2lkYC4gSXMgaXQgZm9yIGlubGluaW5nLCBvciBpcyBpdCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2libGUgb25seSB3aXRoaW4gYSBzcGVjaWZpYyB0cmFuc2xhdGlvbiB1bml0LCBvciBpcyB0aGUgaW50ZW50aW9uIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gbWFraW5nIGEgY2FsbCBhY3Jvc3MgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgYmVoYXZpb3IgYXJlIHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEyOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTMzLVxubW0vc2x1Yi5jOjIxMzQ6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxMzUtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMjM9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU0LSAqL1xubW0vc2x1Yi5jOjIyNTU6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI1Ni17XG4tLVxubW0vc2x1Yi5jPTIzMDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMwNS1cbm1tL3NsdWIuYzoyMzA2OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMwNy1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzE1LVxubW0vc2x1Yi5jOjIzMTY6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMxNy1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzMjY9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzMyLVxubW0vc2x1Yi5jOjIzMzM6XHRcdGlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzM0LVx0XHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi0tXG5tbS9zbHViLmM9MzM3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXG4tLVxubW0vc2x1Yi5jLTMzNzctXHRcdFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXG5tbS9zbHViLmM6MzM3ODpcdFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXG5tbS9zbHViLmMtMzM3OS1cdFx0XHRcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xuLS1cbm1tL3NsdWIuYz0zNDAwPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0NTUtXHQgKi9cbm1tL3NsdWIuYzozNDU2Olx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcbm1tL3NsdWIuYy0zNDU3LVx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTbGFiIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbiBGdW5jdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJZiBgQ09ORklHX1NMQUJfT0JKX0VYVGAgaXMgYWN0aXZlLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgcmVndWxhciBgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBub3QgYSBzdGF0aWMgb25lLCByaWdodD8gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIGxpbmUgMjEzNCBpcyB0aGUgbm9uLXN0YXRpYyBkZWZpbml0aW9uLCBhbmQgbGluZSAyMzA2IGlzIHRoZSBzdGF0aWMgZHVtbXkgdmVyc2lvbiB1c2VkIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRpc2FibGVkLiBTbywgdGhhdCBtZWFucyB0aGUgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGZ1bmN0aW9uICppc24mIzM5O3QqIHN0YXRpYyB3aGVuIHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgbWVhbmluZyBpdCYjMzk7cyB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtZWFucyBpdCBpc24mIzM5O3Qgc3RyaWN0bHkgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzLCBidXQgaXQgKmlzKiBub24tc3RhdGljIGFuZCB0aHVzIHZpc2libGUsIG1ha2luZyBpdHMgdXNlIGEgYml0Li4uaW50ZXJlc3RpbmcuIEhtbSwgbGV0IG1lIGp1c3QgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBhY3R1YWxseSBnZXRzIGV4cG9ydGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDM0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nKioKClJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzbiYjMzk7dCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBhIGdvb2QgaW5pdGlhbCBzaWduIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSG93ZXZlciwgaXQmIzM5O3MgKm5vbi1zdGF0aWMqIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwb3RlbnRpYWxseSBldmVuIGZyb20gYSBkaWZmZXJlbnQgbW9kdWxlLCBzbyBmdXp6aW5nIGl0IGlzIGRlZmluaXRlbHkgb24gdGhlIHRhYmxlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYC4gVGhlc2Ugc291bmQgbGlrZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB3aGF0ZXZlciYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGV5IHByb2JhYmx5IGFyZSBob29rcyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIChtZW1jZ3MpIGFuZCBzbGFiIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLiBXZSBjYW4gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBhbmQgc2VlIGhvdyB0aGV5IGFyZSBjYWxsZWQgYW5kIHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uIGNhbiBiZSByZWFjaGVkIGFuZCBob3cgd2UgbWlnaHQgbWFuaXB1bGF0ZSBpdHMgaW5wdXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKl9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5vbi1FeHBvcnRlZCwgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyAqYWxzbyogbm90IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgYSBmdW5jdGlvbiBwb3RlbnRpYWxseSB1c2VkIGludGVybmFsbHkgd2l0aGluIGEgbW9kdWxlLCBvciBwZXJoYXBzIGluZGlyZWN0bHkgdmlhIGEgZnVuY3Rpb24gcG9pbnRlciBvciBvdGhlciBsZXNzIG9idmlvdXMgbWVjaGFuaXNtLiBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIG1lYW50IGZvciBkaXJlY3QgZXh0ZXJuYWwgY29uc3VtcHRpb24sIGJ1dCBpdCAqaXMqIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBvciBwZXJoYXBzLCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdC4KClRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdpbGwgYmUgd2l0aGluIHRoZSBjb2RlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9rZmVuY2UvY29yZS5jYC4gTGV0IG1lIHNlZSB3aGF0IGBfX2tmZW5jZV9mcmVlYCBkb2VzLCBhbmQgd2hhdCBpdCBtaWdodCB0ZWxsIHVzIGFib3V0IGhvdyB0aGlzIG5vbi1zdGF0aWMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBwYXR0ZXJucyBvciBkZXNpZ24gY2hvaWNlcyByZWZsZWN0ZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2tmZW5jZV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2ZlbmNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jPTEyMjc9dm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTIzNy1cbm1tL2tmZW5jZS9jb3JlLmM6MTIzODp2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcbm1tL2tmZW5jZS9jb3JlLmMtMTIzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU2xhYiBPYmplY3QgRXh0ZW5zaW9uIGFuZCBLRkVOQ0UgSW50ZWdyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uY2VybiB3YXMgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBfX2tmZW5jZV9mcmVlYCwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBOb3csIEkgd2FudCB0byBtYXAgb3V0IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEuIGBrbWVtX2NhY2hlX2NoYXJnZWAgaXMgYWxzbyBleHBvcnRlZCwgc28gaXQmIzM5O3MgcmVsZXZhbnQsIGFuZCBJJiMzOTttIHNlZWluZyBvdGhlciBpbXBvcnRhbnQgc3ltYm9scyByZWxhdGVkIHRvIG1lbWNnIGFuZCBzbGFiIG9iamVjdCBleHRlbnNpb25zLgoKTGV0JiMzOTtzIHNlZTogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AgYW5kIGBrbWVtX2NhY2hlX2NoYXJnZWAuIEFuZCBvZiBjb3Vyc2UgYF9fa2ZlbmNlX2ZyZWVgLiBXYWl0LCB0aGVyZSYjMzk7cyBhIG1pbm9yIGNoYW5nZSBpbiBgX19rZmVuY2VfZnJlZWAgd2l0aCB0aGF0IGBLRkVOQ0VfV0FSTl9PTmAgcmVtb3ZhbCwgYnV0IHRoZSAqc2lnbmlmaWNhbnQqIG1vZGlmaWNhdGlvbnMgYXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGBhbGxvY19zbGFiX29ial9leHRzYCBhbmQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLgoKTm93IEkgbmVlZCB0byBlbGltaW5hdGUgc29tZSBpcnJlbGV2YW50IHBpZWNlcyBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBvbmVzLiBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyBgc3RhdGljIGlubGluZWAsIHNvIG5vdCBkaXJlY3RseSByZWxldmFudC4gQWxzbyBgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXRgIGlzIGBzdGF0aWMgX19pbml0YCBhbmQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGlzIGBzdGF0aWMgdm9pZGAsIHNvIEkgd29uJiMzOTt0IG5lZWQgdG8gZm9jdXMgb24gdGhlbSBhcyBtdWNoLgoKU28sIHRha2luZyBhbGwgdGhhdCBpbnRvIGNvbnNpZGVyYXRpb24sIHRoZSBtb3N0IGNyaXRpY2FsIHN5bWJvbHMgdG8gemVybyBpbiBvbiBhcmU6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgYW5kIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLgoKRmluYWxseSwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01FTUNHYCwgb2J2aW91c2x5LCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLCBgQ09ORklHX1NMQUJfT0JKX0VYVGAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGFib3ZlLCBhbmQsIGltcG9ydGFudGx5LCBgQ09ORklHX0tGRU5DRWAgc2luY2Ugd2UmIzM5O3ZlIHNlZW4gaXQgbW9kaWZpZWQuIE5vdyB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsYWIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9MTAwPXN0cnVjdCBzbGFiIHtcbi0tXG5tbS9zbGFiLmgtMTE0LVx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xubW0vc2xhYi5oOjExNTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2xhYi5oLTExNi1cdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4tLVxubW0vc2xhYi5oPTEyNj1TTEFCX01BVENIKG1lbWNnX2RhdGEsIG9ial9leHRzKTtcbm1tL3NsYWIuaDoxMjc6I2VsaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKVxubW0vc2xhYi5oLTEyOC1TTEFCX01BVENIKF91bnVzZWRfc2xhYl9vYmpfZXh0cywgb2JqX2V4dHMpO1xuLS1cbm1tL3NsYWIuaD02Mjc9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2xhYi5oLTYzOS1cbm1tL3NsYWIuaDo2NDA6I2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcbm1tL3NsYWIuaC02NDEtXG4tLVxubW0vc2xhYi5oPTc3NT1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2xhYi5oLTc3Ny1cbm1tL3NsYWIuaDo3Nzg6I2Vsc2UgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xubW0vc2xhYi5oLTc3OS1cbi0tXG5tbS9zbGFiLmg9NzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2xhYi5oLTc5Ni1cbm1tL3NsYWIuaDo3OTc6I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbm1tL3NsYWIuaC03OTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gYENPTkZJR19TTEFCX09CSl9FWFRgKioKCk9rYXksIHNvIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgZGVmaW5pdGVseSBhbiBpbnRlcm5hbCBjb25maWcgb3B0aW9uOyBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG5vdCBzb21ldGhpbmcgeW91JiMzOTtkIG1hbnVhbGx5IGVuYWJsZS4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgbGlrZWx5IHNlbGVjdGVkIGJhc2VkIG9uIG90aGVyLCBicm9hZGVyIGZlYXR1cmVzLiBQZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBNRU1DR2AgKG1lbW9yeSBjb250cm9sIGdyb3Vwcykgb3IgbWF5YmUgZXZlbiBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gdG8gd2hlcmUgdGhpcyB0aGluZyBpcyBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogaXQmIzM5O3MgZGVmaW5lZC4gVGltZSB0byBnbyBodW50aW5nIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgbW9zdCBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCB3b3VsZCBiZSBgaW5pdC9LY29uZmlnYCBhbmQsIG1vcmUgbGlrZWx5LCBgbW0vS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEkmIzM5O2xsIGNoZWNrIHRob3NlIGZpbGVzLCBhbmQgaG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgYFNMQUJfT0JKX0VYVGAgaXMgYWxsIGFib3V0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIG9uZSwganVzdCBhIG1hdHRlciBvZiB0cmFjaW5nIHRoZSBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTEFCX09CSl9FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMzM9Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuLS1cbmluaXQvS2NvbmZpZy0xMDQwLVxuaW5pdC9LY29uZmlnOjEwNDE6Y29uZmlnIFNMQUJfT0JKX0VYVFxuaW5pdC9LY29uZmlnLTEwNDItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDk2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5jb3ZlcmluZyB0aGUgQm9vbGVhbiBMYWJ5cmludGgqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBoaWRkZW4gYm9vbGVhbiBmbGFnIGx1cmtpbmcgc29tZXdoZXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYE1FTUNHYCwgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBhbmQgYEtGRU5DRWAuIFRob3NlIHRocmVlIG9mdGVuIGRhbmNlIHRvZ2V0aGVyIGluIHRoaXMgc3BhY2UuIE5vdywgbGV0JiMzOTtzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBCZWZvcmUgd2UgZGl2ZSBkZWVwZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBEb2VzIGl0IHJlbHkgb24gb3RoZXIgY29uZmlndXJhdGlvbnM/IERvZXMgaXQgaGF2ZSBhbnkgaW1wbGljYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0/IEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY29uc2lkZXJpbmcgdGhlIHdob2xlIHBpY3R1cmUgYmVmb3JlIGNoYXNpbmcgYSBzcGVjaWZpYyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xMDQ3PWNvbmZpZyBDT0RFX1RBR0dJTkdcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxubGliL0tjb25maWcuZGVidWc6MTA1MTpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xubGliL0tjb25maWcuZGVidWctMTA1Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDY1OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTA2OS1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbmxpYi9LY29uZmlnLmRlYnVnLTEwNzEtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBwcm9qZWN0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUg4oCTIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdXN1YWxseSB3aGVyZSB0aGVzZSBzZXR0aW5ncyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgbGliL0tjb25maWcuZGVidWdgLiBJIHNlZW0gdG8gcmVtZW1iZXIgdGhlcmUgd2FzIGEgY29uZmlndXJhdGlvbiBJIHdhcyBpbnRlcmVzdGVkIGluIGFyb3VuZCBsaW5lIDEwNTEsIHNvIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRoZXJlLiBMZXQgbWUgc2VlIHdoYXQgdGhhdCByZXZlYWxzIGFib3V0IHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvci4uLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdG8gZXhwZWN0LCBidXQgbmVlZCB0aGUgaGFyZCBkYXRhIHRvIG1ha2UgYSB1c2VmdWwgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0NTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4xMDQ2Olx0XG4xMDQ3Olx0Y29uZmlnIENPREVfVEFHR0lOR1xuMTA0ODpcdFx0Ym9vbFxuMTA0OTpcdFx0c2VsZWN0IEtBTExTWU1TXG4xMDUwOlx0XG4xMDUxOlx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbjEwNTI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuMTA1MzpcdFx0ZGVmYXVsdCBuXG4xMDU0Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTA1NTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4xMDU2Olx0XHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcbjEwNTc6XHRcdHNlbGVjdCBDT0RFX1RBR0dJTkdcbjEwNTg6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuMTA1OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA2MDpcdFx0aGVscFxuMTA2MTpcdFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXG4xMDYyOlx0XHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcbjEwNjM6XHRcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXG4xMDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDAwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWNpcGhlcmluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIHNlZSB0aGF0IGl0IHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiBhbiBgTU1VYCwgdGhlIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCB0aGUgbmVnYXRpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAuIFRoZXNlIGFyZSBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzOyBwcm9maWxpbmcgb2Z0ZW4gbmVlZHMgYSBtYXR1cmUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBhbmQgYWNjZXNzIHRvIHRoZSBwcm9jZXNzIGZpbGVzeXN0ZW0gZm9yIGludHJvc3BlY3Rpb24uIFRoZSBleGNsdXNpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAgc3VnZ2VzdHMgdGhhdCBhIGRpZmZlcmVudCwgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QsIGRlYnVnIG1lY2hhbmlzbSBpcyBhdCBwbGF5IHdoZW4gd2UmIzM5O3JlIHByb2ZpbGluZy4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBTTEFCX09CSl9FWFRgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIGBTTEFCX09CSl9FWFRgIGlzIGxpa2VseSBzZWxlY3RlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgbWV0YWRhdGEgb3IgZXh0ZW5kZWQgb2JqZWN0IHN1cHBvcnQgbmVlZGVkIGZvciB0aGUgcHJvZmlsaW5nLiBJdCBwcm92aWRlcyBleHRlbmRlZCBkYXRhIHRvIGVhY2ggc2xhYiBvYmplY3QuIEkgd291bGQgbmVlZCB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4KCk15IG5leHQgdGhvdWdodCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBkcmlsbCBkb3duLCBpcyBhYm91dCBgTUVNQ0dgLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBtZW1vcnkgY2dyb3VwcyAoTUVNQ0cpIHBsYXkgYSByb2xlIGhlcmUuIE1lbW9yeSBjZ3JvdXBzIG9mZmVyIG1vcmUgZ3JhbnVsYXIgcmVzb3VyY2UgdHJhY2tpbmcsIHdoaWNoIG1pZ2h0IGJlIGNyaXRpY2FsIGZvciBhIG1vcmUgYWNjdXJhdGUgYW5kIHVzZWZ1bCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlLiBEb2VzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCB3b3JrIHdlbGwgd2l0aCBtZW1vcnkgY2dyb3Vwcywgb3IgYXJlIHRoZXJlIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBldmVuIGJldHRlciwgZG9lcyBpdCBsZXZlcmFnZSB0aGVtIGluIHNvbWUgd2F5PyBUaGlzIGlzIGFuIGltcG9ydGFudCBxdWVzdGlvbiB0byBhZGRyZXNzLCBhcyBpbnRlZ3JhdGluZyB3aXRoIE1FTUNHIHdvdWxkIG1ha2UgdGhlIHByb2ZpbGluZyBtdWNoIG1vcmUgdmFsdWFibGUgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHdvdWxkIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzItXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDgxLVxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDgzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg4LVxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5NS1cbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTEwOTctXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBhIGNvcmUgb3B0aW9uLCBpcyB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwgc291cmNlLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gdGhlcmUuIFNwZWNpZmljYWxseSwgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpcyBhcm91bmQgbGluZSAxMDczLiBJdCYjMzk7cyBhIGJyb2FkIHN0YXJ0aW5nIHBvaW50LCBidXQgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyBhcmUgb2Z0ZW4gZ3JvdXBlZCB0b2dldGhlciBzb21ld2hhdCBsb2dpY2FsbHksIGFuZCB0aGF0IGxpbmUgbnVtYmVyIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBwbGFjZSB0byBiZWdpbi4gVGltZSB0byBwdWxsIHVwIHRoZSBmaWxlIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIHN5bnRheCwgYW5kIHRoZW4gZXh0cmFwb2xhdGUgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCBkZWZpbmVzIGFuZCBob3cgaXQgbWF5IGJlIGFmZmVjdGluZyB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW91ciBpbiB0aGUgc3BlY2lmaWMgYXJlYSBJJiMzOTttIGludGVyZXN0ZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0XG4xMDcxOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzI6XHRcbjEwNzM6XHRjb25maWcgTUVNQ0dcbjEwNzQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwNzU6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwNzY6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDc3Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDc4Olx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwNzk6XHRcdGhlbHBcbjEwODA6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA4MTpcdFxuMTA4MjpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDgzOlx0XHRib29sXG4xMDg0Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDg1Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDg2Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA4NzpcdFx0ZGVmYXVsdCB5XG4xMDg4Olx0XG4xMDg5Olx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTk5CgkJCQkJCQlvdXRwdXQ6IDIxNAoJCQkJCQkJdGhvdWdodHM6IDgwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGBTTEFCX09CSl9FWFRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBpdCYjMzk7cyBnb2luZyB0byByZXF1aXJlIHRoYXQgd2UgZW5hYmxlIGBNRU1DR2AsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCwgYW5kIGBLRkVOQ0VgLiBUaGlzIGlzIGNydWNpYWwgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCBhbmQgZGVmaW5pdGVseSB0b3VjaGVzIGNvcmUgc2xhYiBiZWhhdmlvci4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGhlcmUuIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLCBhbmQgYGttZW1fY2FjaGVfY2hhcmdlYC4gSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgY2hhbmdlIHRvIGBfX2tmZW5jZV9mcmVlYCBzZWVtcyBtaW5vcuKAlGp1c3QgcmVtb3ZpbmcgYSBgS0ZFTkNFX1dBUk5fT05gLCBzbyBJIHdpbGwgZGlzY291bnQgdGhhdCBzeW1ib2wuCgpJbml0aWFsbHksIEkgY29uc2lkZXJlZCBhZGRpbmcgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQmIzM5O3MgaW5saW5lLCBzbyBpdCYjMzk7cyBub3QgYSByZWxldmFudCBzeW1ib2wgdG8gZm9jdXMgb24uIEJ1dCBJIHN0aWxsIG5lZWQgdG8gbWFrZSBzdXJlIEkgZm9jdXMgb24gYGttZW1fY2FjaGVfY2hhcmdlYC4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSBteSBmb2N1cyBzeW1ib2xzLiBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgaW4gYG1tL3NsYWJfY29tbW9uLmNgLCBsb29rcyByaWdodC4gT2theSwgbW92aW5nIG9uLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgbG9va3MgY29ycmVjdC4gYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIHNlZW1zIHJpZ2h0LiBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgbG9va3MgZ29vZC4gQW5kLCB5ZXMsIGBrbWVtX2NhY2hlX2NoYXJnZWAgc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgaW5jbHVkZWQuCgpCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgaXQgaW1wYWN0cyAoIGBNRU1DR2AsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCwgYEtGRU5DRWApLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBpcyBjaGFuZ2luZyBob3cgYHNsYWJvYmpfZXh0YCBzdHJ1Y3R1cmVzIGFyZSBtYW5hZ2VkIGFuZCBhY2Nlc3NlZC4gSXQgbG9va3MgbGlrZSBgU0xBQl9NQVlfQUNDT1VOVGAgaXMgaW50cm9kdWNlZCBhbmQgdGhlIGBzbGFib2JqX2V4dGAgbGF5b3V0IGlzIGNoYW5nZWQgdG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgb3IgYSB1bmlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLiBHaXZlbiB0aGVzZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCBJIG5lZWQgdG8gZm9jdXMgb24gZnV6emluZyB0aGVzZSBjaGFuZ2VzIHRvIGxvb2sgZm9yIGFueSBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzLgoKSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2NoYXJnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgY2hhbmdlcyBob3cgYHNsYWJvYmpfZXh0YCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFjY2Vzc2VkLCBhbmQgbWFuYWdlZCwgcGFydGljdWxhcmx5IHdoZW4gYm90aCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhcmUgZW5hYmxlZC4gSXQgaW50cm9kdWNlcyBgU0xBQl9NQVlfQUNDT1VOVGAgYW5kIGNoYW5nZXMgdGhlIGxheW91dCBvZiBgc2xhYm9ial9leHRgLiBUaGVzZSBhcmUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uLCBsZWFrcywgb3IgYWNjb3VudGluZyBlcnJvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfY2hhcmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIGhvdyBgc2xhYm9ial9leHRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgd2hlbiBib3RoIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFyZSBlbmFibGVkLiBJdCBpbnRyb2R1Y2VzIGBTTEFCX01BWV9BQ0NPVU5UYCBhbmQgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGBzbGFib2JqX2V4dGAuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhY2NvdW50aW5nIGVycm9ycyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjEzOjE3LjQyMTkyNzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNzU2MzkzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxMzoxNy40MjE5MzU3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5MTkzOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDhmODQwMzJkMWJkOTA4ZTQ2MTQ5Y2NhY2RiOTAxM2VlMzM2OTkyMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMjoxMzoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmQwMmViNTRlZThmMmM2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG5AQCAtMTEyLDMgKzExMiwxMCBAQCBUbyBkbyBzbzpcXG4gXFxuIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczpcXG4gICBhbGxvY19ob29rc190YWcoaHQtXFx1MDAzZXlvdXJfc2F2ZWRfdGFnLCBrbWFsbG9jX25vcHJvZiguLi4pKVxcbitcXG4rTm90ZXNcXG4rPT09PT1cXG4rXFxuKy0gV2hlbiBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIEtGRU5DRSwgaXRzIGFjY291bnRpbmcgaXMgc2tpcHBlZC5cXG4rICBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIsIHNvIHRoaXMgb21pc3Npb25cXG4rICBpcyBuZWdsaWdpYmxlLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTQ0MCwxOSArMTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4tLypcXG4tICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYW4gYXJyYXkgaW4gcGFnZS1cXHUwMDNlbWVtY2dfZGF0YVxcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0Llxcbi0gKi9cXG4tc3RydWN0IHNsYWJvYmpfZXh0IHtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuLSNlbmRpZlxcbi0jaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4tXFx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xcbi0jZW5kaWZcXG4tfSBfX2FsaWduZWQoOCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbmluZGV4IDMyYzlmOGVkN2FlMjA1Li5lMTkxNTAyNmUwMzA0MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuQEAgLTQ1LDYgKzQ1LDcgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRfU0xBQl9BQ0NPVU5ULFxcbitcXHRfU0xBQl9NQVlfQUNDT1VOVCxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbiBcXHRfU0xBQl9LQVNBTixcXG5AQCAtMjA0LDggKzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XFxuICAqL1xcbiAjaWZkZWYgQ09ORklHX01FTUNHXFxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFxcdFxcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9BQ0NPVU5UKVxcbisjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UXFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX01BWV9BQ0NPVU5UKVxcbiAjZWxzZVxcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcXHRcXHRfX1NMQUJfRkxBR19VTlVTRURcXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFxcdF9fU0xBQl9GTEFHX1VOVVNFRFxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuY1xcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li45MDkyNWM2NDZjNGMyNCAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXFxuKysrIGIvbW0va2ZlbmNlL2NvcmUuY1xcbkBAIC02MzYsMTEgKzYzNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG4gXFxuIFxcdFxcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gKyBpKTtcXG4gXFx0XFx0X19TZXRQYWdlU2xhYihwYWdlKTtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4tXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZylcXHUwMDI2a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8XFxuLVxcdFxcdFxcdFxcdCBNRU1DR19EQVRBX09CSkVYVFM7XFxuLSNlbmRpZlxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC03MDQsMTAgKzY5OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICsgaSk7XFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG4tXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XFxuLVxcdFxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4tI2VuZGlmXFxuIFxcdFxcdF9fQ2xlYXJQYWdlU2xhYihwYWdlKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI0OCw5ICsxMjM5LDYgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxuIHtcXG4gXFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuLVxcdEtGRU5DRV9XQVJOX09OKG1ldGEtXFx1MDAzZW9ial9leHRzLm9iamNnKTtcXG4tI2VuZGlmXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcXG4gXFx0ICogdGhlIG9iamVjdCwgYXMgdGhlIG9iamVjdCBwYWdlIG1heSBiZSByZWN5Y2xlZCBmb3Igb3RoZXItdHlwZWRcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXFxuaW5kZXggMWY2MThmOWIwZDEyZDkuLmU2YjRiZjM0OWZmNzMwIDEwMDY0NFxcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxcbisrKyBiL21tL2tmZW5jZS9rZmVuY2UuaFxcbkBAIC0xMDIsOSArMTAyLDYgQEAgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XFxuIFxcdHN0cnVjdCBrZmVuY2VfdHJhY2sgZnJlZV90cmFjayBfX2d1YXJkZWRfYnkoXFx1MDAyNmxvY2spO1xcbiBcXHQvKiBGb3IgdXBkYXRpbmcgYWxsb2NfY292ZXJlZCBvbiBmcmVlcy4gKi9cXG4gXFx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFxcdTAwMjZsb2NrKTtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRzdHJ1Y3Qgc2xhYm9ial9leHQgb2JqX2V4dHM7XFxuLSNlbmRpZlxcbiB9O1xcbiBcXG4gI2RlZmluZSBLRkVOQ0VfTUVUQURBVEFfU0laRSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhKSAqIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xcbmluZGV4IGRlMmQwZjdkNjJiMTVlLi45ODY3YzAzZWYwYWUzZCAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xcbisrKyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXFxuQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCAqdGVzdF9hbGxvYyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGVudW0gYWxsb2NhdFxcbiBcXHRcXHRcXHQgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpfdG9faW5kZXgocywgc2xhYiwgYWxsb2MpLCAwVSk7XFxuLVxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTtcXG4rXFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsICgodW5zaWduZWQgaW50KXNsYWItXFx1MDAzZW9iamVjdHMpLCAxKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChwb2xpY3kgPT0gQUxMT0NBVEVfQU5ZKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gYWxsb2M7XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi42YjUxZGRmNmRmZTAyMiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjg2NSwxOCArMjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKVxcbiBcXHQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcXG4gXFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xcbi1cXHR1bnNpZ25lZCBpbnQgb2ZmO1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcbiBcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuIFxcdGlmICghb2JqX2V4dHMpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi1cXHRvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgcCk7XFxuLVxcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XFxuLVxcdGlmIChvYmpfZXh0LVxcdTAwM2VvYmpjZykge1xcbi1cXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBvYmpfZXh0LVxcdTAwM2VvYmpjZztcXG4rXFx0aWYgKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4rXFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBvYmpfZXh0cywgcCk7XFxuK1xcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xcbitcXHRpZiAob2JqY2cpIHtcXG4gXFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXHRcXHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuIFxcdH1cXG5AQCAtMzU0MSw3ICszNTQyLDYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gXFx0c2l6ZV90IG9ial9zaXplID0gb2JqX2Z1bGxfc2l6ZShzKTtcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmY7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4gXFx0LypcXG5AQCAtMzU4MywxMSArMzU4MywxNiBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiBcXG4gXFx0XFx0c2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcXG4gXFxuLVxcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpIHtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSkge1xcbitcXHRcXHRcXHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFxcdTAwMjZcXHUwMDI2IFdBUk5fT05fT05DRSghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogaWYgd2UgZmFpbCBhbmQgc2l6ZSBpcyAxLCBtZW1jZ19hbGxvY19hYm9ydF9zaW5nbGUoKSB3aWxsXFxuIFxcdFxcdCAqIGp1c3QgZnJlZSB0aGUgb2JqZWN0LCB3aGljaCBpcyBvayBhcyB3ZSBoYXZlIG5vdCBhc3NpZ25lZFxcbkBAIC0zNjE2LDEwICszNjIxLDExIEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIFxcbiBcXHRcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcXG4rXFxuIFxcdFxcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcXG4tXFx0XFx0b2JqX2V4dC1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4rXFx0XFx0c2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBvYmpjZyk7XFxuK1xcbiBcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdH1cXG4gXFxuQEAgLTM2MzUsMTUgKzM2NDEsMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gXFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XFxuIFxcdFxcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcXG4tXFx0XFx0dW5zaWduZWQgaW50IG9mZjtcXG4gXFxuLVxcdFxcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcXG4tXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcXG4tXFx0XFx0b2JqY2cgPSBvYmpfZXh0LVxcdTAwM2VvYmpjZztcXG4rXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XFxuK1xcdFxcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xcbiBcXHRcXHRpZiAoIW9iamNnKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdG9ial9leHQtXFx1MDAzZW9iamNnID0gTlVMTDtcXG4rXFx0XFx0c2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBOVUxMKTtcXG4gXFxuIFxcdFxcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xcbiBcXHRcXHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XFxuZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaFxcbmluZGV4IGY1ZTMzNmI2YjZiMDRjLi4wNDYwMGY1N2I0MDE0NiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiLmhcXG4rKysgYi9tbS9zbGFiLmhcXG5AQCAtODEsMTAgKzgxLDExIEBAIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyB7XFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4gXFx0XFx0XFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0XFx0XFx0ICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJ2NvdW50ZXJzJyBmaWVsZFxcbi1cXHRcXHRcXHRcXHRcXHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXFx1MDAzZXN0cmlkZSBmaWVsZCBpcyBub3QgYXZhaWxhYmxlLFxcbi1cXHRcXHRcXHRcXHRcXHQgKiBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxcbitcXHRcXHRcXHRcXHRcXHQgKiB0byBzYXZlIG1lbW9yeSBvciBDUFUuIElmIHRoZXNlIGZyZWUgYml0cyBhcmUgbm90XFxuK1xcdFxcdFxcdFxcdFxcdCAqIGF2YWlsYWJsZSwgc3VjaCBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC5cXG4gXFx0XFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBzdHJpZGU7XFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIG9ial9leHRzX2luX29iamVjdDoxO1xcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBvYmpfZXh0c19uZWVkc19vYmpjZzoxO1xcbiAjZW5kaWZcXG4gXFx0XFx0XFx0XFx0fTtcXG4gXFx0XFx0XFx0fTtcXG5AQCAtMzMwLDEyICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxcbiBcXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgb2Jqc19wZXJfc2xhYihjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXFxuLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxcbi17XFxuLVxcdHJldHVybiBzbGFiLVxcdTAwM2VvYmplY3RzO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXFxuICAqXFxuQEAgLTU1NSw2ICs1NTAsOTMgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbisvKlxcbisgKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW5cXG4rICogc2xhYi1cXHUwMDNlb2JqX2V4dHMgKGFsaWFzaW5nIHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGEpIGlmIE1FTUNHX0RBVEFfT0JKRVhUUyBpcyBzZXQuXFxuKyAqL1xcbitzdHJ1Y3Qgc2xhYm9ial9leHQge1xcbitcXHQvKlxcbitcXHQgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHVuaW9uIHNob3VsZCBiZSBwb2ludGVyLXNpemVkIHRvIGF2b2lkIG1lbW9yeVxcbitcXHQgKiB3YXN0ZVxcbitcXHQgKi9cXG4rXFx0dW5pb24ge1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK1xcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgX2N0cmVmO1xcbisjZW5kaWZcXG4rXFx0fTtcXG4rfSBfX2FsaWduZWQoOCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4rREVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbitcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0cmV0dXJuIChjYWNoZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTTEFCX01BWV9BQ0NPVU5UKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbitcXHRyZXR1cm4gc2xhYi1cXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XFxuKyNlbHNlXFxuK1xcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVxcdTAwM2VzbGFiX2NhY2hlKTtcXG4rI2VuZGlmXFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX25lZWRzX29iamNnKHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4re1xcbitcXHRzaXplX3Qgc3ogPSAwO1xcbitcXG4rXFx0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHNpemVfdCBzeiA9IDA7XFxuK1xcbitcXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcXG4rXFx0XFx0c3ogKz0gMTtcXG4rXFxuK1xcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcXG4rXFx0XFx0c3ogKz0gMTtcXG4rXFxuK1xcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxcbiBcXG4gLypcXG5AQCAtNTcyLDcgKzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXFxuICAqIG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG4gICogaWYgKG9ial9leHRzKSB7XFxuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi0gKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial90b19pbmRleChzLCBzbGFiLCBvYmopKTtcXG4rICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmopO1xcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcXG4gICogICAgICAgICBwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuICAqIH1cXG5AQCAtNjEwLDQ4ICs2OTIsODYgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zbGFiX29ial9leHRzKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRzbGFiLVxcdTAwM2VzdHJpZGUgPSBzdHJpZGU7XFxuLX1cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxcbi17XFxuLVxcdHJldHVybiBzbGFiLVxcdTAwM2VzdHJpZGU7XFxuK1xcdC8qXFxuK1xcdCAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvXFxuK1xcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxcbitcXHQgKiBhbGxvY2F0aW9ucyB3aXRoaW5fc2xhYl9sZWZ0b3ZlciBhcmUgcHJlZmVycmVkLiBBbmQgdGhvc2UgbWF5IGJlXFxuK1xcdCAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYidzIHNpemUuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gc2xhYi1cXHUwMDNlb2JqX2V4dHNfaW5fb2JqZWN0O1xcbiB9XFxuICNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXFxuLXtcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKHN0cmlkZSAhPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XFxuLX1cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbiB7XFxuLVxcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4gLypcXG4gICogc2xhYl9vYmpfZXh0IC0gZ2V0IHRoZSBwb2ludGVyIHRvIHRoZSBzbGFiIG9iamVjdCBleHRlbnNpb24gbWV0YWRhdGFcXG4gICogYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCBpbiBhIHNsYWIuXFxuKyAqIEBzOiBjYWNoZSB0aGF0IHRoZSBzbGFiIGJlbG9uZ3MgdG9cXG4gICogQHNsYWI6IGEgcG9pbnRlciB0byB0aGUgc2xhYiBzdHJ1Y3RcXG4gICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXFxuLSAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxcbisgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdFxcbiAgKlxcbiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcXG4rc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4rXFx0ICAgICBjb25zdCB2b2lkICpvYmopXFxuIHtcXG4gXFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xcbitcXHR1bnNpZ25lZCBpbnQgaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGludCBzdHJpZGU7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XFxuIFxcbi1cXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArXFxuLVxcdFxcdFxcdFxcdFxcdCBzbGFiX2dldF9zdHJpZGUoc2xhYikgKiBpbmRleCk7XFxuK1xcdC8qXFxuK1xcdCAqIEtGRU5DRSBvYmplY3RzIGhhdmUgTlVMTCBvYmpfZXh0cyBhbmQgdGh1cyBjYW4ndCByZWFjaCB0aGlzXFxuK1xcdCAqIGFuZCB3ZSBkb24ndCBuZWVkIG9ial90b19pbmRleCgpXFxuK1xcdCAqL1xcbitcXHRpbmRleCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcXG4rXFxuK1xcdGlmICghb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxcbitcXHRcXHRzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzdHJpZGUgPSBzLVxcdTAwM2VzaXplO1xcbitcXG4rXFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgKyBpbmRleCAqIHN0cmlkZSk7XFxuK1xcbiBcXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKG9ial9leHQpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKnNsYWJfb2JqX2V4dF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXFxuK3tcXG4rXFx0LyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xcbitcXHRyZXR1cm4gb2JqX2V4dC1cXHUwMDNlX29iamNnO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbit7XFxuK1xcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi9cXG4rXFx0b2JqX2V4dC1cXHUwMDNlX29iamNnID0gb2JqY2c7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4rc3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXFxuK3NsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxcbit7XFxuK1xcdGlmIChzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRvYmpfZXh0ICs9IDE7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNm9ial9leHQtXFx1MDAzZV9jdHJlZjtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcbiBcXG5AQCAtNjYyLDE2ICs3ODIsMTcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKlxcbitzbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbitcXHQgICAgIGNvbnN0IHZvaWQgKm9iailcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9XFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxcbi1cXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xcbmluZGV4IDAzZWNhYzEyY2Q4NjVmLi4xZTFkM2ZlZWMzNTM1YiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXFxuKysrIGIvbW0vc2xhYl9jb21tb24uY1xcbkBAIC01Miw3ICs1Miw3IEBAIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2NhY2hlO1xcbiBcXHRcXHRTTEFCX09CSl9FWFRfSU5fT0JKKVxcbiBcXG4gI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcXFxcXFxuLVxcdFxcdFxcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UKVxcbitcXHRcXHRcXHQgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCB8IFNMQUJfTUFZX0FDQ09VTlQpXFxuIFxcbiAvKlxcbiAgKiBNZXJnZSBjb250cm9sLiBJZiB0aGlzIGlzIHNldCB0aGVuIG5vIG1lcmdpbmcgb2Ygc2xhYiBjYWNoZXMgd2lsbCBvY2N1ci5cXG5AQCAtMzU5LDYgKzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRm9yIG5vdyB3ZSBhc3N1bWUgYW55IGNhY2hlIGNhbiBiZSB1c2VkIHdpdGggX19HRlBfQUNDT1VOVCBhbmQgdGh1c1xcbitcXHQgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0c1xcbitcXHQgKi9cXG4rXFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDtcXG4rXFxuIFxcdC8qIEZhaWwgY2xvc2VkIG9uIGJhZCB1c2Vyc2l6ZSBvZiB1c2Vyb2Zmc2V0IHZhbHVlcy4gKi9cXG4gXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgfHxcXG4gXFx0ICAgIFdBUk5fT04oIWFyZ3MtXFx1MDAzZXVzZXJzaXplIFxcdTAwMjZcXHUwMDI2IGFyZ3MtXFx1MDAzZXVzZXJvZmZzZXQpIHx8XFxuQEAgLTk4NCwxMSArOTkxLDIwIEBAIG5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXFxuICNlbmRpZlxcbiBcXG4gXFx0LypcXG4tXFx0ICogSWYgQ09ORklHX01FTUNHIGlzIGVuYWJsZWQsIGRpc2FibGUgY2FjaGUgbWVyZ2luZyBmb3JcXG4tXFx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxcbitcXHQgKiBJZiBtZW1jZ19rbWVtIGlzIGVuYWJsZWQgYW5kIHRoaXMgaXMgYSBLTUFMTE9DX05PUk1BTCBjYWNoZSBhbmQgbm90XFxuK1xcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXFxuK1xcdCAqIGNhY2hlLlxcbitcXHQgKlxcbitcXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcXG4rXFx0ICogX19HRlBfQUNDT1VOVCBhbGxvY2F0aW9uIHNvIG1hcmsgaXQgYXMgc3VjaC4gVGhlIGV4Y2VwdGlvbiBpcyBhXFxuK1xcdCAqIEtNQUxMT0NfTk9fT0JKX0VYVCBjYWNoZS5cXG4gXFx0ICovXFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKVxcbi1cXHRcXHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XFxuK1xcdFxcdGlmICh0eXBlID09IEtNQUxMT0NfTk9STUFMIFxcdTAwMjZcXHUwMDI2IEtNQUxMT0NfUkVDTEFJTSAhPSBLTUFMTE9DX05PUk1BTClcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcXG4rXFx0XFx0ZWxzZSBpZiAoIShmbGFncyBcXHUwMDI2IFNMQUJfTk9fT0JKX0VYVCkpXFxuK1xcdFxcdFxcdGZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChtaW5hbGlnbiBcXHUwMDNlIEFSQ0hfS01BTExPQ19NSU5BTElHTikge1xcbiBcXHRcXHRhbGlnbmVkX3NpemUgPSBBTElHTihhbGlnbmVkX3NpemUsIG1pbmFsaWduKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggMDMzN2U2MGRiNWFjZTAuLjk0Yjc0NGU1YWM3OTE5IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC0yMTMsNiArMjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuIHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuKyNlbmRpZlxcbitcXG4gLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqL1xcbiBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjtcXG5AQCAtODAzLDcgKzgwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXFxuIHtcXG4tXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4rXFx0cmV0dXJuIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gI2VuZGlmXFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0b1xcbi1cXHQgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXRcXG4tXFx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxcbi1cXHQgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWIncyBzaXplLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIChzbGFiX2dldF9zdHJpZGUoc2xhYikgPT0gcy1cXHUwMDNlc2l6ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X2luZm9fZW5kKHMpO1xcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBcXHRyZXR1cm4gb2Zmc2V0O1xcbiB9XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHNsYWItXFx1MDAzZW9ial9leHRzX2luX29iamVjdCA9IDE7XFxuIH1cXG4tXFxuKyNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXFxuIFxcbiBcXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxcbi1cXHRcXHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuK1xcdFxcdG9mZiArPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcXG4gXFxuIFxcdGlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSlcXG4gXFx0XFx0LyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqL1xcbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxcbiBcXG4gXFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xcbiBcXG4tXFx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcXG4tXFx0XFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xcbitcXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxcbitcXHRcXHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XFxuIFxcbiBcXHRpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdGxlbmd0aCA9IHNsYWJfc2l6ZShzbGFiKTtcXG4gXFx0ZW5kID0gc3RhcnQgKyBsZW5ndGg7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcXHUwMDI2XFx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFxcdTAwMjZcXHUwMDI2ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHtcXG4gXFx0XFx0cmVtYWluZGVyID0gbGVuZ3RoO1xcbiBcXHRcXHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XFxuIFxcdFxcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7XFxuQEAgLTIwNzAsMjAgKzIwNjcsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxcbiBcXHRvYmpfc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopO1xcbiBcXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcXG4gXFx0aWYgKHNsYWJfZXh0cykge1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcXG4rXFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgb2JqX3NsYWIsIG9iaik7XFxuLVxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcXG4rXFx0XFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopO1xcbitcXHRcXHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7XFxuIFxcbi1cXHRcXHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShyZWYpKSkge1xcbiBcXHRcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xcbi1cXHRcXHRXQVJOX09OKGV4dC1cXHUwMDNlcmVmLmN0KTtcXG4tXFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNmV4dC1cXHUwMDNlcmVmKTtcXG4rXFx0XFx0V0FSTl9PTihyZWYtXFx1MDAzZWN0KTtcXG4rXFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkocmVmKTtcXG4gXFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTIwOTMsMTkgKzIwOTEsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdHJldHVybiBjbXB4Y2hnKFxcdTAwMjZzbGFiLVxcdTAwM2VvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuLVxcdFxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cylcXG4rc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IHN0cmlkZTtcXG4rXFxuK1xcdGlmICghc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxcbiBcXHQgKiBvYmplY3RzIHdpdGggbm8gdGFnIHJlZmVyZW5jZS4gTWFyayBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzXFxuIFxcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cXG4gXFx0ICovXFxuLVxcdGlmIChvYmpfZXh0cyA9PSBPQkpFWFRTX0FMTE9DX0ZBSUwpIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGlmIChvYmpfZXh0cyAhPSBPQkpFWFRTX0FMTE9DX0ZBSUwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpIC8gc2l6ZW9mKCp2ZWMpO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBzbGFiLVxcdTAwM2VvYmplY3RzOyBpKyspIHtcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpO1xcbiBcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKylcXG4tXFx0XFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNnZlY1tpXS5yZWYpO1xcbitcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xcbitcXHRcXHR2ZWMgKz0gc3RyaWRlO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIxMTMsOCArMjEyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iaikge31cXG4gc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tXFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYykge31cXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbiBcXG5AQCAtMjEyNywxMiArMjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdGNvbnN0IGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFsbG9jX2ZsYWdzKTtcXG4tXFx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xcbiBcXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5ld19leHRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9sZF9leHRzO1xcbiBcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcXG4tXFx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVxcdTAwM2VvYmplY3RzO1xcbitcXHRzaXplX3Qgc3ogPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuIFxcbiBcXHRnZnAgXFx1MDAyNj0gfk9CSkNHU19DTEVBUl9NQVNLO1xcbiBcXHQvKlxcbkBAIC0yMTgzLDcgKzIxOTAsNyBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuICNlbmRpZlxcbiByZXRyeTpcXG4gXFx0b2xkX2V4dHMgPSBSRUFEX09OQ0Uoc2xhYi1cXHUwMDNlb2JqX2V4dHMpO1xcbi1cXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XFxuK1xcdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzbGFiLCBvbGRfZXh0cywgdmVjKTtcXG4gXFxuIFxcdGlmIChuZXdfc2xhYikge1xcbiBcXHRcXHQvKlxcbkBAIC0yMjUwLDkgKzIyNTcsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0dm9pZCAqYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcXG4gXFxuLVxcdC8qIEluaXRpYWxpemUgc3RyaWRlIGVhcmx5IHRvIGF2b2lkIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgKi9cXG4tXFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcXG4tXFxuIFxcdGlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0yMjc4LDE1ICsyMjgyLDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXG4gXFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXHRcXHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVxcdTAwM2VvYmplY3RzKVxcbi1cXHRcXHRcXHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICsgb2Zmc2V0LCAwLFxcbi1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xcbitcXHRcXHRcXHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICsgb2Zmc2V0LCAwLCBzbGFiX29ial9leHRfc2l6ZShzbGFiKSk7XFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0XFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbiAjZW5kaWZcXG4gXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSBvYmpfZXh0cztcXG4tXFx0XFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHMtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc2xhYik7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjMyMywxMSArMjMyNiwxNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbiBcXHRcXHRcXHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxcbiB7XFxuLVxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxuLVxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgX19mdW5jX18sIHMtXFx1MDAzZW5hbWUpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpKSB7XFxuK1xcdFxcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIHMtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5AQCAtMjM2MCwxNCArMjM2NywyNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbiBcXHQgKiBjaGVjayBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIGFsbG9jX3RhZ19hZGQoKS5cXG4gXFx0ICovXFxuIFxcdGlmIChvYmpfZXh0cykge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb2JqX2lkeCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmplY3QpO1xcbitcXHRcXHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmO1xcbiBcXG4gXFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTtcXG4tXFx0XFx0YWxsb2NfdGFnX2FkZChcXHUwMDI2b2JqX2V4dC1cXHUwMDNlcmVmLCBjdXJyZW50LVxcdTAwM2VhbGxvY190YWcsIHMtXFx1MDAzZXNpemUpO1xcbitcXG4rXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqZWN0KTtcXG4rXFx0XFx0cmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIG9ial9leHQpO1xcbitcXG4rXFx0XFx0YWxsb2NfdGFnX2FkZChyZWYsIGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZywgcy1cXHUwMDNlc2l6ZSk7XFxuK1xcbiBcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVxcdTAwM2VhbGxvY190YWcpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIHRoZSBhbW91bnQgb2Ygb3V0c3RhbmRpbmdcXG4rXFx0XFx0ICogb25lcyBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIHNvIGl0J3Mgbm90IHdvcnRoIHNldHRpbmdcXG4rXFx0XFx0ICogdGFncyBhcyBpbmFjY3VyYXRlIGJlY2F1c2Ugb2YgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghaXNfa2ZlbmNlX2FkZHJlc3Mob2JqZWN0KSlcXG4rXFx0XFx0XFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZyk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjM4NCw3ICsyNDAxLDYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWRcXG4gX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuIFxcdFxcdFxcdCAgICAgICBpbnQgb2JqZWN0cylcXG4ge1xcbi1cXHRpbnQgaTtcXG4gXFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcXG4gXFxuIFxcdC8qIHNsYWItXFx1MDAzZW9ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqL1xcbkBAIC0yMzk2LDEwICsyNDEyLDExIEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKykge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcXG4gXFxuLVxcdFxcdGFsbG9jX3RhZ19zdWIoXFx1MDAyNnNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKS1cXHUwMDNlcmVmLCBzLVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcXG4rXFx0XFx0YWxsb2NfdGFnX3N1YihzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgZXh0KSwgcy1cXHUwMDNlc2l6ZSk7XFxuIFxcdH1cXG4gXFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiB9XFxuQEAgLTI0MTIsNiArMjQyOSwyNSBAQCBhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuIFxcdFxcdF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwLCBvYmplY3RzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogTWFrZSBzdXJlIHRoZSBzdGF0aWMga2V5IHVzZWQgYnkgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkgcmVmbGVjdHMgdGhlXFxuKyAqIHZhbHVlIG9mICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKClcXG4rICpcXG4rICogQW55IGxhdGVyIG1lbSBhbGxvYyBwcm9maWxpbmcgc2h1dGRvd24gd29uJ3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5XFxuKyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpXFxuK3tcXG4rXFx0Ym9vbCBuZWVkX2NvZGV0YWcgPSAhbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCgpO1xcbitcXG4rXFx0aWYgKG5lZWRfY29kZXRhZyAhPSBzdGF0aWNfa2V5X2VuYWJsZWQoXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XFxuK1xcdFxcdGlmIChuZWVkX2NvZGV0YWcpXFxuK1xcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbitcXHR9XFxuK31cXG4rXFxuICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWRcXG5AQCAtMjQyNiw2ICsyNDYyLDEwIEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4re1xcbit9XFxuK1xcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG4gXFxuIFxcbkBAIC0yNDcxLDYgKzI1MTEsOSBAQCB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuIFxcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xcbiBcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuQEAgLTI0ODQsNyArMjUyNyw2IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4gXFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmY7XFxuIFxcbiBcXHRwYWdlID0gdmlydF90b19wYWdlKHApO1xcbiBcXHRpZiAoUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkge1xcbkBAIC0yNTE3LDE2ICsyNTU5LDE1IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4gXFx0ICogb2Ygc2xhYl9vYmpfZXh0cyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGFuZCB0aHVzIHRoZSBzbGFiXFxuIFxcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoaXNfa21hbGxvY19ub3JtYWwocykpXFxuK1xcdGlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xcbiBcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuIFxcdGlmIChvYmpfZXh0cykge1xcbiBcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLVxcdFxcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcXG4tXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KG9ial9leHQtXFx1MDAzZW9iamNnKSkge1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KSkpIHtcXG4gXFx0XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbkBAIC0zMzkxLDEwICszNDMyLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuIFxcdFxcdHN0YXQocywgT1JERVJfRkFMTEJBQ0spO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBJbml0aWFsaXplcyBmcm96ZW4sIGludXNlLCBhbmQgYW55IGV4dHJhIDY0Yml0LW9ubHkgZmxhZ3MgKi9cXG4rXFx0c2xhYi1cXHUwMDNlY291bnRlcnMgPSAwO1xcbitcXG4gXFx0c2xhYi1cXHUwMDNlb2JqZWN0cyA9IG9vX29iamVjdHMob28pO1xcbi1cXHRzbGFiLVxcdTAwM2VpbnVzZSA9IDA7XFxuLVxcdHNsYWItXFx1MDAzZWZyb3plbiA9IDA7XFxuIFxcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuK1xcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcXG4rXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xcbisjZW5kaWZcXG4gXFx0c2xhYi1cXHUwMDNlc2xhYl9jYWNoZSA9IHM7XFxuIFxcbiBcXHRrYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcXG5AQCAtNjUyNiw3ICs2NTcyLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0ICovXFxuIFxcdGlmIChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXFxuIFxcdFxcdHJldHVybiBzLVxcdTAwM2VpbnVzZTtcXG4tXFx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxcbitcXHRlbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuIFxcdFxcdHJldHVybiBzLVxcdTAwM2VpbnVzZTtcXG4gXFx0LypcXG4gXFx0ICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uXFxuQEAgLTc5MjksNyArNzk3NSw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiBcXHRhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBzLVxcdTAwM2VhbGlnbik7XFxuICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbiBcXHRpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQoYWxpZ25lZF9zaXplIC0gc2l6ZSBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpXFxuK1xcdFxcdFxcdChhbGlnbmVkX3NpemUgLSBzaXplIFxcdTAwM2U9IGNhY2hlX29ial9leHRfc2l6ZShzKSkpXFxuIFxcdFxcdHMtXFx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XFxuICNlbmRpZlxcbiBcXHRzaXplID0gYWxpZ25lZF9zaXplO1xcbkBAIC04NTM5LDYgKzg1ODUsOCBAQCB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZClcXG4gXFx0XFx0Ym9vdF9rbWVtX2NhY2hlX25vZGU7XFxuIFxcdGludCBub2RlO1xcbiBcXG4rXFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQoKTtcXG4rXFxuIFxcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcXG4gXFx0XFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MTguMDUxOTAyODU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQzMTI2NDA2MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0OGY4NDAzMmQxYmQ5MDhlNDYxNDljY2FjZGI5MDEzZWUzMzY5OTIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDI6MTM6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uZDAyZWI1NGVlOGYyYzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbkBAIC0xMTIsMyArMTEyLDEwIEBAIFRvIGRvIHNvOlxuIFxuIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczpcbiAgIGFsbG9jX2hvb2tzX3RhZyhodC1cdTAwM2V5b3VyX3NhdmVkX3RhZywga21hbGxvY19ub3Byb2YoLi4uKSlcbitcbitOb3Rlc1xuKz09PT09XG4rXG4rLSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLlxuKyAgS0ZFTkNFIGFsbG9jYXRpb25zIGFyZSByYXJlIGFuZCBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyLCBzbyB0aGlzIG9taXNzaW9uXG4rICBpcyBuZWdsaWdpYmxlLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGUxZjQ2YTAwMTZmY2ZkLi45Mzg2OWNjMzVjMjViYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTE0NDAsMTkgKzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4tLypcbi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLVx1MDAzZW1lbWNnX2RhdGFcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuLSAqL1xuLXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuLVx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuLSNlbmRpZlxuLX0gX19hbGlnbmVkKDgpO1xuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmhcbmluZGV4IDMyYzlmOGVkN2FlMjA1Li5lMTkxNTAyNmUwMzA0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTQ1LDYgKzQ1LDcgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdF9TTEFCX0FDQ09VTlQsXG4rXHRfU0xBQl9NQVlfQUNDT1VOVCxcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcbiBcdF9TTEFCX0tBU0FOLFxuQEAgLTIwNCw4ICsyMDUsMTAgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX01BWV9BQ0NPVU5UKVxuICNlbHNlXG4gIyBkZWZpbmUgU0xBQl9BQ0NPVU5UXHRcdF9fU0xBQl9GTEFHX1VOVVNFRFxuKyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlRcdF9fU0xBQl9GTEFHX1VOVVNFRFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jXG5pbmRleCA2NTc3YmQ3Njk1NGViNC4uOTA5MjVjNjQ2YzRjMjQgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXG4rKysgYi9tbS9rZmVuY2UvY29yZS5jXG5AQCAtNjM2LDExICs2MzYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpXG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gKyBpKTtcbiBcdFx0X19TZXRQYWdlU2xhYihwYWdlKTtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4tXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuLVx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8XG4tXHRcdFx0XHQgTUVNQ0dfREFUQV9PQkpFWFRTO1xuLSNlbmRpZlxuIFx0fVxuIFxuIFx0LypcbkBAIC03MDQsMTAgKzY5OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiArIGkpO1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLSNlbmRpZlxuIFx0XHRfX0NsZWFyUGFnZVNsYWIocGFnZSk7XG4gXHR9XG4gXG5AQCAtMTI0OCw5ICsxMjM5LDYgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4ge1xuIFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0S0ZFTkNFX1dBUk5fT04obWV0YS1cdTAwM2VvYmpfZXh0cy5vYmpjZyk7XG4tI2VuZGlmXG4gXHQvKlxuIFx0ICogSWYgdGhlIG9iamVjdHMgb2YgdGhlIGNhY2hlIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSwgZGVmZXIgZnJlZWluZ1xuIFx0ICogdGhlIG9iamVjdCwgYXMgdGhlIG9iamVjdCBwYWdlIG1heSBiZSByZWN5Y2xlZCBmb3Igb3RoZXItdHlwZWRcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2Uva2ZlbmNlLmggYi9tbS9rZmVuY2Uva2ZlbmNlLmhcbmluZGV4IDFmNjE4ZjliMGQxMmQ5Li5lNmI0YmYzNDlmZjczMCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxuKysrIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5AQCAtMTAyLDkgKzEwMiw2IEBAIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEge1xuIFx0c3RydWN0IGtmZW5jZV90cmFjayBmcmVlX3RyYWNrIF9fZ3VhcmRlZF9ieShcdTAwMjZsb2NrKTtcbiBcdC8qIEZvciB1cGRhdGluZyBhbGxvY19jb3ZlcmVkIG9uIGZyZWVzLiAqL1xuIFx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFx1MDAyNmxvY2spO1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdHN0cnVjdCBzbGFib2JqX2V4dCBvYmpfZXh0cztcbi0jZW5kaWZcbiB9O1xuIFxuICNkZWZpbmUgS0ZFTkNFX01FVEFEQVRBX1NJWkUgUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IGtmZW5jZV9tZXRhZGF0YSkgKiBcXFxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jIGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbmluZGV4IGRlMmQwZjdkNjJiMTVlLi45ODY3YzAzZWYwYWUzZCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCAqdGVzdF9hbGxvYyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGVudW0gYWxsb2NhdFxuIFx0XHRcdCAqIG1lbWNnIGFjY291bnRpbmcgd29ya3MgY29ycmVjdGx5LlxuIFx0XHRcdCAqL1xuIFx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpfdG9faW5kZXgocywgc2xhYiwgYWxsb2MpLCAwVSk7XG4tXHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ianNfcGVyX3NsYWIocywgc2xhYiksIDEpO1xuK1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAoKHVuc2lnbmVkIGludClzbGFiLVx1MDAzZW9iamVjdHMpLCAxKTtcbiBcbiBcdFx0XHRpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSlcbiBcdFx0XHRcdHJldHVybiBhbGxvYztcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi42YjUxZGRmNmRmZTAyMiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjg2NSwxOCArMjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKVxuIFx0ICovXG4gXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xuIFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuLVx0dW5zaWduZWQgaW50IG9mZjtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmICghb2JqX2V4dHMpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0b2ZmID0gb2JqX3RvX2luZGV4KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgcCk7XG4tXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0aWYgKG9ial9leHQtXHUwMDNlb2JqY2cpIHtcbi1cdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC1cdTAwM2VvYmpjZztcbitcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4rXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqX2V4dHMsIHApO1xuK1x0b2JqY2cgPSBzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCk7XG4rXHRpZiAob2JqY2cpIHtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gXHR9XG5AQCAtMzU0MSw3ICszNTQyLDYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFx0c2l6ZV90IGk7XG4gXG4gXHQvKlxuQEAgLTM1ODMsMTEgKzM1ODMsMTYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcbiBcdFx0c2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcbiBcbi1cdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpIHtcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpKSB7XG4rXHRcdFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHBbaV0pKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIHNsYWJfYWxsb2NfZmxhZ3MpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSBcdTAwMjZcdTAwMjYgV0FSTl9PTl9PTkNFKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0LypcbiBcdFx0ICogaWYgd2UgZmFpbCBhbmQgc2l6ZSBpcyAxLCBtZW1jZ19hbGxvY19hYm9ydF9zaW5nbGUoKSB3aWxsXG4gXHRcdCAqIGp1c3QgZnJlZSB0aGUgb2JqZWN0LCB3aGljaCBpcyBvayBhcyB3ZSBoYXZlIG5vdCBhc3NpZ25lZFxuQEAgLTM2MTYsMTAgKzM2MjEsMTEgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcbiBcdFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4rXG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IG9iamNnO1xuK1x0XHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTtcbitcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fVxuIFxuQEAgLTM2MzUsMTUgKzM2NDEsMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4gXHRcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcbi1cdFx0dW5zaWduZWQgaW50IG9mZjtcbiBcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4rXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xuK1x0XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiBcdFx0aWYgKCFvYmpjZylcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IE5VTEw7XG4rXHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7XG4gXG4gXHRcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xuIFx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCBmNWUzMzZiNmI2YjA0Yy4uMDQ2MDBmNTdiNDAxNDYgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTgxLDEwICs4MSwxMSBAQCBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMge1xuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdFx0XHRcdFx0LypcbiBcdFx0XHRcdFx0ICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJ2NvdW50ZXJzJyBmaWVsZFxuLVx0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXG4tXHRcdFx0XHRcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4rXHRcdFx0XHRcdCAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3RcbitcdFx0XHRcdFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuIFx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0cmlkZTtcbitcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7XG4gI2VuZGlmXG4gXHRcdFx0XHR9O1xuIFx0XHRcdH07XG5AQCAtMzMwLDEyICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0cmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNsYWItXHUwMDNlb2JqZWN0cztcbi19XG4tXG4gLypcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXG4gICpcbkBAIC01NTUsNiArNTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qXG4rICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluXG4rICogc2xhYi1cdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cdTAwM2VtZW1jZ19kYXRhKSBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuKyAqL1xuK3N0cnVjdCBzbGFib2JqX2V4dCB7XG4rXHQvKlxuK1x0ICogQWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiBzaG91bGQgYmUgcG9pbnRlci1zaXplZCB0byBhdm9pZCBtZW1vcnlcbitcdCAqIHdhc3RlXG4rXHQgKi9cbitcdHVuaW9uIHtcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmIF9jdHJlZjtcbisjZW5kaWZcbitcdH07XG4rfSBfX2FsaWduZWQoOCk7XG4rXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rREVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxuK3tcbitcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRcdCAgIFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbitzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxuK3tcbitcdHJldHVybiAoY2FjaGUtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rI2lmZGVmIENPTkZJR182NEJJVFxuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XG4rI2Vsc2VcbitcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVx1MDAzZXNsYWJfY2FjaGUpO1xuKyNlbmRpZlxuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbit7XG4rXHRzaXplX3Qgc3ogPSAwO1xuK1xuK1x0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHNpemVfdCBzeiA9IDA7XG4rXG4rXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxuIFxuIC8qXG5AQCAtNTcyLDcgKzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuICAqIGlmIChvYmpfZXh0cykge1xuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xuKyAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqKTtcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiAgKiB9XG5AQCAtNjEwLDQ4ICs2OTIsODYgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zbGFiX29ial9leHRzKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfNjRCSVRcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0c2xhYi1cdTAwM2VzdHJpZGUgPSBzdHJpZGU7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VzdHJpZGU7XG4rXHQvKlxuK1x0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbitcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuK1x0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuK1x0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbitcdCAqL1xuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfaW5fb2JqZWN0O1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKHN0cmlkZSAhPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gI2VuZGlmXG4gXG4gLypcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuKyAqIEBzOiBjYWNoZSB0aGF0IHRoZSBzbGFiIGJlbG9uZ3MgdG9cbiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdFxuICAqIEBvYmpfZXh0czogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIHZlY3RvclxuLSAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxuKyAqIEBvYmo6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSBzZWN0aW9uIGNvdmVyZWQgYnkgZ2V0L3B1dF9zbGFiX29ial9leHRzKCkuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKlxuK3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4rXHQgICAgIGNvbnN0IHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4rXHR1bnNpZ25lZCBpbnQgaW5kZXg7XG4rXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xuIFxuLVx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgK1xuLVx0XHRcdFx0XHQgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpO1xuK1x0LypcbitcdCAqIEtGRU5DRSBvYmplY3RzIGhhdmUgTlVMTCBvYmpfZXh0cyBhbmQgdGh1cyBjYW4ndCByZWFjaCB0aGlzXG4rXHQgKiBhbmQgd2UgZG9uJ3QgbmVlZCBvYmpfdG9faW5kZXgoKVxuK1x0ICovXG4rXHRpbmRleCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcbitcbitcdGlmICghb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuK1x0XHRzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcbitcdGVsc2VcbitcdFx0c3RyaWRlID0gcy1cdTAwM2VzaXplO1xuK1xuK1x0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgKyBpbmRleCAqIHN0cmlkZSk7XG4rXG4gXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKG9ial9leHQpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbit7XG4rXHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4rXHRyZXR1cm4gb2JqX2V4dC1cdTAwM2Vfb2JqY2c7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4re1xuK1x0LyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xuK1x0b2JqX2V4dC1cdTAwM2Vfb2JqY2cgPSBvYmpjZztcbit9XG4rI2VuZGlmXG4rXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rc3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG4rc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXG4re1xuK1x0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdG9ial9leHQgKz0gMTtcbitcbitcdHJldHVybiBcdTAwMjZvYmpfZXh0LVx1MDAzZV9jdHJlZjtcbit9XG4rI2VuZGlmXG4rXG4gaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiBcbkBAIC02NjIsMTYgKzc4MiwxNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4rc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbitcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH1cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIDA7IH1cbi1cbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xuaW5kZXggMDNlY2FjMTJjZDg2NWYuLjFlMWQzZmVlYzM1MzViIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuKysrIGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7XG4gXHRcdFNMQUJfT0JKX0VYVF9JTl9PQkopXG4gXG4gI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcXFxuLVx0XHRcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UKVxuK1x0XHRcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UIHwgU0xBQl9NQVlfQUNDT1VOVClcbiBcbiAvKlxuICAqIE1lcmdlIGNvbnRyb2wuIElmIHRoaXMgaXMgc2V0IHRoZW4gbm8gbWVyZ2luZyBvZiBzbGFiIGNhY2hlcyB3aWxsIG9jY3VyLlxuQEAgLTM1OSw2ICszNTksMTMgQEAgc3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogRm9yIG5vdyB3ZSBhc3N1bWUgYW55IGNhY2hlIGNhbiBiZSB1c2VkIHdpdGggX19HRlBfQUNDT1VOVCBhbmQgdGh1c1xuK1x0ICogbWF5IG5lZWQgdG8gc3RvcmUgb2JqY2cgcG9pbnRlcnMgZm9yIG9iamVjdHNcbitcdCAqL1xuK1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbitcdFx0ZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDtcbitcbiBcdC8qIEZhaWwgY2xvc2VkIG9uIGJhZCB1c2Vyc2l6ZSBvZiB1c2Vyb2Zmc2V0IHZhbHVlcy4gKi9cbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpIHx8XG4gXHQgICAgV0FSTl9PTighYXJncy1cdTAwM2V1c2Vyc2l6ZSBcdTAwMjZcdTAwMjYgYXJncy1cdTAwM2V1c2Vyb2Zmc2V0KSB8fFxuQEAgLTk4NCwxMSArOTkxLDIwIEBAIG5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG4gI2VuZGlmXG4gXG4gXHQvKlxuLVx0ICogSWYgQ09ORklHX01FTUNHIGlzIGVuYWJsZWQsIGRpc2FibGUgY2FjaGUgbWVyZ2luZyBmb3Jcbi1cdCAqIEtNQUxMT0NfTk9STUFMIGNhY2hlcy5cbitcdCAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCBub3RcbitcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXG4rXHQgKiBjYWNoZS5cbitcdCAqXG4rXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcbitcdCAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2guIFRoZSBleGNlcHRpb24gaXMgYVxuK1x0ICogS01BTExPQ19OT19PQkpfRVhUIGNhY2hlLlxuIFx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXG4tXHRcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG4rXHRcdGlmICh0eXBlID09IEtNQUxMT0NfTk9STUFMIFx1MDAyNlx1MDAyNiBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpXG4rXHRcdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbitcdFx0ZWxzZSBpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT19PQkpfRVhUKSlcbitcdFx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuK1x0fVxuIFxuIFx0aWYgKG1pbmFsaWduIFx1MDAzZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHtcbiBcdFx0YWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7XG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCAwMzM3ZTYwZGI1YWNlMC4uOTRiNzQ0ZTVhYzc5MTkgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTIxMyw2ICsyMTMsMTEgQEAgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbiBzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbisjZW5kaWZcbitcbiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovXG4gc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7XG4gXHR1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyO1xuQEAgLTgwMyw3ICs4MDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9zbGFiX29ial9leHRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX3NpemVfaW5fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4rXHRyZXR1cm4gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHQvKlxuLVx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbi1cdCAqIGNoZWNrIHRoZSBzdHJpZGUuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuLVx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuLVx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbi1cdCAqL1xuLVx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKHNsYWJfZ2V0X3N0cmlkZShzbGFiKSA9PSBzLVx1MDAzZXNpemUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9pbmZvX2VuZChzKTtcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRyZXR1cm4gb2Zmc2V0O1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0c2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3QgPSAxO1xuIH1cbi1cbisjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuLVx0XHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XG4rXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuK1x0XHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4gXG4gXHRpZiAob2ZmICE9IHNpemVfZnJvbV9vYmplY3QocykpXG4gXHRcdC8qIEJlZ2lubmluZyBvZiB0aGUgZmlsbGVyIGlzIHRoZSBmcmVlIHBvaW50ZXIgKi9cbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxuIFxuIFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuK1x0aWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbitcdFx0b2ZmICs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuIFxuIFx0aWYgKHNpemVfZnJvbV9vYmplY3QocykgPT0gb2ZmKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7XG4gXHRlbmQgPSBzdGFydCArIGxlbmd0aDtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XG4rXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjYgIW9ial9leHRzX2luX29iamVjdChzbGFiKSkge1xuIFx0XHRyZW1haW5kZXIgPSBsZW5ndGg7XG4gXHRcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzLCBzbGFiKTtcbiBcdFx0cmVtYWluZGVyIC09IG9ial9leHRzX3NpemVfaW5fc2xhYihzbGFiKTtcbkBAIC0yMDcwLDIwICsyMDY3LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbiBcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4gXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcbiBcdGlmIChzbGFiX2V4dHMpIHtcbitcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4rXG4gXHRcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4tXHRcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsXG4tXHRcdFx0XHRcdFx0IG9ial9zbGFiLCBvYmopO1xuLVx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYixcbi1cdFx0XHRcdFx0XHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7XG4rXHRcdHJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihvYmpfc2xhYiwgZXh0KTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZikpKSB7XG4rXHRcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KHJlZikpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbiBcdFx0LyogY29kZXRhZyBzaG91bGQgYmUgTlVMTCBoZXJlICovXG4tXHRcdFdBUk5fT04oZXh0LVx1MDAzZXJlZi5jdCk7XG4tXHRcdHNldF9jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpO1xuK1x0XHRXQVJOX09OKHJlZi1cdTAwM2VjdCk7XG4rXHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4gXHR9XG4gfVxuQEAgLTIwOTMsMTkgKzIwOTEsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRyZXR1cm4gY21weGNoZyhcdTAwMjZzbGFiLVx1MDAzZW9ial9leHRzLCAwLCBPQkpFWFRTX0FMTE9DX0ZBSUwpID09IDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpXG4rc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbitcdFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpXG4ge1xuK1x0dW5zaWduZWQgaW50IHN0cmlkZTtcbitcbitcdGlmICghc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qXG4gXHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbiBcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbiBcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbiBcdCAqL1xuLVx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgaTtcbitcdGlmIChvYmpfZXh0cyAhPSBPQkpFWFRTX0FMTE9DX0ZBSUwpXG4rXHRcdHJldHVybjtcbitcbitcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpIC8gc2l6ZW9mKCp2ZWMpO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIHNsYWItXHUwMDNlb2JqZWN0czsgaSsrKSB7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgdmVjKTtcbiBcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSsrKVxuLVx0XHRcdHNldF9jb2RldGFnX2VtcHR5KFx1MDAyNnZlY1tpXS5yZWYpO1xuK1x0XHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xuK1x0XHR2ZWMgKz0gc3RyaWRlO1xuIFx0fVxuIH1cbiBcbkBAIC0yMTEzLDggKzIxMjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbitcdFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpIHt9XG4gXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4gXG5AQCAtMjEyNywxMiArMjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xuLVx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xuIFx0Ym9vbCBuZXdfc2xhYiA9IGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcbi1cdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuK1x0c2l6ZV90IHN6ID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gXG4gXHRnZnAgXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XG4gXHQvKlxuQEAgLTIxODMsNyArMjE5MCw3IEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiAjZW5kaWZcbiByZXRyeTpcbiBcdG9sZF9leHRzID0gUkVBRF9PTkNFKHNsYWItXHUwMDNlb2JqX2V4dHMpO1xuLVx0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKG9sZF9leHRzLCB2ZWMsIG9iamVjdHMpO1xuK1x0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIsIG9sZF9leHRzLCB2ZWMpO1xuIFxuIFx0aWYgKG5ld19zbGFiKSB7XG4gXHRcdC8qXG5AQCAtMjI1MCw5ICsyMjU3LDYgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHR2b2lkICphZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcbi1cdC8qIEluaXRpYWxpemUgc3RyaWRlIGVhcmx5IHRvIGF2b2lkIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgKi9cbi1cdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG4tXG4gXHRpZiAoIW5lZWRfc2xhYl9vYmpfZXh0cyhzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTIyNzgsMTUgKzIyODIsMTQgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdFx0Zm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi1cdTAwM2VvYmplY3RzKVxuLVx0XHRcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsXG4tXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbitcdFx0XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICsgb2Zmc2V0LCAwLCBzbGFiX29ial9leHRfc2l6ZShzbGFiKSk7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbiAjZW5kaWZcbiBcdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xuLVx0XHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgcy1cdTAwM2VzaXplKTtcbitcdFx0c2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMzIzLDExICsyMzI2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuIHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0XHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxuIHtcbi1cdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbi1cdFx0cHJfd2Fybl9vbmNlKFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cIixcbi1cdFx0XHQgICAgIF9fZnVuY19fLCBzLVx1MDAzZW5hbWUpO1xuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSkge1xuK1x0XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbitcdFx0XHRwcl93YXJuX29uY2UoXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwiLFxuK1x0XHRcdFx0ICAgICBfX2Z1bmNfXywgcy1cdTAwM2VuYW1lKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIHNsYWJfb2JqX2V4dHMoc2xhYik7XG5AQCAtMjM2MCwxNCArMjM2NywyNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxuIFx0ICogY2hlY2sgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhbGxvY190YWdfYWRkKCkuXG4gXHQgKi9cbiBcdGlmIChvYmpfZXh0cykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb2JqX2lkeCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmplY3QpO1xuK1x0XHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmO1xuIFxuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial9pZHgpO1xuLVx0XHRhbGxvY190YWdfYWRkKFx1MDAyNm9ial9leHQtXHUwMDNlcmVmLCBjdXJyZW50LVx1MDAzZWFsbG9jX3RhZywgcy1cdTAwM2VzaXplKTtcbitcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqZWN0KTtcbitcdFx0cmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIG9ial9leHQpO1xuK1xuK1x0XHRhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC1cdTAwM2VhbGxvY190YWcsIHMtXHUwMDNlc2l6ZSk7XG4rXG4gXHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyk7XG4rXHRcdC8qXG4rXHRcdCAqIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZ1xuK1x0XHQgKiBvbmVzIGlzIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIgc28gaXQncyBub3Qgd29ydGggc2V0dGluZ1xuK1x0XHQgKiB0YWdzIGFzIGluYWNjdXJhdGUgYmVjYXVzZSBvZiB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFpc19rZmVuY2VfYWRkcmVzcyhvYmplY3QpKVxuK1x0XHRcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyk7XG4gXHR9XG4gfVxuIFxuQEAgLTIzODQsNyArMjQwMSw2IEBAIHN0YXRpYyBub2lubGluZSB2b2lkXG4gX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4gXHRcdFx0ICAgICAgIGludCBvYmplY3RzKVxuIHtcbi1cdGludCBpO1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcbiBcdC8qIHNsYWItXHUwMDNlb2JqX2V4dHMgbWlnaHQgbm90IGJlIE5VTEwgaWYgaXQgd2FzIGNyZWF0ZWQgZm9yIE1FTUNHIGFjY291bnRpbmcuICovXG5AQCAtMjM5NiwxMCArMjQxMiwxMSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcFxuIFx0XHRyZXR1cm47XG4gXG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpKyspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpKyspIHtcbitcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4gXG4tXHRcdGFsbG9jX3RhZ19zdWIoXHUwMDI2c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLVx1MDAzZXJlZiwgcy1cdTAwM2VzaXplKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbitcdFx0YWxsb2NfdGFnX3N1YihzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgZXh0KSwgcy1cdTAwM2VzaXplKTtcbiBcdH1cbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiB9XG5AQCAtMjQxMiw2ICsyNDI5LDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xuIH1cbiBcbisvKlxuKyAqIE1ha2Ugc3VyZSB0aGUgc3RhdGljIGtleSB1c2VkIGJ5IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpIHJlZmxlY3RzIHRoZVxuKyAqIHZhbHVlIG9mICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKClcbisgKlxuKyAqIEFueSBsYXRlciBtZW0gYWxsb2MgcHJvZmlsaW5nIHNodXRkb3duIHdvbid0IGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGljIGtleVxuKyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbitcdGJvb2wgbmVlZF9jb2RldGFnID0gIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKTtcbitcbitcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4rXHRcdGlmIChuZWVkX2NvZGV0YWcpXG4rXHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHR9XG4rfVxuK1xuICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkXG5AQCAtMjQyNiw2ICsyNDYyLDEwIEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbit9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICsyNTExLDkgQEAgdm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdHJldHVybjtcbitcbiBcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xuIFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuQEAgLTI0ODQsNyArMjUyNyw2IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFxuIFx0cGFnZSA9IHZpcnRfdG9fcGFnZShwKTtcbiBcdGlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7XG5AQCAtMjUxNywxNiArMjU1OSwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbitcdGlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xuIFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0aWYgKG9ial9leHRzKSB7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRpZiAodW5saWtlbHkob2JqX2V4dC1cdTAwM2VvYmpjZykpIHtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcCk7XG4rXHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCArMzQzMiwxNSBAQCBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuIFx0XHRzdGF0KHMsIE9SREVSX0ZBTExCQUNLKTtcbiBcdH1cbiBcbitcdC8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqL1xuK1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4rXG4gXHRzbGFiLVx1MDAzZW9iamVjdHMgPSBvb19vYmplY3RzKG9vKTtcbi1cdHNsYWItXHUwMDNlaW51c2UgPSAwO1xuLVx0c2xhYi1cdTAwM2Vmcm96ZW4gPSAwO1xuIFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcbitcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbitcdFx0c2xhYi1cdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7XG4rI2VuZGlmXG4gXHRzbGFiLVx1MDAzZXNsYWJfY2FjaGUgPSBzO1xuIFxuIFx0a2FzYW5fcG9pc29uX3NsYWIoc2xhYik7XG5AQCAtNjUyNiw3ICs2NTcyLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuK1x0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuIFx0XHRyZXR1cm4gcy1cdTAwM2VpbnVzZTtcbiBcdC8qXG4gXHQgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb25cbkBAIC03OTI5LDcgKzc5NzUsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xuICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbiBcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpXG4rXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiArODU4NSw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKVxuIFx0XHRib290X2ttZW1fY2FjaGVfbm9kZTtcbiBcdGludCBub2RlO1xuIFxuK1x0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQoKTtcbitcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MTguMDUxOTA0NjM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MzMxNDIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTFVCIE9iamVjdCBFeHRlbnNpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgc3Vic3RhbnRpYWwgY2hhbmdlcyB0byBob3cgYHNsYWJvYmpfZXh0YCBpcyBoYW5kbGVkIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIGRlYWxpbmcgd2l0aCBob3cgb2JqZWN0IGV4dGVuc2lvbnMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBzbyB0aGlzIGFic29sdXRlbHkgKm5lZWRzKiBmdXp6aW5nLlxuXG5UaGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGUgd2F5IGBzbGFib2JqX2V4dGAgaXMgZGVmaW5lZCBpbml0aWFsbHkgY29uZnVzZWQgbWUsIGFzIHRoZSB1bmlvbiBzdHJ1Y3R1cmUgc2VlbWVkIHRvIHN1Z2dlc3QgdGhhdCBpZiBib3RoIGZlYXR1cmVzIHdlcmUgZW5hYmxlZCwgdGhleSB3b3VsZCBzaGFyZSB0aGUgc2FtZSBtZW1vcnkuIEJ1dCwgbm8sIGl0IGxvb2tzIGxpa2UgaXQncyBhY3R1YWxseSBhbiBhcnJheSBvZiBgc2xhYm9ial9leHRgIGVsZW1lbnRzIHBlciBvYmplY3QuIElmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoZSBmaXJzdCBlbGVtZW50IHdpbGwgYmUgdXNlZCBmb3IgYG9iamNnYCwgYW5kIHRoZW4gYGNvZGV0YWdfcmVmYCBnb2VzIGluIHRoZSBzZWNvbmQuIFRoZSBzaXplIG9mIGBzbGFib2JqX2V4dGAgaXMgOCBieXRlcywgYW5kIGBzbGFiX29ial9leHRfc2l6ZWAgcmV0dXJucyBgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzemAgd2hlcmUgYHN6YCBpcyBlaXRoZXIgMSBvciAyIGRlcGVuZGluZyBvbiB0aGUgbmVlZC5cblxuVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUncyBhIGdvb2QgYW1vdW50IG9mIGV4dHJhIG1lbW9yeSB1c2UgaWYgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGJvdGggZW5hYmxlZC5cblxuTGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgbmV3bHkgaW50cm9kdWNlZC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBleHBvc2VkIHN5bWJvbHMg4oCTIHRoaW5ncyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgbWlnaHQgYmUgY2FsbGluZy4gV2UndmUgZ290IGBhbGxvY19zbGFiX29ial9leHRzYCwgdGhlIGlubGluZSBgc2xhYl9vYmpfZXh0YCwgYHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCwgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYW5kIGBrbWVtX2NhY2hlX2NyZWF0ZWAgKGluZGlyZWN0bHkgdmlhIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgKSwgcGx1cyBga21lbV9jYWNoZV9hbGxvY2AgYW5kIGBrbWVtX2NhY2hlX2ZyZWVgIHZpYSBob29rcy5cblxuTm93LCBsZXQncyBodW50IGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gcmVsZXZhbnQgZmlsZXMuIEknbSBjaGVja2luZyBgbW0vc2x1Yi5jYCwgYG1tL3NsYWJfY29tbW9uLmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuIEkndmUgY29uZmlybWVkIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIG5vbi1zdGF0aWMgaW4gYG1tL3NsdWIuY2AsIGFuZCBzbyBhcmUgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBhbmQgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGhvb2tzLiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGNvbmZpcm0gdGhhdCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyBub24tc3RhdGljLiBGaW5hbGx5LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpcyBub24tc3RhdGljIGluIGBtbS9zbGFiX2NvbW1vbi5jYC5cblxuQWxzbyB0byBrZWVwIGluIG1pbmQgYXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLCBgQ09ORklHX1NMQUJfT0JKX0VYVGAgKHNlbGVjdGVkIGJ5IHRoZSBhYm92ZSksIGFuZCBgQ09ORklHX0tGRU5DRWAuIEkgc2hvdWxkIHZlcmlmeSB0aGVzZSBmdW5jdGlvbiBuYW1lcywgYW5kIGFueSBvdGhlciByZWxldmFudCBuYW1lcywgbGF0ZXIsIGJ1dCB0aGVzZSBhcmUgYWxsIHN0YXJ0aW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NTAsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MzAuNTg1MDUwMTAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDkyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbHxzdHJ1Y3QgW2Etel9dKyBcXFxcKj8pIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTQwMz1zdGF0aWMgaW5saW5lXFxubW0vc2x1Yi5jOjQwNDp2b2lkIHN0YXRfYWRkKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSwgaW50IHYpXFxubW0vc2x1Yi5jLTQwNS17XFxuLS1cXG5tbS9zbHViLmM9OTM1PXN0YXRpYyBib29sIHNsYWJfYWRkX2t1bml0X2Vycm9ycyh2b2lkKVxcbi0tXFxubW0vc2x1Yi5jLTk1MC1cXG5tbS9zbHViLmM6OTUxOmJvb2wgc2xhYl9pbl9rdW5pdF90ZXN0KHZvaWQpXFxubW0vc2x1Yi5jLTk1Mi17XFxuLS1cXG5tbS9zbHViLmM9MTA5Mz1zdGF0aWMgdm9pZCBwcmludF90cmFjayhjb25zdCBjaGFyICpzLCBzdHJ1Y3QgdHJhY2sgKnQsIHVuc2lnbmVkIGxvbmcgcHJfdGltZSlcXG4tLVxcbm1tL3NsdWIuYy0xMTEwLVxcbm1tL3NsdWIuYzoxMTExOnZvaWQgcHJpbnRfdHJhY2tpbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtMTExMi17XFxuLS1cXG5tbS9zbHViLmM9MTEyMT1zdGF0aWMgdm9pZCBwcmludF9zbGFiX2luZm8oY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMTEyNy1cXG5tbS9zbHViLmM6MTEyODp2b2lkIHNraXBfb3JpZ19zaXplX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCB2b2lkICpvYmplY3QpXFxubW0vc2x1Yi5jLTExMjkte1xcbi0tXFxubW0vc2x1Yi5jPTE3MDg9c3RhdGljXFxubW0vc2x1Yi5jOjE3MDk6dm9pZCBzZXR1cF9zbGFiX2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqYWRkcilcXG5tbS9zbHViLmMtMTcxMC17XFxuLS1cXG5tbS9zbHViLmM9MjAxMD1zdGF0aWMgaW5saW5lXFxubW0vc2x1Yi5jOjIwMTE6dm9pZCBzZXR1cF9zbGFiX2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqYWRkcikge31cXG5tbS9zbHViLmMtMjAxMi1cXG4tLVxcbm1tL3NsdWIuYz0yMTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjEzMy1cXG5tbS9zbHViLmM6MjEzNDppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxMzUtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjQ3Nj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjQ3Nzpib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjQ3OC1cXHRcXHRcXHRcXHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmM9MjUwMT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUwMjp2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxubW0vc2x1Yi5jLTI1MDMtXFx0XFx0XFx0ICBpbnQgb2JqZWN0cylcXG4tLVxcbm1tL3NsdWIuYz0yNTIyPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTIzOmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG5tbS9zbHViLmMtMjUyNC17XFxuLS1cXG5tbS9zbHViLmM9MjYzNj1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubW0vc2x1Yi5jOjI2Mzc6Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxcbm1tL3NsdWIuYy0yNjM4LVxcdFxcdCAgICBib29sIGFmdGVyX3JjdV9kZWxheSlcXG4tLVxcbm1tL3NsdWIuYz0yNzIxPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNzIyOmJvb2wgc2xhYl9mcmVlX2ZyZWVsaXN0X2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipoZWFkLCB2b2lkICoqdGFpbCxcXG5tbS9zbHViLmMtMjcyMy1cXHRcXHRcXHQgICAgIGludCAqY250KVxcbi0tXFxubW0vc2x1Yi5jPTQwNjc9c3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL3NsdWIuYy00MDkwLS8qIG5lZWRlZCBmb3Iga3ZmcmVlX3JjdV9iYXJyaWVyKCkgKi9cXG5tbS9zbHViLmM6NDA5MTp2b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy00MDkyLXtcXG4tLVxcbm1tL3NsdWIuYy00MTIxLVxcbm1tL3NsdWIuYzo0MTIyOnZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpXFxubW0vc2x1Yi5jLTQxMjMte1xcbi0tXFxubW0vc2x1Yi5jPTQ1OTE9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjQ1OTI6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxcbm1tL3NsdWIuYy00NTkzLVxcdFxcdFxcdCAgdm9pZCAqKnAsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vc2x1Yi5jPTUwMDI9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2YpO1xcbm1tL3NsdWIuYy01MDAzLVxcbm1tL3NsdWIuYzo1MDA0OmJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXFxubW0vc2x1Yi5jLTUwMDUte1xcbi0tXFxubW0vc2x1Yi5jPTUwNzg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUxNjAtICovXFxubW0vc2x1Yi5jOjUxNjE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MTYyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jLTUyMTgtICovXFxubW0vc2x1Yi5jOjUyMTk6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxubW0vc2x1Yi5jLTUyMjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbm1tL3NsdWIuYz01OTc3PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzo1OTc4OmJvb2wgZnJlZV90b19wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy01OTc5LXtcXG4tLVxcbm1tL3NsdWIuYz02MDcxPXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xcbm1tL3NsdWIuYy02MDcyLVxcbm1tL3NsdWIuYzo2MDczOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG5tbS9zbHViLmMtNjA3NC17XFxuLS1cXG5tbS9zbHViLmM9NjM5NT1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY0MDctXFxubW0vc2x1Yi5jOjY0MDg6dm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZClcXG5tbS9zbHViLmMtNjQwOS17XFxuLS1cXG5tbS9zbHViLmM9NjQxNj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6NjQxNzp2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcXG5tbS9zbHViLmMtNjQxOC1cXHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vc2x1Yi5jPTY0MzU9c3RhdGljIG5vaW5saW5lXFxubW0vc2x1Yi5jOjY0MzY6dm9pZCBtZW1jZ19hbGxvY19hYm9ydF9zaW5nbGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtNjQzNy17XFxuLS1cXG5tbS9zbHViLmM9NjQ0Nz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6NjQ0ODp2b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcXG5tbS9zbHViLmMtNjQ0OS1cXHRcXHQgICAgdm9pZCAqdGFpbCwgdm9pZCAqKnAsIGludCBjbnQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL3NsdWIuYz02NDY0PXN0YXRpYyB2b2lkIHNsYWJfZnJlZV9hZnRlcl9yY3VfZGVidWcoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02NDkyLSNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbm1tL3NsdWIuYzo2NDkzOnZvaWQgX19fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKngsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9zbHViLmMtNjQ5NC17XFxuLS1cXG5tbS9zbHViLmM9NjUwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCB3YXJuX2ZyZWVfYmFkX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxcbi0tXFxubW0vc2x1Yi5jLTY1MjktICovXFxubW0vc2x1Yi5jOjY1MzA6dm9pZCBrbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpXFxubW0vc2x1Yi5jLTY1MzEte1xcbi0tXFxubW0vc2x1Yi5jPTY2NDQ9c3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXFxuLS1cXG5tbS9zbHViLmMtNjY2OS0gKi9cXG5tbS9zbHViLmM6NjY3MDp2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm1tL3NsdWIuYy02NjcxLXtcXG4tLVxcbm1tL3NsdWIuYy02NzE2LSAqL1xcbm1tL3NsdWIuYzo2NzE3OnZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02NzE4LXtcXG4tLVxcbm1tL3NsdWIuYz02NzQwPUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xcbi0tXFxubW0vc2x1Yi5jLTY3NTAtICovXFxubW0vc2x1Yi5jOjY3NTE6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02NzUyLXtcXG4tLVxcbm1tL3NsdWIuYz02OTgzPUVYUE9SVF9TWU1CT0woX19rdm1hbGxvY19ub2RlX25vcHJvZik7XFxuLS1cXG5tbS9zbHViLmMtNjk5NC0gKi9cXG5tbS9zbHViLmM6Njk5NTp2b2lkIGt2ZnJlZShjb25zdCB2b2lkICphZGRyKVxcbm1tL3NsdWIuYy02OTk2LXtcXG4tLVxcbm1tL3NsdWIuYz03MDAyPUVYUE9SVF9TWU1CT0woa3ZmcmVlKTtcXG4tLVxcbm1tL3NsdWIuYy03MDEwLSAqL1xcbm1tL3NsdWIuYzo3MDExOnZvaWQga3ZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxcbm1tL3NsdWIuYy03MDEyLXtcXG4tLVxcbm1tL3NsdWIuYz03MDE4PUVYUE9SVF9TWU1CT0woa3ZmcmVlX2F0b21pYyk7XFxuLS1cXG5tbS9zbHViLmMtNzAyOC0gKi9cXG5tbS9zbHViLmM6NzAyOTp2b2lkIGt2ZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcXG5tbS9zbHViLmMtNzAzMC17XFxuLS1cXG5tbS9zbHViLmM9NzA4Nz1zdGF0aWMgaW5saW5lXFxubW0vc2x1Yi5jOjcwODg6aW50IGJ1aWxkX2RldGFjaGVkX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSxcXG5tbS9zbHViLmMtNzA4OS1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIHN0cnVjdCBkZXRhY2hlZF9mcmVlbGlzdCAqZGYpXFxuLS1cXG5tbS9zbHViLmM9NzE1Mj1zdGF0aWMgdm9pZCBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuLS1cXG5tbS9zbHViLmMtNzE3Mi0vKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXFxubW0vc2x1Yi5jOjcxNzM6dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbm1tL3NsdWIuYy03MTc0LXtcXG4tLVxcbm1tL3NsdWIuYz03MzcyPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDIxLSAqL1xcbm1tL3NsdWIuYzo3NDIyOmJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxubW0vc2x1Yi5jLTc0MjMtXFx0XFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jPTc3Mzg9c3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc3NjAtXFxubW0vc2x1Yi5jOjc3NjE6dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtNzc2Mi17XFxuLS1cXG5tbS9zbHViLmM9ODA0OT1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXFxuLS1cXG5tbS9zbHViLmMtODA2OS1cXG5tbS9zbHViLmM6ODA3MDpib29sIF9fa21lbV9jYWNoZV9lbXB0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODA3MS17XFxuLS1cXG5tbS9zbHViLmMtODA4My0gKi9cXG5tbS9zbHViLmM6ODA4NDppbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy04MDg1LXtcXG4tLVxcbm1tL3NsdWIuYy04MTExLSNpZmRlZiBDT05GSUdfUFJJTlRLXFxubW0vc2x1Yi5jOjgxMTI6dm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtODExMy17XFxuLS1cXG5tbS9zbHViLmM9ODIzNj1fX2NvcmVfcGFyYW1fY2Ioc2xhYl9zdHJpY3RfbnVtYSwgXFx1MDAyNnBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hLCBOVUxMLCAwKTtcXG4tLVxcbm1tL3NsdWIuYy04MjQ4LSAqL1xcbm1tL3NsdWIuYzo4MjQ5OnZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcXG5tbS9zbHViLmMtODI1MC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgdG9fdXNlcilcXG4tLVxcbm1tL3NsdWIuYz04MzAxPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04MzY5LVxcbm1tL3NsdWIuYzo4MzcwOmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy04MzcxLXtcXG4tLVxcbm1tL3NsdWIuYz04NjQ2PXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtODY1NS1cXG5tbS9zbHViLmM6ODY1NjppbnQgZG9fa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUsXFxubW0vc2x1Yi5jLTg2NTctXFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLFxcbi0tXFxubW0vc2x1Yi5jPTk2ODk9c3RhdGljIGludCBzeXNmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy05NzMyLVxcbm1tL3NsdWIuYzo5NzMzOnZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTk3MzQte1xcbi0tXFxubW0vc2x1Yi5jLTk3MzgtXFxubW0vc2x1Yi5jOjk3Mzk6dm9pZCBzeXNmc19zbGFiX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTk3NDAte1xcbi0tXFxubW0vc2x1Yi5jPTk3NTQ9c3RhdGljIHN0cnVjdCBzYXZlZF9hbGlhcyAqYWxpYXNfbGlzdDtcXG5tbS9zbHViLmMtOTc1NS1cXG5tbS9zbHViLmM6OTc1NjppbnQgc3lzZnNfc2xhYl9hbGlhcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSlcXG5tbS9zbHViLmMtOTc1Ny17XFxuLS1cXG5tbS9zbHViLmM9OTk5Nz1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTEwMDEyLVxcbm1tL3NsdWIuYzoxMDAxMzp2b2lkIGRlYnVnZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0xMDAxNC17XFxuLS1cXG5tbS9zbHViLmM9MTAwMzE9X19pbml0Y2FsbChzbGFiX2RlYnVnZnNfaW5pdCk7XFxuLS1cXG5tbS9zbHViLmMtMTAwMzYtI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jOjEwMDM3OnZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxcbm1tL3NsdWIuYy0xMDAzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjEzOjMwLjY0ODU0NzUwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODAxMDIwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgU2x1YiBNZW1vcnkgTWFuYWdlbWVudCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2x1Yi5jYCBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBtZW1vcnkgYWNjb3VudGluZyBmdW5jdGlvbnMgaW50ZXJhY3QuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYW5kIGBtZW1jZ19zbGFiX2ZyZWVfaG9va2AgYXJlIGFsbCBob3VzZWQgbmVhdGx5IHdpdGhpbiBgbW0vc2x1Yi5jYC4gQnV0IGhvbGQgb24uLi4gc29tZXRoaW5nIGZlZWxzIG9mZiBhYm91dCB0aGF0IGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCBsb2NhdGlvbi4uLiBJdCAqaXMqIGluIGBtbS9zbHViLmNgLCBpc24ndCBpdD8gT2ggcmlnaHQsIEknbSBmb3JnZXR0aW5nIGFib3V0IHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdC4gWWVzLCBpdCdzIG1vZGlmaWVkIHdpdGhpbiBgbW0vc2x1Yi5jYCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuTm93IEknbSBxdWVzdGlvbmluZyB3aGV0aGVyIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayBgbW0vc2xhYl9jb21tb24uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgb3IgY3J1Y2lhbCBkZXBlbmRlbmNpZXMgbHVya2luZyB0aGVyZSB0aGF0IEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIEl0J3MgYWx3YXlzIHNtYXJ0IHRvIGhhdmUgYSB3aWRlciB2aWV3IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjIyLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjEzOjM0LjgyODY1MTg4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA0OTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGJvb2x8c3RydWN0IFthLXpfXSsgXFxcXCo/KSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYl9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTEyOD1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9hbGlnbm1lbnQoc2xhYl9mbGFnc190IGZsYWdzLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNTQtICovXFxubW0vc2xhYl9jb21tb24uYzoxNTU6aW50IHNsYWJfdW5tZXJnZWFibGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy0xNTYte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNzYtXFxubW0vc2xhYl9jb21tb24uYzoxNzc6Ym9vbCBzbGFiX2FyZ3NfdW5tZXJnZWFibGUoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc2xhYl9mbGFnc190IGZsYWdzKVxcbm1tL3NsYWJfY29tbW9uLmMtMTc4LXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9NTE4PXN0YXRpYyB2b2lkIGttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTI2LVxcbm1tL3NsYWJfY29tbW9uLmM6NTI3OnZvaWQgc2xhYl9rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy01Mjgte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy01MzMtXFxubW0vc2xhYl9jb21tb24uYzo1MzQ6dm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy01MzUte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz01OTg9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy02MDgtICovXFxubW0vc2xhYl9jb21tb24uYzo2MDk6aW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApXFxubW0vc2xhYl9jb21tb24uYy02MTAte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz02MTU9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX3Nocmluayk7XFxubW0vc2xhYl9jb21tb24uYy02MTYtXFxubW0vc2xhYl9jb21tb24uYzo2MTc6Ym9vbCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKVxcbm1tL3NsYWJfY29tbW9uLmMtNjE4LXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9NjIzPXN0YXRpYyB2b2lkIGttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNjQ0LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NjQ1OmJvb2wga21lbV9kdW1wX29iaih2b2lkICpvYmplY3QpXFxubW0vc2xhYl9jb21tb24uYy02NDYte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMDczPXN0YXRpYyB2b2lkIGZyZWVsaXN0X3JhbmRvbWl6ZSh1bnNpZ25lZCBpbnQgKmxpc3QsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEwODktLyogQ3JlYXRlIGEgcmFuZG9tIHNlcXVlbmNlIHBlciBjYWNoZSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MTA5MDppbnQgY2FjaGVfcmFuZG9tX3NlcV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgaW50IGNvdW50LFxcbm1tL3NsYWJfY29tbW9uLmMtMTA5MS1cXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMTA1LS8qIERlc3Ryb3kgdGhlIHBlci1jYWNoZSByYW5kb20gZnJlZWxpc3Qgc2VxdWVuY2UgKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjExMDY6dm9pZCBjYWNoZV9yYW5kb21fc2VxX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcXG5tbS9zbGFiX2NvbW1vbi5jLTExMDcte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMTYzPXN0YXRpYyBpbnQgc2xhYl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTE3Mi1cXG5tbS9zbGFiX2NvbW1vbi5jOjExNzM6dm9pZCBkdW1wX3VucmVjbGFpbWFibGVfc2xhYih2b2lkKVxcbm1tL3NsYWJfY29tbW9uLmMtMTE3NC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyNDU9bW9kdWxlX2luaXQoc2xhYl9wcm9jX2luaXQpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMjU5LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MTI2MDp2b2lkIGtmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICpwKVxcbm1tL3NsYWJfY29tbW9uLmMtMTI2MS17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMDAtXFxubW0vc2xhYl9jb21tb24uYzoxMzAxOnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMwMi17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE5NTA9dm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE5NzMtICovXFxubW0vc2xhYl9jb21tb24uYzoxOTc0OnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTk3NS17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIwNTA9c3RhdGljIGlubGluZSB2b2lkIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTIxMjgtICovXFxubW0vc2xhYl9jb21tb24uYzoyMTI5OnZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXFxubW0vc2xhYl9jb21tb24uYy0yMTMwLXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjEzND1FWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMTQyLSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MjE0Mzp2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbGFiX2NvbW1vbi5jLTIxNDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxMzozNC44OTA3MDg0ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc5OTk3OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6XG5cbioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0J3Mgc2lnbmlmaWNhbnQuIFRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0gaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGFueSBjaGFuZ2VzIHRoZXJlIHdhcnJhbnQgYSAqdmVyeSogY2xvc2UgbG9vay4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24gaXMgc291bmQsIGFuZCBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGZpbGUgd2FzIGNob3NlbiBmb3IgbW9kaWZpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2VzIGFyZSBsb2dpY2FsbHkgcmVsYXRlZCB0byB0aGUgcHJpbWFyeSBpbnRlbnQgb2YgdGhlIHBhdGNoIG9yIGlmIHRoZXkgcmVwcmVzZW50IGEgcG90ZW50aWFsbHkgcmlza3kgc2lkZSBlZmZlY3Qgb3IgdW5yZWxhdGVkIHJlZmFjdG9yaW5nLiBBIGRlZXAgZGl2ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzMzLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MzkuMjcwNzA5ODg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzQ4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbHxzdHJ1Y3QgW2Etel9dKyBcXFxcKj8pIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTEzMT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9iamNnX2xvY2spO1xcbm1tL21lbWNvbnRyb2wuYy0xMzItXFxubW0vbWVtY29udHJvbC5jOjEzMzpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xMzQte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyOT1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMS1cXG5tbS9tZW1jb250cm9sLmM6NTMyOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtNTMzLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTcwND1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcyOC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NzI5OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTczMC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzM5LVxcbm1tL21lbWNvbnRyb2wuYzo3NDA6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzQxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz03NTc9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03NzItXFxubW0vbWVtY29udHJvbC5jOjc3Mzpib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KVxcbm1tL21lbWNvbnRyb2wuYy03NzQte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTg0NT1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODcwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo4NzE6dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxubW0vbWVtY29udHJvbC5jLTg3Mi1cXHRcXHQgICAgICAgaW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04ODY9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MDEtXFxubW0vbWVtY29udHJvbC5jOjkwMjp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtOTAzLVxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTM3PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk2NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6OTY1OnZvaWQgbW9kX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxcbm1tL21lbWNvbnRyb2wuYy05NjYtXFx0XFx0XFx0aW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NzUtXFxubW0vbWVtY29udHJvbC5jOjk3Njp2b2lkIGxydXZlY19zdGF0X21vZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcXG5tbS9tZW1jb250cm9sLmMtOTc3LVxcdFxcdFxcdCAgICAgaW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05OTY9RVhQT1JUX1NZTUJPTChscnV2ZWNfc3RhdF9tb2RfZm9saW8pO1xcbm1tL21lbWNvbnRyb2wuYy05OTctXFxubW0vbWVtY29udHJvbC5jOjk5ODp2b2lkIG1vZF9scnV2ZWNfa21lbV9zdGF0ZSh2b2lkICpwLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcXG5tbS9tZW1jb250cm9sLmMtOTk5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMDI3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxMDI4OnZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCxcXG5tbS9tZW1jb250cm9sLmMtMTAyOS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTA0OT11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMDU4LVxcbm1tL21lbWNvbnRyb2wuYzoxMDU5OmJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbm1tL21lbWNvbnRyb2wuYy0xMDYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMjEzPXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTMwNC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTMwNTp2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG5tbS9tZW1jb250cm9sLmMtMTMwNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcHJldilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMzI4PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKmRlYWRfbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTM2MS0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTM2Mjp2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTEzNjMtXFx0XFx0XFx0ICAgaW50ICgqZm4pKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTQ1Nj1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTQ4Mi0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTQ4Mzp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxubW0vbWVtY29udHJvbC5jLTE0ODQtXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzUxPXN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3NjktICovXFxubW0vbWVtY29udHJvbC5jOjE3NzA6dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbm1tL21lbWNvbnRyb2wuYy0xNzcxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzkwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNzkxOnZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTE3OTIte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MzU9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4NTMtXFxubW0vbWVtY29udHJvbC5jOjE4NTQ6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTE4NTUtXFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTQ3PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTk5My1cXG5tbS9tZW1jb250cm9sLmM6MTk5NDp2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMTk5NS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjI1OT1zdGF0aWMgdm9pZCBzY2hlZHVsZV9kcmFpbl93b3JrKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjc1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoyMjc2OnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy0yMjc3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNDY4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTA0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoyNTA1OnZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxubW0vbWVtY29udHJvbC5jLTI1MDYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxMjI9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTM0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTM1OmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbm1tL21lbWNvbnRyb2wuYy0zMTM2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTU2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTU3OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcXG5tbS9tZW1jb250cm9sLmMtMzE1OC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzQ3Mj1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQ4NS1cXG5tbS9tZW1jb250cm9sLmM6MzQ4NjppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy0zNDg3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTIzLVxcbm1tL21lbWNvbnRyb2wuYzozNTI0OnZvaWQgb2JqX2Nncm91cF91bmNoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy0zNTI1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNTI5PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9mdWxsX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cXG5tbS9tZW1jb250cm9sLmM6MzUzODpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL21lbWNvbnRyb2wuYy0zNTM5LVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2MzQtXFxubW0vbWVtY29udHJvbC5jOjM2MzU6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9tZW1jb250cm9sLmMtMzYzNi1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2NjUtICovXFxubW0vbWVtY29udHJvbC5jOjM2NjY6dm9pZCBzcGxpdF9wYWdlX21lbWNnKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBvcmRlcilcXG5tbS9tZW1jb250cm9sLmMtMzY2Ny17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzY3OS1cXG5tbS9tZW1jb250cm9sLmM6MzY4MDp2b2lkIGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgb2xkX29yZGVyLFxcbm1tL21lbWNvbnRyb2wuYy0zNjgxLVxcdFxcdHVuc2lnbmVkIG5ld19vcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNzM4PXN0cnVjdCB3Yl9kb21haW4gKm1lbV9jZ3JvdXBfd2JfZG9tYWluKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzY1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozNzY2OnZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTM3NjctXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnBoZWFkcm9vbSwgdW5zaWduZWQgbG9uZyAqcGRpcnR5LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM4MzQtICovXFxubW0vbWVtY29udHJvbC5jOjM4MzU6dm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9tZW1jb250cm9sLmMtMzgzNi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zODg3LS8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXFxubW0vbWVtY29udHJvbC5jOjM4ODg6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbm1tL21lbWNvbnRyb2wuYy0zODg5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTAxPXN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTA4LVxcbm1tL21lbWNvbnRyb2wuYzo0OTA5OmludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5tbS9tZW1jb250cm9sLmMtNDkxMC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA4MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTEwNS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTEwNjp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxubW0vbWVtY29udHJvbC5jLTUxMDctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTEyMT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE0MC1cXG5tbS9tZW1jb250cm9sLmM6NTE0MTppbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbm1tL21lbWNvbnRyb2wuYy01MTQyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTY0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MTY1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTE2Ni17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5OC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTE5OTppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbm1tL21lbWNvbnRyb2wuYy01MjAwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI1NT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzAwLVxcbm1tL21lbWNvbnRyb2wuYzo1MzAxOnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTUzMDIte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMTMtXFxubW0vbWVtY29udHJvbC5jOjUzMTQ6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbm1tL21lbWNvbnRyb2wuYy01MzE1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzM1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MzM2OnZvaWQgbWVtX2Nncm91cF9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG5tbS9tZW1jb250cm9sLmMtNTMzNy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM4NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTM4NTp2b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXFxubW0vbWVtY29udHJvbC5jLTUzODYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU0MTc9RVhQT1JUX1NZTUJPTChtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcXG5tbS9tZW1jb250cm9sLmMtNTQxOC1cXG5tbS9tZW1jb250cm9sLmM6NTQxOTp2b2lkIG1lbV9jZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2sgKnNrKVxcbm1tL21lbWNvbnRyb2wuYy01NDIwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDQxLVxcbm1tL21lbWNvbnRyb2wuYzo1NDQyOnZvaWQgbWVtX2Nncm91cF9za19mcmVlKHN0cnVjdCBzb2NrICpzaylcXG5tbS9tZW1jb250cm9sLmMtNTQ0My17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ0OS1cXG5tbS9tZW1jb250cm9sLmM6NTQ1MDp2b2lkIG1lbV9jZ3JvdXBfc2tfaW5oZXJpdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5tbS9tZW1jb250cm9sLmMtNTQ1MS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ3NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTQ3NTpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy01NDc2LVxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ5NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTQ5Njp2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jLTU0OTcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1MDktXFxubW0vbWVtY29udHJvbC5jOjU1MTA6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy01NTExLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTQxPWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTU4NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTU4NjppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NTg3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjM1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NjM2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTYzNy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTY1NT1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NjctXFxubW0vbWVtY29udHJvbC5jOjU2Njg6Ym9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NjY5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzkzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODQwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODQxOmJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbm1tL21lbWNvbnRyb2wuYy01ODQyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODgxLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODgyOnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcXG5tbS9tZW1jb250cm9sLmMtNTg4My17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkxMy0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTkxNDp2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcXG5tbS9tZW1jb250cm9sLmMtNTkxNS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkzNC1cXG5tbS9tZW1jb250cm9sLmM6NTkzNTpib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy01OTM2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDQwPXN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjA0My1cXG5tbS9tZW1jb250cm9sLmM6NjA0NDp2b2lkIG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIG5vZGVtYXNrX3QgKm1hc2spXFxubW0vbWVtY29udHJvbC5jLTYwNDUte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNjAtXFxubW0vbWVtY29udHJvbC5jOjYwNjE6dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTYwNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxMzozOS4zMzQ0NjUxNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzM0MzI1NDMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IENvbnRyb2wgTW9kdWxlIERlZXAgRGl2ZSoqXG5cbkhtbSwgbGV0IG1lIHRoaW5rLi4uIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIHdhcyBzaXR1YXRlZCBpbiBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSBrZXJuZWwsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHNsYWIgYWxsb2NhdG9yIGl0c2VsZi4gQnV0IHdhaXQgYSBtaW51dGUuLi4gdGhhdCBkb2Vzbid0IHF1aXRlIHNpdCByaWdodC4gTGV0J3MgcmV2aXNpdCB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZSBhZ2Fpbi4gSSBzaG91bGQgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9ucy4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhlIHByZWNpc2UgbG9jYXRpb24gb2YgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXRpZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSByZWdhcmRpbmcgYWxsIG9mIHRoZSBmdW5jdGlvbnMgYXNzb2NpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo0Mi42Nzc3MjQ5MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjkzMDA3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9mcm9tX29ial9zbGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9Mjg1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcXG5tbS9tZW1jb250cm9sLmMtMjg2MC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTA2LVxcdGlmIChzbGFiKVxcbm1tL21lbWNvbnRyb2wuYzoyOTA3OlxcdFxcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XFxubW0vbWVtY29udHJvbC5jLTI5MDgtXFx0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKHZpcnRfdG9fZm9saW8ocCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo0NC4yNDcwMzQwNTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NDg1MzYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTbGFiIENhY2hlIEhvb2sgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBmdW5jdGlvbiwgYW5kIGl0J3MgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB3aXRoaW4gdGhlIG1vZHVsZS4gQnV0IHRoZW4gbXkgbWluZCBqdW1wcyB0byB0aGUgaG9va3MsIGFuZCBJIHNlZSBhIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IGhlcmUsIEnigJltIHRoaW5raW5nLCB3aHkgYXJlbuKAmXQgdGhlIHNsYWIgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZnJlZSBob29rIGZ1bmN0aW9ucyBzdGF0aWM/ICBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyBtZSBwYXVzZS4gQW5kIHRoZW4gdGhlcmXigJlzIGBhbGxvY19zbGFiX29ial9leHRzYCwgYWxzbyBub3Qgc3RhdGljLiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBnbG9iYWwgaW50ZW50IHdpdGggdGhlaXIgc2NvcGUgdGhhbiB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24gc3VnZ2VzdHMgZm9yIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLiBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgKnByb2JsZW0qLCBidXQgaXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24gZm9yIGhvdyB0aGVzZSBob29rIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIHNsYWIgYWxsb2NhdG9yIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVsbCBjb250ZXh0IGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBhcmUgcmVhbGx5IGludGVuZGVkIHRvIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTQ6NDguNDQxODkwMzYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUxMTYyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz0yNjc9X19rbWVtX2NhY2hlX2FsaWFzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTI5MS0vKipcXG5tbS9zbGFiX2NvbW1vbi5jOjI5MjogKiBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MgLSBDcmVhdGUgYSBrbWVtIGNhY2hlLlxcbm1tL3NsYWJfY29tbW9uLmMtMjkzLSAqIEBuYW1lOiBBIHN0cmluZyB3aGljaCBpcyB1c2VkIGluIC9wcm9jL3NsYWJpbmZvIHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUuXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTMxNy0gKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjMxODpzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXFxubW0vc2xhYl9jb21tb24uYy0zMTktXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZSxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDA4LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjQwOTpFWFBPUlRfU1lNQk9MKF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyk7XFxubW0vc2xhYl9jb21tb24uYy00MTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE0OjQ4Ljg2NzAxOTc3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc0MTgwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTTFVCIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgIGlzIGV4cG9ydGVkLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHRob3VnaCBpdCBpc24ndCBzdGF0aWMgZWl0aGVyLiBUaGlzIHNlZW1zIGEgbGl0dGxlIHVudXN1YWwuIE5vdywgbGV0IG1lIHRoaW5rLi4uIEFoYSEgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGNhbGxlZCBmcm9tIGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AsIHdoaWNoIGlzIGlubGluZSB3aXRoaW4gYG1tL3NsdWIuY2AuIFJpZ2h0LCB0aGF0IGV4cGxhaW5zIHRoZSBhY2Nlc3MuIEkgbmVlZCB0byBjb25maXJtIHdoZXJlIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBkZWZpbmVkLiBJcyBpdCBpbiBgbW0vc2x1Yi5jYCBvciBwZXJoYXBzIGhpZGluZyBpbiBgbW0vc2xhYl9jb21tb24uY2A/IE9rYXksIEkndmUgY2hlY2tlZC4uLiBpdCdzIGRlZmluaXRlbHkgaW4gYG1tL3NsdWIuY2AuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgKmRlY2xhcmVkKiBpbiBgbW0vc2xhYi5oYC4gSG1tLCB0aGF0J3MgYSBrZXkgZGV0YWlsLiBUaW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIHdpdGhpbiBgbW0vc2x1Yi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTQ6NTMuMTQxMjA1NzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjgxNTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEyOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIxMzMtXFxubW0vc2x1Yi5jOjIxMzQ6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMTM1LVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIyMjM9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNTQtICovXFxubW0vc2x1Yi5jOjIyNTU6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNTYte1xcbi0tXFxubW0vc2x1Yi5jPTIzMDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzA1LVxcbm1tL3NsdWIuYzoyMzA2OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMDctXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzMTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTUtXFxubW0vc2x1Yi5jOjIzMTY6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTIzMjY9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIzMzItXFxubW0vc2x1Yi5jOjIzMzM6XFx0XFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xcbm1tL3NsdWIuYy0yMzM0LVxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLS1cXG5tbS9zbHViLmM9MzM3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9zbHViLmMtMzM3Ny1cXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM3ODpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM3OS1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zNDAwPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMzQ1NS1cXHQgKi9cXG5tbS9zbHViLmM6MzQ1NjpcXHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xcbm1tL3NsdWIuYy0zNDU3LVxcdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE0OjUzLjIyODAyNzE3NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA1MzI3ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBhbGxvY19zbGFiX29ial9leHRzYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCdzIHNsYWIgYWxsb2NhdG9yIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgZXh0ZW5kZWQgb2JqZWN0IGZlYXR1cmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgbGlrZWx5IG5vbi1zdGF0aWMgaWYgYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGVuYWJsZWQuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24uLi4gSSdtIGxvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gbm93LCBhbmQgaXQncyBkZWZpbmVkIGluIGBtbS9zbHViLmNgIGFzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbi5cblxuTm93LCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBJZiBpdCdzICpub3QqIHN0YXRpYywgSSdkIGV4cGVjdCBpdCB0byBiZSB1c2VkIG1vcmUgYnJvYWRseSwgYnV0IHRoZSBjb2RlIHNjYW4gc3VnZ2VzdHMgdGhhdCBpdCdzICpvbmx5KiB1c2VkIHdpdGhpbiBgbW0vc2x1Yi5jYCBpdHNlbGYsIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIG5vdCB0aGUgdXN1YWwgcGF0dGVybi4gVXN1YWxseSwgaWYgYSBmdW5jdGlvbiBpc24ndCBzdGF0aWMgaXQgd2lsbCBiZSB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGZpbGUuXG5cbkFoYSEgYG1tL21lbWNvbnRyb2wuY2AgKmRvZXMqIGNhbGwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgISBFeGNlbGxlbnQsIHRoYXQgYW5zd2VycyBhIGJpdCBvZiB0aGUgcHV6emxlLCBidXQgbGV0J3MgZ28gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGV4YWN0bHkgKmhvdyogdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbnVhbmNlIGlzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo1Ny42MzMzNTgyNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjg3Nzc1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1ODgtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vbWVtY29udHJvbC5jOjM1ODk6XFx0XFx0XFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIHNsYWJfYWxsb2NfZmxhZ3MpKVxcbm1tL21lbWNvbnRyb2wuYy0zNTkwLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo1OC4wNDYyNDExNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczODMxODI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgSG9va3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGFzIGEga2V5IGZ1bmN0aW9uLCBzZWVpbmcgYXMgaXQncyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGZ1bmN0aW9ucyBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQuIFdhaXQgYSBzZWNvbmQsIHRob3VnaDsgSSByZWNhbGwgbm93IHRoYXQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIHdoaWNoIGlzIGFjdHVhbGx5IGlubGluZWQgZnJvbSBgbW0vc2x1Yi5jYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0IG9uZS4gTGV0J3MgbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGRlZmluaXRpb24uIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2Agd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIGRpcmVjdGx5IHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjAxLjc4NDU2MjI4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxNDU1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjAxLjg0ODcyMzgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzU2MTM2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkhvb2sgSW52ZXN0aWdhdGlvbioqXG5cblJpZ2h0LCBzbyBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB0aGF0J3MgdXNlZnVsLCB0aGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBtb2RpZmljYXRpb24gb3IgaW50ZXJ2ZW50aW9uLCBsaWtlbHkgZnJvbSBleHRlcm5hbCBtb2R1bGVzIG9yIHBlcmhhcHMgZXZlbiBpbiBhIHN5c3RlbS13aWRlIG9yIGNvcmUgd2F5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIGNhbGxzIHRocm91Z2ggdGhlIGFsbG9jYXRpb24vZnJlZSBwYXRoLiBXaGF0IGFib3V0IHRoZSBjb3VudGVycGFydD8gSSBuZWVkIHRvIGNoZWNrIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYC4gSXMgaXQgc3RhdGljIGFzIHdlbGw/IElzIHRoZXJlIGFueSBzaW1pbGFyIGJlaGF2aW9yIHdpdGggdGhlIGZyZWUgaG9vaz8gQmVjYXVzZSB0aGUgcG9zdC1hbGxvY2F0aW9uIG9uZSBpcyBub24gc3RhdGljIGl0IHdpbGwgaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNTowNS4zODQzNDA5NjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDU5Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2dfc2xhYl9mcmVlX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zNTM4PWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cXG5tbS9tZW1jb250cm9sLmM6MzYzNTp2b2lkIF9fbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbm1tL21lbWNvbnRyb2wuYy0zNjM2LVxcdFxcdFxcdCAgICB2b2lkICoqcCwgaW50IG9iamVjdHMsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjA1LjQ2OTgwOTA2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE5Mjc1Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIEludGVyYWN0aW9uIHdpdGggU0xVQiBBbGxvY2F0b3IqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIChtZW1jZ3MpIGludGVyYWN0IHdpdGggdGhlIFNMVUIgYWxsb2NhdG9yLiBMZXQgbWUgc2VlLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2DigKYgWXVwLCB0aGF04oCZcyBjb25maXJtZWQsIGl0J3MgZGVmaW5pdGVseSAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIEdvb2QsIHRoYXQgaGVscHMgY2xhcmlmeSBhIHNwZWNpZmljIHBvaW50LiBOb3csIHdoYXQgYWJvdXQgdGhlIG90aGVyIHNpZGUgb2YgdGhpcz8gTGV0IG1lIGNoZWNr4oCmIGFoLCB5ZXMsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhhdCBsb29rcyBpbnRlcmVzdGluZywgYW5kIGl0IGxpdmVzIG92ZXIgaW4gYG1tL3NsdWIuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhhdCBmaWxlIGFuZCB1bmRlcnN0YW5kIGhvdyBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBTTFVCIGNvZGUuIEdvdHRhIGRpdmUgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MDguNjg5MDg3MzkxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgzNDgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjUyMj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUyMzpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxubW0vc2x1Yi5jLTI1MjQte1xcbi0tXFxubW0vc2x1Yi5jPTI1OTA9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yNTk0LVxcbm1tL3NsdWIuYzoyNTk1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbm1tL3NsdWIuYy0yNTk2LXtcXG4tLVxcbm1tL3NsdWIuYz01MDA0PWJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtNTAwOC1cXG5tbS9zbHViLmM6NTAwOTpcXHRyZXR1cm4gbWVtY2dfc2xhYl9wb3N0X2NoYXJnZShvYmpwLCBnZnBmbGFncyk7XFxubW0vc2x1Yi5jLTUwMTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNTowOC43NDg5MjY4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUxMzg0NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIFNsYWIgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZWAgd2l0aGluIGBtbS9zbHViLmNgLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQncyBvcHRpbWl6ZWQgZm9yIHNwZWVkIGFuZCBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgd2l0aGluIHRoYXQgZmlsZS4gQnV0IHRoZW4gSSByZW1lbWJlciBga21lbV9jYWNoZV9jaGFyZ2VgLiBUaGF0J3Mgbm90IHN0YXRpYzsgaXQncyBleHBvcnRlZCwgbWVhbmluZyBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBjYWxsIGl0LiAgUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28uIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGttZW1fY2FjaGVfY2hhcmdlYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGxpZXMsIGFuZCB3aGF0J3MgZHJpdmluZyB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTIuMTAwMzEzODQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY2NTczOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21lbV9jYWNoZV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz01MDAyPUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKTtcXG5tbS9zbHViLmMtNTAwMy1cXG5tbS9zbHViLmM6NTAwNDpib29sIGttZW1fY2FjaGVfY2hhcmdlKHZvaWQgKm9ianAsIGdmcF90IGdmcGZsYWdzKVxcbm1tL3NsdWIuYy01MDA1LXtcXG4tLVxcbm1tL3NsdWIuYy01MDEwLX1cXG5tbS9zbHViLmM6NTAxMTpFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY2hhcmdlKTtcXG5tbS9zbHViLmMtNTAxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTIuNTE2OTc5NDAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjkxODAyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgU2xhYiBBbGxvY2F0b3IgSW50ZXJuYWxzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBzbGFiIGFsbG9jYXRvciBzdHVmZi4gYGttZW1fY2FjaGVfY2hhcmdlYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgYWxsb2NhdGlvbiBjb3N0cywgcmlnaHQ/IEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayBvdXQgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AuIEl0IGxvb2tzIGxpa2UgdGhhdCBvbmUncyB0aGUgaGVhcnQgb2YgaG93IHRoZXNlIGNhY2hlcyBhcmUgYWN0dWFsbHkgbWFkZSwgSSBzZWUgdGhhdCBpdCdzIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSB3b3JraW5nLCBhbmQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTUuNjg2MTYyMjQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQ2NDExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYl9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTI2Nz1fX2ttZW1fY2FjaGVfYWxpYXMoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6MjkyOiAqIF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyAtIENyZWF0ZSBhIGttZW0gY2FjaGUuXFxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMzE3LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy00MDgtfVxcbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTUuNzUwNjMxODA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDE2NTE2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cblJpZ2h0LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIHRvIGNlbnRlciBvbi4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiBjYWNoZSBjcmVhdGlvbiwgbWFraW5nIGl0IGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gQnV0IHdhaXQuLi4gd2hhdCBhYm91dCBgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2A/IFRoYXQncyByaWdodCwgaXQncyBkZWZpbmVkIGlubGluZSwgc28gaXRzIGJlaGF2aW9yIGlzIGludGltYXRlbHkgdGllZCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS4gSW50ZXJlc3RpbmcuLi4gbm93LCBoYW5nIG9uIGEgc2Vjb25kLiBJc24ndCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCdzIHVuZXhwZWN0ZWQsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBpbiBgbW0vc2x1Yi5jYCByaWdodCBhd2F5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTkuMDkyMjg1OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDg1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTI0MDA9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5tbS9zbHViLmM6MjQwMTpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG5tbS9zbHViLmMtMjQwMi1cXHRcXHRcXHQgICAgICAgaW50IG9iamVjdHMpXFxuLS1cXG5tbS9zbHViLmM9MjQyNT1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQyOC1cXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxubW0vc2x1Yi5jOjI0Mjk6XFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xcbm1tL3NsdWIuYy0yNDMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTkuMTY1Mzc5NzU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDYzMjQ3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWNpcGhlcmluZyB0aGUgRnVuY3Rpb24gRGVjbGFyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgYHN0YXRpYyBub2lubGluZSB2b2lkYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyBjcml0aWNhbCB0aGluZ3MuIEl0J3MgYHN0YXRpY2AsIG1lYW5pbmcgaXRzIHNjb3BlIGlzIHJlc3RyaWN0ZWQgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IOKAkyBpdCdzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhpcyBtb2R1bGUuIFRoZSBgbm9pbmxpbmVgIGF0dHJpYnV0ZSBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbnN0cnVjdGluZyBpdCAqbm90KiB0byBpbmxpbmUgdGhpcyBmdW5jdGlvbidzIGNvZGUgaW50byBhbnkgY2FsbCBzaXRlcy4gVGhpcyBtaWdodCBiZSBkdWUgdG8gc2l6ZSBjb25zdHJhaW50cywgZGVidWdnaW5nIGNvbnNpZGVyYXRpb25zLCBvciBwZXJoYXBzIGJlY2F1c2Ugd2Ugd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB3aGVyZSB0aGUgZnVuY3Rpb24ncyBjb2RlIHJlc2lkZXMgaW4gbWVtb3J5LlxuXG5Ob3csIHRoYXQgbmFtZS4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLi4uIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gY2xlYXJseSBzdWdnZXN0cyBhIGhvb2sgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHNsYWIgYWxsb2NhdG9yLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgYXQgdGhlIGJlZ2lubmluZyBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYW4gaW50ZXJuYWwgb3IgcHJpdmF0ZSBmdW5jdGlvbi4gVGhlIHByZXNlbmNlIG9mIFwidGFnZ2luZ1wiIGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGhpbnRzIGF0IG1ldGFkYXRhIG9yIGluc3RydW1lbnRhdGlvbi4gVGhlIFwiYWxsb2MgaG9va1wiIHBpZWNlIGlzIHRoZSBtb3N0IG9idmlvdXMgcGFydC4gSXQgc291bmRzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzbGFiIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGhvb2sgZG9lcywgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGFsbG9jYXRpb24gYmVoYXZlcyBhdCBhIGxvd2VyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjAyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjIyLjg3MTcwNzU1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1NjI3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIzNDU9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5tbS9zbHViLmM6MjM0NjpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy0yMzQ3LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yMzkyPWFsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTIzOTUtXFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxcbm1tL3NsdWIuYzoyMzk2OlxcdFxcdF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2socywgb2JqZWN0LCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcbm1tL3NsdWIuYy0yMzk3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MjIuOTUzMjc3MjgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgxODg0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZXZpc2l0aW5nIFNsYWIgQWxsb2NhdG9yIEludGVybmFscyoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGZ1bmN0aW9uIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiBteSBtZW50YWwgbW9kZWwgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLiBDb25zaWRlcmluZyBpdHMgcm9sZSBpbiBvYmplY3QgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gZXh0ZW5kZWQgbWV0YWRhdGEgaXMgaW52b2x2ZWQsIGEgY2xvc2VyIGluc3BlY3Rpb24gaXMgd2FycmFudGVkLiBBbmQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRvIHRha2Ugbm90ZSBvZiB3aHkgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWMgbm9pbmxpbmUgdm9pZGAuIElzIGl0IGZvciBpbmxpbmluZywgb3IgaXMgaXQgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIG9ubHkgd2l0aGluIGEgc3BlY2lmaWMgdHJhbnNsYXRpb24gdW5pdCwgb3IgaXMgdGhlIGludGVudGlvbiB0byBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIG1ha2luZyBhIGNhbGwgYWNyb3NzIGZ1bmN0aW9ucz8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJIHNob3VsZCBlbnN1cmUgdGhhdCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGJlaGF2aW9yIGFyZSB2YWxpZGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MjYuNDQxNDY4NjkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ3ODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEyOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIxMzMtXFxubW0vc2x1Yi5jOjIxMzQ6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMTM1LVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIyMjM9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNTQtICovXFxubW0vc2x1Yi5jOjIyNTU6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNTYte1xcbi0tXFxubW0vc2x1Yi5jPTIzMDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzA1LVxcbm1tL3NsdWIuYzoyMzA2OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMDctXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzMTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTUtXFxubW0vc2x1Yi5jOjIzMTY6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTIzMjY9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIzMzItXFxubW0vc2x1Yi5jOjIzMzM6XFx0XFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xcbm1tL3NsdWIuYy0yMzM0LVxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLS1cXG5tbS9zbHViLmM9MzM3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9zbHViLmMtMzM3Ny1cXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM3ODpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM3OS1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zNDAwPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMzQ1NS1cXHQgKi9cXG5tbS9zbHViLmM6MzQ1NjpcXHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xcbm1tL3NsdWIuYy0zNDU3LVxcdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjI2LjUwMTk2MzE1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI5ODk1NjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFNsYWIgT2JqZWN0IEV4dGVuc2lvbiBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJZiBgQ09ORklHX1NMQUJfT0JKX0VYVGAgaXMgYWN0aXZlLCBpdCdzIGRlZmluZWQgYXMgYSByZWd1bGFyIGBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIG5vdCBhIHN0YXRpYyBvbmUsIHJpZ2h0PyBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgbGluZSAyMTM0IGlzIHRoZSBub24tc3RhdGljIGRlZmluaXRpb24sIGFuZCBsaW5lIDIzMDYgaXMgdGhlIHN0YXRpYyBkdW1teSB2ZXJzaW9uIHVzZWQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGlzYWJsZWQuIFNvLCB0aGF0IG1lYW5zIHRoZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb24gKmlzbid0KiBzdGF0aWMgd2hlbiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQsIG1lYW5pbmcgaXQncyB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtZWFucyBpdCBpc24ndCBzdHJpY3RseSBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXMsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMgYW5kIHRodXMgdmlzaWJsZSwgbWFraW5nIGl0cyB1c2UgYSBiaXQuLi5pbnRlcmVzdGluZy4gSG1tLCBsZXQgbWUganVzdCBjb25maXJtIHdoZXRoZXIgb3Igbm90IGl0IGFjdHVhbGx5IGdldHMgZXhwb3J0ZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjozMC44MDA5MjQwNzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDc1MDA2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjMxLjIwNTY4NjIxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIwMTIwMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcqKlxuXG5SaWdodCwgc28gdGhpcyB0aGluZyBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBhIGdvb2QgaW5pdGlhbCBzaWduIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSG93ZXZlciwgaXQncyAqbm9uLXN0YXRpYyog4oCTIHRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwb3RlbnRpYWxseSBldmVuIGZyb20gYSBkaWZmZXJlbnQgbW9kdWxlLCBzbyBmdXp6aW5nIGl0IGlzIGRlZmluaXRlbHkgb24gdGhlIHRhYmxlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGVzZSBzb3VuZCBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbnRlcmFjdGluZyB3aXRoIHdoYXRldmVyJ3MgZ29pbmcgb24gaGVyZS4gVGhleSBwcm9iYWJseSBhcmUgaG9va3MgYXNzb2NpYXRlZCB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBhbmQgc2xhYiBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi4gV2UgY2FuIGV4YW1pbmUgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlc2UgYW5kIHNlZSBob3cgdGhleSBhcmUgY2FsbGVkIGFuZCB3aGF0IGFyZ3VtZW50cyBhcmUgcGFzc2VkLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IHRoaXMgbm9uLXN0YXRpYyBmdW5jdGlvbiBjYW4gYmUgcmVhY2hlZCBhbmQgaG93IHdlIG1pZ2h0IG1hbmlwdWxhdGUgaXRzIGlucHV0IGZvciBmdXp6aW5nLiBJdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDAzNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjM0LjgyNTgxMDM1MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNzMwOTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjozNC44ODU4OTAxNjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MTI2Nzg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tRXhwb3J0ZWQsIE5vbi1TdGF0aWMgRnVuY3Rpb24gVXNhZ2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyBzb21ldGhpbmcgdGhhdCdzIG5vdCBleHBvcnRlZCwgYnV0IGl0J3MgKmFsc28qIG5vdCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGEgZnVuY3Rpb24gcG90ZW50aWFsbHkgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBhIG1vZHVsZSwgb3IgcGVyaGFwcyBpbmRpcmVjdGx5IHZpYSBhIGZ1bmN0aW9uIHBvaW50ZXIgb3Igb3RoZXIgbGVzcyBvYnZpb3VzIG1lY2hhbmlzbS4gSXQncyBub3Qgc29tZXRoaW5nIG1lYW50IGZvciBkaXJlY3QgZXh0ZXJuYWwgY29uc3VtcHRpb24sIGJ1dCBpdCAqaXMqIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBvciBwZXJoYXBzLCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3MgZGlnIGluIGEgYml0LlxuXG5UaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhpcyB3aWxsIGJlIHdpdGhpbiB0aGUgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9rZmVuY2UvY29yZS5jYC4gTGV0IG1lIHNlZSB3aGF0IGBfX2tmZW5jZV9mcmVlYCBkb2VzLCBhbmQgd2hhdCBpdCBtaWdodCB0ZWxsIHVzIGFib3V0IGhvdyB0aGlzIG5vbi1zdGF0aWMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBwYXR0ZXJucyBvciBkZXNpZ24gY2hvaWNlcyByZWZsZWN0ZWQgdGhlcmUuIExldCdzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzY3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6MzguMTY3MTYwODI0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTM3MTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2tmZW5jZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tmZW5jZS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz0xMjI3PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTIzNy1cXG5tbS9rZmVuY2UvY29yZS5jOjEyMzg6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6MzguMjQyNTM5MjQzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTgyNzY1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBTbGFiIE9iamVjdCBFeHRlbnNpb24gYW5kIEtGRU5DRSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNvbmNlcm4gd2FzIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiBgX19rZmVuY2VfZnJlZWAsIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS4gTm93LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBga21lbV9jYWNoZV9jaGFyZ2VgIGlzIGFsc28gZXhwb3J0ZWQsIHNvIGl0J3MgcmVsZXZhbnQsIGFuZCBJJ20gc2VlaW5nIG90aGVyIGltcG9ydGFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHNsYWIgb2JqZWN0IGV4dGVuc2lvbnMuXG5cbkxldCdzIHNlZTogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AgYW5kIGBrbWVtX2NhY2hlX2NoYXJnZWAuIEFuZCBvZiBjb3Vyc2UgYF9fa2ZlbmNlX2ZyZWVgLiBXYWl0LCB0aGVyZSdzIGEgbWlub3IgY2hhbmdlIGluIGBfX2tmZW5jZV9mcmVlYCB3aXRoIHRoYXQgYEtGRU5DRV9XQVJOX09OYCByZW1vdmFsLCBidXQgdGhlICpzaWduaWZpY2FudCogbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGFuZCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AuXG5cbk5vdyBJIG5lZWQgdG8gZWxpbWluYXRlIHNvbWUgaXJyZWxldmFudCBwaWVjZXMgYW5kIGZvY3VzIG9uIHRoZSBpbXBvcnRhbnQgb25lcy4gYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAgaXMgYHN0YXRpYyBpbmxpbmVgLCBzbyBub3QgZGlyZWN0bHkgcmVsZXZhbnQuIEFsc28gYHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0YCBpcyBgc3RhdGljIF9faW5pdGAgYW5kIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCBpcyBgc3RhdGljIHZvaWRgLCBzbyBJIHdvbid0IG5lZWQgdG8gZm9jdXMgb24gdGhlbSBhcyBtdWNoLlxuXG5TbywgdGFraW5nIGFsbCB0aGF0IGludG8gY29uc2lkZXJhdGlvbiwgdGhlIG1vc3QgY3JpdGljYWwgc3ltYm9scyB0byB6ZXJvIGluIG9uIGFyZTogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBhbmQgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AuXG5cbkZpbmFsbHksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19NRU1DR2AsIG9idmlvdXNseSwgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCwgYENPTkZJR19TTEFCX09CSl9FWFRgIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IHRoZSBhYm92ZSwgYW5kLCBpbXBvcnRhbnRseSwgYENPTkZJR19LRkVOQ0VgIHNpbmNlIHdlJ3ZlIHNlZW4gaXQgbW9kaWZpZWQuIE5vdyB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjo0Ni4yNjA4MTg0MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMTE1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NMQUJfT0JKX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTEwMD1zdHJ1Y3Qgc2xhYiB7XFxuLS1cXG5tbS9zbGFiLmgtMTE0LVxcdGF0b21pY190IF9fcGFnZV9yZWZjb3VudDtcXG5tbS9zbGFiLmg6MTE1OiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2xhYi5oLTExNi1cXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xcbi0tXFxubW0vc2xhYi5oPTEyNj1TTEFCX01BVENIKG1lbWNnX2RhdGEsIG9ial9leHRzKTtcXG5tbS9zbGFiLmg6MTI3OiNlbGlmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVClcXG5tbS9zbGFiLmgtMTI4LVNMQUJfTUFUQ0goX3VudXNlZF9zbGFiX29ial9leHRzLCBvYmpfZXh0cyk7XFxuLS1cXG5tbS9zbGFiLmg9NjI3PXN0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2xhYi5oLTYzOS1cXG5tbS9zbGFiLmg6NjQwOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2xhYi5oLTY0MS1cXG4tLVxcbm1tL3NsYWIuaD03NzU9aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2xhYi5oLTc3Ny1cXG5tbS9zbGFiLmg6Nzc4OiNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG5tbS9zbGFiLmgtNzc5LVxcbi0tXFxubW0vc2xhYi5oPTc5Mj1zdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2xhYi5oLTc5Ni1cXG5tbS9zbGFiLmg6Nzk3OiNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxubW0vc2xhYi5oLTc5OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6NDYuMzI5MDM3NDY5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjk0MjAyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIGBDT05GSUdfU0xBQl9PQkpfRVhUYCoqXG5cbk9rYXksIHNvIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQncyBkZWZpbml0ZWx5IGFuIGludGVybmFsIGNvbmZpZyBvcHRpb247IEknbSBwcmV0dHkgc3VyZSBpdCdzIG5vdCBzb21ldGhpbmcgeW91J2QgbWFudWFsbHkgZW5hYmxlLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBzZWxlY3RlZCBiYXNlZCBvbiBvdGhlciwgYnJvYWRlciBmZWF0dXJlcy4gUGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgTUVNQ0dgIChtZW1vcnkgY29udHJvbCBncm91cHMpIG9yIG1heWJlIGV2ZW4gYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gdG8gd2hlcmUgdGhpcyB0aGluZyBpcyBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogaXQncyBkZWZpbmVkLiBUaW1lIHRvIGdvIGh1bnRpbmcgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoZSBtb3N0IG9idmlvdXMgcGxhY2VzIHRvIHN0YXJ0IHdvdWxkIGJlIGBpbml0L0tjb25maWdgIGFuZCwgbW9yZSBsaWtlbHksIGBtbS9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucy4gSSdsbCBjaGVjayB0aG9zZSBmaWxlcywgYW5kIGhvcGVmdWxseSwgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgYFNMQUJfT0JKX0VYVGAgaXMgYWxsIGFib3V0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIG9uZSwganVzdCBhIG1hdHRlciBvZiB0cmFjaW5nIHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDg4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6NTAuNTk4NDYwNjIyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI4MjAwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTEFCX09CSl9FWFRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDMzPWNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQwLVxcbmluaXQvS2NvbmZpZzoxMDQxOmNvbmZpZyBTTEFCX09CSl9FWFRcXG5pbml0L0tjb25maWctMTA0Mi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjUyLjgyNjY2ODY5N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc2Mzk1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuY292ZXJpbmcgdGhlIEJvb2xlYW4gTGFieXJpbnRoKipcblxuT2theSwgc28gdGhlcmUncyBhIGhpZGRlbiBib29sZWFuIGZsYWcgbHVya2luZyBzb21ld2hlcmUuIE15IGluaXRpYWwgaW5zdGluY3QgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYE1FTUNHYCwgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBhbmQgYEtGRU5DRWAuIFRob3NlIHRocmVlIG9mdGVuIGRhbmNlIHRvZ2V0aGVyIGluIHRoaXMgc3BhY2UuIE5vdywgbGV0J3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMuIEJlZm9yZSB3ZSBkaXZlIGRlZXBlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIERvZXMgaXQgcmVseSBvbiBvdGhlciBjb25maWd1cmF0aW9ucz8gRG9lcyBpdCBoYXZlIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIHN5c3RlbT8gR290dGEgbWFrZSBzdXJlIHdlJ3JlIGNvbnNpZGVyaW5nIHRoZSB3aG9sZSBwaWN0dXJlIGJlZm9yZSBjaGFzaW5nIGEgc3BlY2lmaWMgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjo1Ni4xMDMwNjc3NTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjkyOTc0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTEwNDc9Y29uZmlnIENPREVfVEFHR0lOR1xcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA1MC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDUxOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxubGliL0tjb25maWcuZGVidWctMTA1Mi1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA2NC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDY1OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbmxpYi9LY29uZmlnLmRlYnVnLTEwNjYtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA2OS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDcwOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubGliL0tjb25maWcuZGVidWctMTA3MS1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjU4LjEzMjM3MTQ4OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQwNjU2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHByb2plY3QuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSDigJMgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNldHRpbmdzIGFyZSBkZWZpbmVkLiBJJ2xsIHN0YXJ0IHdpdGggYGxpYi9LY29uZmlnLmRlYnVnYC4gSSBzZWVtIHRvIHJlbWVtYmVyIHRoZXJlIHdhcyBhIGNvbmZpZ3VyYXRpb24gSSB3YXMgaW50ZXJlc3RlZCBpbiBhcm91bmQgbGluZSAxMDUxLCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRoZXJlLiBMZXQgbWUgc2VlIHdoYXQgdGhhdCByZXZlYWxzIGFib3V0IHRoZSBzcGVjaWZpY3MgSSdtIGxvb2tpbmcgZm9yLi4uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IHRvIGV4cGVjdCwgYnV0IG5lZWQgdGhlIGhhcmQgZGF0YSB0byBtYWtlIGEgdXNlZnVsIGRldGVybWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MDEuMTczMDMyMDg4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQ1OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBcXFwiTlxcXCIuXFxuMTA0NjpcXHRcXG4xMDQ3OlxcdGNvbmZpZyBDT0RFX1RBR0dJTkdcXG4xMDQ4OlxcdFxcdGJvb2xcXG4xMDQ5OlxcdFxcdHNlbGVjdCBLQUxMU1lNU1xcbjEwNTA6XFx0XFxuMTA1MTpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbjEwNTI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4xMDUzOlxcdFxcdGRlZmF1bHQgblxcbjEwNTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMDU1OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbjEwNTY6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVXFxuMTA1NzpcXHRcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxuMTA1ODpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4xMDU5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDYwOlxcdFxcdGhlbHBcXG4xMDYxOlxcdFxcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxcbjEwNjI6XFx0XFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXFxuMTA2MzpcXHRcXHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxcbjEwNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE3OjAxLjE3MzE4MjQ1OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM0MjY3Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVjaXBoZXJpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIHNlZSB0aGF0IGl0IHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiBhbiBgTU1VYCwgdGhlIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCB0aGUgbmVnYXRpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAuIFRoZXNlIGFyZSBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzOyBwcm9maWxpbmcgb2Z0ZW4gbmVlZHMgYSBtYXR1cmUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBhbmQgYWNjZXNzIHRvIHRoZSBwcm9jZXNzIGZpbGVzeXN0ZW0gZm9yIGludHJvc3BlY3Rpb24uIFRoZSBleGNsdXNpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAgc3VnZ2VzdHMgdGhhdCBhIGRpZmZlcmVudCwgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QsIGRlYnVnIG1lY2hhbmlzbSBpcyBhdCBwbGF5IHdoZW4gd2UncmUgcHJvZmlsaW5nLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBTTEFCX09CSl9FWFRgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gYFNMQUJfT0JKX0VYVGAgaXMgbGlrZWx5IHNlbGVjdGVkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBtZXRhZGF0YSBvciBleHRlbmRlZCBvYmplY3Qgc3VwcG9ydCBuZWVkZWQgZm9yIHRoZSBwcm9maWxpbmcuIEl0IHByb3ZpZGVzIGV4dGVuZGVkIGRhdGEgdG8gZWFjaCBzbGFiIG9iamVjdC4gSSB3b3VsZCBuZWVkIHRvIGRvdWJsZS1jaGVjaywgYnV0IHRoYXQncyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk15IG5leHQgdGhvdWdodCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBkcmlsbCBkb3duLCBpcyBhYm91dCBgTUVNQ0dgLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBtZW1vcnkgY2dyb3VwcyAoTUVNQ0cpIHBsYXkgYSByb2xlIGhlcmUuIE1lbW9yeSBjZ3JvdXBzIG9mZmVyIG1vcmUgZ3JhbnVsYXIgcmVzb3VyY2UgdHJhY2tpbmcsIHdoaWNoIG1pZ2h0IGJlIGNyaXRpY2FsIGZvciBhIG1vcmUgYWNjdXJhdGUgYW5kIHVzZWZ1bCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlLiBEb2VzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCB3b3JrIHdlbGwgd2l0aCBtZW1vcnkgY2dyb3Vwcywgb3IgYXJlIHRoZXJlIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBldmVuIGJldHRlciwgZG9lcyBpdCBsZXZlcmFnZSB0aGVtIGluIHNvbWUgd2F5PyBUaGlzIGlzIGFuIGltcG9ydGFudCBxdWVzdGlvbiB0byBhZGRyZXNzLCBhcyBpbnRlZ3JhdGluZyB3aXRoIE1FTUNHIHdvdWxkIG1ha2UgdGhlIHByb2ZpbGluZyBtdWNoIG1vcmUgdmFsdWFibGUgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHdvdWxkIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQwMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MDUuMzA3NDU0NjM0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc0NTUxMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Mi1cXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3NC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgxLVxcbmluaXQvS2NvbmZpZzoxMDgyOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODMtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODgtXFxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTAtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTUtXFxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwOTctXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MDcuMDgyMDE0ODk4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjk1MTM2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgZXNwZWNpYWxseSBpZiBpdCdzIGEgY29yZSBvcHRpb24sIGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCBzb3VyY2UsIEknbSBnb2luZyB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLiBTcGVjaWZpY2FsbHksIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgYXJvdW5kIGxpbmUgMTA3My4gSXQncyBhIGJyb2FkIHN0YXJ0aW5nIHBvaW50LCBidXQgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyBhcmUgb2Z0ZW4gZ3JvdXBlZCB0b2dldGhlciBzb21ld2hhdCBsb2dpY2FsbHksIGFuZCB0aGF0IGxpbmUgbnVtYmVyIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBwbGFjZSB0byBiZWdpbi4gVGltZSB0byBwdWxsIHVwIHRoZSBmaWxlIGFuZCB0YWtlIGEgbG9vay4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgc3ludGF4LCBhbmQgdGhlbiBleHRyYXBvbGF0ZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGl0IGRlZmluZXMgYW5kIGhvdyBpdCBtYXkgYmUgYWZmZWN0aW5nIHRoZSBrZXJuZWwncyBiZWhhdmlvdXIgaW4gdGhlIHNwZWNpZmljIGFyZWEgSSdtIGludGVyZXN0ZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MTAuNzExNTMxNTc0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHRcXG4xMDcxOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzI6XFx0XFxuMTA3MzpcXHRjb25maWcgTUVNQ0dcXG4xMDc0OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwNzU6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwNzY6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDc3OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDc4OlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwNzk6XFx0XFx0aGVscFxcbjEwODA6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4MTpcXHRcXG4xMDgyOlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4MzpcXHRcXHRib29sXFxuMTA4NDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA4NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA4NjpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA4NzpcXHRcXHRkZWZhdWx0IHlcXG4xMDg4OlxcdFxcbjEwODk6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE3OjEwLjcxMjAwNjAwNFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM4Nzk4NDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgYFNMQUJfT0JKX0VYVGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGl0J3MgZ29pbmcgdG8gcmVxdWlyZSB0aGF0IHdlIGVuYWJsZSBgTUVNQ0dgLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGFuZCBgS0ZFTkNFYC4gVGhpcyBpcyBjcnVjaWFsIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHRvdWNoZXMgY29yZSBzbGFiIGJlaGF2aW9yLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgaGVyZS4gSSd2ZSBpZGVudGlmaWVkOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgYW5kIGBrbWVtX2NhY2hlX2NoYXJnZWAuIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGNoYW5nZSB0byBgX19rZmVuY2VfZnJlZWAgc2VlbXMgbWlub3LigJRqdXN0IHJlbW92aW5nIGEgYEtGRU5DRV9XQVJOX09OYCwgc28gSSB3aWxsIGRpc2NvdW50IHRoYXQgc3ltYm9sLlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCBhZGRpbmcgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQncyBpbmxpbmUsIHNvIGl0J3Mgbm90IGEgcmVsZXZhbnQgc3ltYm9sIHRvIGZvY3VzIG9uLiBCdXQgSSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIGBrbWVtX2NhY2hlX2NoYXJnZWAuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IG15IGZvY3VzIHN5bWJvbHMuIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLCBpbiBgbW0vc2xhYl9jb21tb24uY2AsIGxvb2tzIHJpZ2h0LiBPa2F5LCBtb3Zpbmcgb24uIGBhbGxvY19zbGFiX29ial9leHRzYCBsb29rcyBjb3JyZWN0LiBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2Agc2VlbXMgcmlnaHQuIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBsb29rcyBnb29kLiBBbmQsIHllcywgYGttZW1fY2FjaGVfY2hhcmdlYCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBpbmNsdWRlZC5cblxuQmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGl0IGltcGFjdHMgKCBgTUVNQ0dgLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBLRkVOQ0VgKSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgaXMgY2hhbmdpbmcgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBhbmQgYWNjZXNzZWQuIEl0IGxvb2tzIGxpa2UgYFNMQUJfTUFZX0FDQ09VTlRgIGlzIGludHJvZHVjZWQgYW5kIHRoZSBgc2xhYm9ial9leHRgIGxheW91dCBpcyBjaGFuZ2VkIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIG9yIGEgdW5pb24sIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi4gR2l2ZW4gdGhlc2UgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcywgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlc2UgY2hhbmdlcyB0byBsb29rIGZvciBhbnkgbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhY2NvdW50aW5nIGVycm9ycy5cblxuSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0b29sIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1OTksIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MjEuMDk5OTkzOTYzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzMDk2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 01:57:55 +0000 UTC FinishedAt: 2026-07-28 02:17:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5ff172f6c94d282d83cb88bdfec5f647ad9c6105", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEM_ALLOC_PROFILING", "KFENCE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5ff172f6c94d282d83cb88bdfec5f647ad9c6105", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEM_ALLOC_PROFILING", "KFENCE" ], "series_id": "2f019ae5-f129-460e-bfb8-eba5db2aed39" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts", "__memcg_slab_post_alloc_hook", "__memcg_slab_free_hook", "__kmem_cache_create_args", "kmem_cache_charge" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfY2hhcmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIGhvdyBgc2xhYm9ial9leHRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgd2hlbiBib3RoIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFyZSBlbmFibGVkLiBJdCBpbnRyb2R1Y2VzIGBTTEFCX01BWV9BQ0NPVU5UYCBhbmQgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGBzbGFib2JqX2V4dGAuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhY2NvdW50aW5nIGVycm9ycyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ4Zjg0MDMyZDFiZDkwOGU0NjE0OWNjYWNkYjkwMTNlZTMzNjk5MjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMjoxMzoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uZDAyZWI1NGVlOGYyYzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbkBAIC0xMTIsMyAmIzQzOzExMiwxMCBAQCBUbyBkbyBzbzpcbiBcbiAtIFRoZW4sIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHlvdXIgYWxsb2NhdGlvbnM6XG4gICBhbGxvY19ob29rc190YWcoaHQtXHUwMDNleW91cl9zYXZlZF90YWcsIGttYWxsb2Nfbm9wcm9mKC4uLikpXG4mIzQzO1xuJiM0MztOb3Rlc1xuJiM0Mzs9PT09PVxuJiM0MztcbiYjNDM7LSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLlxuJiM0MzsgIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgbGltaXRlZCB0byBhIHNtYWxsIG51bWJlciwgc28gdGhpcyBvbWlzc2lvblxuJiM0MzsgIGlzIG5lZ2xpZ2libGUuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTQ0MCwxOSAmIzQzOzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4tLypcbi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLVx1MDAzZW1lbWNnX2RhdGFcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuLSAqL1xuLXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuLVx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuLSNlbmRpZlxuLX0gX19hbGlnbmVkKDgpO1xuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmhcbmluZGV4IDMyYzlmOGVkN2FlMjA1Li5lMTkxNTAyNmUwMzA0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTQ1LDYgJiM0Mzs0NSw3IEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRfU0xBQl9BQ0NPVU5ULFxuJiM0MztcdF9TTEFCX01BWV9BQ0NPVU5ULFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIFx0X1NMQUJfS0FTQU4sXG5AQCAtMjA0LDggJiM0MzsyMDUsMTAgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4mIzQzOyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlRcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9NQVlfQUNDT1VOVClcbiAjZWxzZVxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFx0XHRfX1NMQUJfRkxBR19VTlVTRURcbiYjNDM7IyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li45MDkyNWM2NDZjNGMyNCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9jb3JlLmNcbkBAIC02MzYsMTEgJiM0Mzs2MzYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpXG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gJiM0MzsgaSk7XG4gXHRcdF9fU2V0UGFnZVNsYWIocGFnZSk7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbi1cdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmtmZW5jZV9tZXRhZGF0YV9pbml0W2kgLyAyIC0gMV0ub2JqX2V4dHMgfFxuLVx0XHRcdFx0IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0jZW5kaWZcbiBcdH1cbiBcbiBcdC8qXG5AQCAtNzA0LDEwICYjNDM7Njk5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICYjNDM7IGkpO1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLSNlbmRpZlxuIFx0XHRfX0NsZWFyUGFnZVNsYWIocGFnZSk7XG4gXHR9XG4gXG5AQCAtMTI0OCw5ICYjNDM7MTIzOSw2IEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIHtcbiBcdHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xuIFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdEtGRU5DRV9XQVJOX09OKG1ldGEtXHUwMDNlb2JqX2V4dHMub2JqY2cpO1xuLSNlbmRpZlxuIFx0LypcbiBcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcbiBcdCAqIHRoZSBvYmplY3QsIGFzIHRoZSBvYmplY3QgcGFnZSBtYXkgYmUgcmVjeWNsZWQgZm9yIG90aGVyLXR5cGVkXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5pbmRleCAxZjYxOGY5YjBkMTJkOS4uZTZiNGJmMzQ5ZmY3MzAgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2UuaFxuQEAgLTEwMiw5ICYjNDM7MTAyLDYgQEAgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XG4gXHRzdHJ1Y3Qga2ZlbmNlX3RyYWNrIGZyZWVfdHJhY2sgX19ndWFyZGVkX2J5KFx1MDAyNmxvY2spO1xuIFx0LyogRm9yIHVwZGF0aW5nIGFsbG9jX2NvdmVyZWQgb24gZnJlZXMuICovXG4gXHR1MzIgYWxsb2Nfc3RhY2tfaGFzaCBfX2d1YXJkZWRfYnkoXHUwMDI2bG9jayk7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IHNsYWJvYmpfZXh0IG9ial9leHRzO1xuLSNlbmRpZlxuIH07XG4gXG4gI2RlZmluZSBLRkVOQ0VfTUVUQURBVEFfU0laRSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhKSAqIFxcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuaW5kZXggZGUyZDBmN2Q2MmIxNWUuLjk4NjdjMDNlZjBhZTNkIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG5AQCAtMjk1LDcgJiM0MzsyOTUsNyBAQCBzdGF0aWMgdm9pZCAqdGVzdF9hbGxvYyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGVudW0gYWxsb2NhdFxuIFx0XHRcdCAqIG1lbWNnIGFjY291bnRpbmcgd29ya3MgY29ycmVjdGx5LlxuIFx0XHRcdCAqL1xuIFx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpfdG9faW5kZXgocywgc2xhYiwgYWxsb2MpLCAwVSk7XG4tXHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ianNfcGVyX3NsYWIocywgc2xhYiksIDEpO1xuJiM0MztcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi1cdTAwM2VvYmplY3RzKSwgMSk7XG4gXG4gXHRcdFx0aWYgKHBvbGljeSA9PSBBTExPQ0FURV9BTlkpXG4gXHRcdFx0XHRyZXR1cm4gYWxsb2M7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uNmI1MWRkZjZkZmUwMjIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI4NjUsMTggJiM0MzsyODY1LDE5IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKnApXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4tXHR1bnNpZ25lZCBpbnQgb2ZmO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmICghb2JqX2V4dHMpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0b2ZmID0gb2JqX3RvX2luZGV4KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgcCk7XG4tXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0aWYgKG9ial9leHQtXHUwMDNlb2JqY2cpIHtcbi1cdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC1cdTAwM2VvYmpjZztcbiYjNDM7XHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4mIzQzO1x0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIG9ial9leHRzLCBwKTtcbiYjNDM7XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiYjNDM7XHRpZiAob2JqY2cpIHtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gXHR9XG5AQCAtMzU0MSw3ICYjNDM7MzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXHRzaXplX3Qgb2JqX3NpemUgPSBvYmpfZnVsbF9zaXplKHMpO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBsb25nIG9mZjtcbiBcdHNpemVfdCBpO1xuIFxuIFx0LypcbkBAIC0zNTgzLDExICYjNDM7MzU4MywxNiBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuIFxuLVx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpKSB7XG4mIzQzO1x0XHRcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhwW2ldKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIHNsYWJfYWxsb2NfZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFx1MDAyNlx1MDAyNiBXQVJOX09OX09OQ0UoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIGlmIHdlIGZhaWwgYW5kIHNpemUgaXMgMSwgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKCkgd2lsbFxuIFx0XHQgKiBqdXN0IGZyZWUgdGhlIG9iamVjdCwgd2hpY2ggaXMgb2sgYXMgd2UgaGF2ZSBub3QgYXNzaWduZWRcbkBAIC0zNjE2LDEwICYjNDM7MzYyMSwxMSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuJiM0MztcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4mIzQzO1xuIFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG4tXHRcdG9ial9leHQtXHUwMDNlb2JqY2cgPSBvYmpjZztcbiYjNDM7XHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgb2JqY2cpO1xuJiM0MztcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fVxuIFxuQEAgLTM2MzUsMTUgJiM0MzszNjQxLDEzIEBAIHZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuIFx0XHRzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2s7XG4tXHRcdHVuc2lnbmVkIGludCBvZmY7XG4gXG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdFx0b2JqY2cgPSBvYmpfZXh0LVx1MDAzZW9iamNnO1xuJiM0MztcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4mIzQzO1x0XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiBcdFx0aWYgKCFvYmpjZylcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IE5VTEw7XG4mIzQzO1x0XHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIE5VTEwpO1xuIFxuIFx0XHRzdG9jayA9IHRyeWxvY2tfc3RvY2soKTtcbiBcdFx0X19yZWZpbGxfb2JqX3N0b2NrKG9iamNnLCBzdG9jaywgb2JqX3NpemUsIHRydWUpO1xuZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaFxuaW5kZXggZjVlMzM2YjZiNmIwNGMuLjA0NjAwZjU3YjQwMTQ2IDEwMDY0NFxuLS0tIGEvbW0vc2xhYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmhcbkBAIC04MSwxMCAmIzQzOzgxLDExIEBAIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyB7XG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0XHRcdFx0XHQvKlxuIFx0XHRcdFx0XHQgKiBTb21lIG9wdGltaXphdGlvbnMgdXNlIGZyZWUgYml0cyBpbiAmIzM5O2NvdW50ZXJzJiMzOTsgZmllbGRcbi1cdFx0XHRcdFx0ICogdG8gc2F2ZSBtZW1vcnkuIEluIGNhc2UgLVx1MDAzZXN0cmlkZSBmaWVsZCBpcyBub3QgYXZhaWxhYmxlLFxuLVx0XHRcdFx0XHQgKiBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuJiM0MztcdFx0XHRcdFx0ICogdG8gc2F2ZSBtZW1vcnkgb3IgQ1BVLiBJZiB0aGVzZSBmcmVlIGJpdHMgYXJlIG5vdFxuJiM0MztcdFx0XHRcdFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuIFx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0cmlkZTtcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIG9ial9leHRzX2luX29iamVjdDoxO1xuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfbmVlZHNfb2JqY2c6MTtcbiAjZW5kaWZcbiBcdFx0XHRcdH07XG4gXHRcdFx0fTtcbkBAIC0zMzAsMTIgJiM0MzszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0cmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNsYWItXHUwMDNlb2JqZWN0cztcbi19XG4tXG4gLypcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXG4gICpcbkBAIC01NTUsNiAmIzQzOzU1MCw5MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluXG4mIzQzOyAqIHNsYWItXHUwMDNlb2JqX2V4dHMgKGFsaWFzaW5nIHBhZ2UtXHUwMDNlbWVtY2dfZGF0YSkgaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzbGFib2JqX2V4dCB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHVuaW9uIHNob3VsZCBiZSBwb2ludGVyLXNpemVkIHRvIGF2b2lkIG1lbW9yeVxuJiM0MztcdCAqIHdhc3RlXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5pb24ge1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO1x0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqX29iamNnO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4mIzQzO1x0XHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XG4mIzQzOyNlbmRpZlxuJiM0MztcdH07XG4mIzQzO30gX19hbGlnbmVkKDgpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4mIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG4mIzQzO1x0XHRcdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGNhY2hlLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX01BWV9BQ0NPVU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdHJldHVybiBzbGFiLVx1MDAzZW9ial9leHRzX25lZWRzX29iamNnO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVx1MDAzZXNsYWJfY2FjaGUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBzeiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbiYjNDM7XHRcdHN6ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXG4mIzQzO1x0XHRzeiAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHN6ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4mIzQzO1x0XHRzeiAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuJiM0MztcdFx0c3ogJiM0Mzs9IDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG4gXG4gLypcbkBAIC01NzIsNyAmIzQzOzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuICAqIGlmIChvYmpfZXh0cykge1xuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xuJiM0MzsgKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iaik7XG4gICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCBvYmpfZXh0XG4gICogICAgICAgICBwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gICogfVxuQEAgLTYxMCw0OCAmIzQzOzY5Miw4NiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NsYWJfb2JqX2V4dHModW5zaWduZWQgbG9uZyBvYmpfZXh0cylcbiB9XG4gXG4gI2lmZGVmIENPTkZJR182NEJJVFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0c2xhYi1cdTAwM2VzdHJpZGUgPSBzdHJpZGU7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VzdHJpZGU7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0b1xuJiM0MztcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuJiM0MztcdCAqIGFsbG9jYXRpb25zIHdpdGhpbl9zbGFiX2xlZnRvdmVyIGFyZSBwcmVmZXJyZWQuIEFuZCB0aG9zZSBtYXkgYmVcbiYjNDM7XHQgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWImIzM5O3Mgc2l6ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gc2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3Q7XG4gfVxuICNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcbi17XG4tXHRWTV9XQVJOX09OX09OQ0Uoc3RyaWRlICE9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbi19XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuIC8qXG4gICogc2xhYl9vYmpfZXh0IC0gZ2V0IHRoZSBwb2ludGVyIHRvIHRoZSBzbGFiIG9iamVjdCBleHRlbnNpb24gbWV0YWRhdGFcbiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi5cbiYjNDM7ICogQHM6IGNhY2hlIHRoYXQgdGhlIHNsYWIgYmVsb25ncyB0b1xuICAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XG4gICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXG4tICogQGluZGV4OiBhbiBpbmRleCBvZiB0aGUgb2JqZWN0XG4mIzQzOyAqIEBvYmo6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSBzZWN0aW9uIGNvdmVyZWQgYnkgZ2V0L3B1dF9zbGFiX29ial9leHRzKCkuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiYjNDM7XHQgICAgIGNvbnN0IHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IGluZGV4O1xuJiM0MztcdHVuc2lnbmVkIGludCBzdHJpZGU7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XG4gXG4tXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzO1xuLVx0XHRcdFx0XHQgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS0ZFTkNFIG9iamVjdHMgaGF2ZSBOVUxMIG9ial9leHRzIGFuZCB0aHVzIGNhbiYjMzk7dCByZWFjaCB0aGlzXG4mIzQzO1x0ICogYW5kIHdlIGRvbiYjMzk7dCBuZWVkIG9ial90b19pbmRleCgpXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5kZXggPSBfX29ial90b19pbmRleChzLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4mIzQzO1xuJiM0MztcdGlmICghb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuJiM0MztcdFx0c3RyaWRlID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c3RyaWRlID0gcy1cdTAwM2VzaXplO1xuJiM0MztcbiYjNDM7XHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOyBpbmRleCAqIHN0cmlkZSk7XG4mIzQzO1xuIFx0cmV0dXJuIGthc2FuX3Jlc2V0X3RhZyhvYmpfZXh0KTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbiYjNDM7e1xuJiM0MztcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4mIzQzO1x0cmV0dXJuIG9ial9leHQtXHUwMDNlX29iamNnO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiYjNDM7e1xuJiM0MztcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4mIzQzO1x0b2JqX2V4dC1cdTAwM2Vfb2JqY2cgPSBvYmpjZztcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuJiM0MztzdGF0aWMgaW5saW5lIHVuaW9uIGNvZGV0YWdfcmVmICpcbiYjNDM7c2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdG9ial9leHQgJiM0Mzs9IDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZvYmpfZXh0LVx1MDAzZV9jdHJlZjtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiBcbkBAIC02NjIsMTYgJiM0Mzs3ODIsMTcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiYjNDM7XHQgICAgIGNvbnN0IHZvaWQgKm9iailcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiAwOyB9XG4tXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiBcbiAjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuIFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAwM2VjYWMxMmNkODY1Zi4uMWUxZDNmZWVjMzUzNWIgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7XG4gXHRcdFNMQUJfT0JKX0VYVF9JTl9PQkopXG4gXG4gI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcXFxuLVx0XHRcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UKVxuJiM0MztcdFx0XHQgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCB8IFNMQUJfTUFZX0FDQ09VTlQpXG4gXG4gLypcbiAgKiBNZXJnZSBjb250cm9sLiBJZiB0aGlzIGlzIHNldCB0aGVuIG5vIG1lcmdpbmcgb2Ygc2xhYiBjYWNoZXMgd2lsbCBvY2N1ci5cbkBAIC0zNTksNiAmIzQzOzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBub3cgd2UgYXNzdW1lIGFueSBjYWNoZSBjYW4gYmUgdXNlZCB3aXRoIF9fR0ZQX0FDQ09VTlQgYW5kIHRodXNcbiYjNDM7XHQgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0c1xuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4mIzQzO1x0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuJiM0MztcbiBcdC8qIEZhaWwgY2xvc2VkIG9uIGJhZCB1c2Vyc2l6ZSBvZiB1c2Vyb2Zmc2V0IHZhbHVlcy4gKi9cbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpIHx8XG4gXHQgICAgV0FSTl9PTighYXJncy1cdTAwM2V1c2Vyc2l6ZSBcdTAwMjZcdTAwMjYgYXJncy1cdTAwM2V1c2Vyb2Zmc2V0KSB8fFxuQEAgLTk4NCwxMSAmIzQzOzk5MSwyMCBAQCBuZXdfa21hbGxvY19jYWNoZShpbnQgaWR4LCBlbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB0eXBlKVxuICNlbmRpZlxuIFxuIFx0Lypcbi1cdCAqIElmIENPTkZJR19NRU1DRyBpcyBlbmFibGVkLCBkaXNhYmxlIGNhY2hlIG1lcmdpbmcgZm9yXG4tXHQgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuXG4mIzQzO1x0ICogSWYgbWVtY2dfa21lbSBpcyBlbmFibGVkIGFuZCB0aGlzIGlzIGEgS01BTExPQ19OT1JNQUwgY2FjaGUgYW5kIG5vdFxuJiM0MztcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0JiMzOTtzIG5ldmVyIG1lcmdlZCB3aXRoIGFueSBvdGhlclxuJiM0MztcdCAqIGNhY2hlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gb3RoZXIgY2FzZXMgdGhlIGttYWxsb2MgY2FjaGUgbWF5IGVuZCB1cCBiZWluZyB1c2VkIGZvciBhXG4mIzQzO1x0ICogX19HRlBfQUNDT1VOVCBhbGxvY2F0aW9uIHNvIG1hcmsgaXQgYXMgc3VjaC4gVGhlIGV4Y2VwdGlvbiBpcyBhXG4mIzQzO1x0ICogS01BTExPQ19OT19PQkpfRVhUIGNhY2hlLlxuIFx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXG4tXHRcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwgXHUwMDI2XHUwMDI2IEtNQUxMT0NfUkVDTEFJTSAhPSBLTUFMTE9DX05PUk1BTClcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbiYjNDM7XHRcdGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IFNMQUJfTk9fT0JKX0VYVCkpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG1pbmFsaWduIFx1MDAzZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHtcbiBcdFx0YWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7XG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCAwMzM3ZTYwZGI1YWNlMC4uOTRiNzQ0ZTVhYzc5MTkgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuY1xuQEAgLTIxMyw2ICYjNDM7MjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XG4gc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHN0cmljdF9udW1hKTtcbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4mIzQzO0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbiYjNDM7XHRcdFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovXG4gc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7XG4gXHR1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyO1xuQEAgLTgwMyw3ICYjNDM7ODA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuJiM0MztcdHJldHVybiBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbiB9XG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuQEAgLTg3MCwxOCAmIzQzOzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHQvKlxuLVx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbi1cdCAqIGNoZWNrIHRoZSBzdHJpZGUuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuLVx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuLVx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJiMzOTtzIHNpemUuXG4tXHQgKi9cbi1cdHJldHVybiBvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChzbGFiX2dldF9zdHJpZGUoc2xhYikgPT0gcy1cdTAwM2VzaXplKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfaW5mb19lbmQocyk7XG5AQCAtODk2LDE2ICYjNDM7ODg5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBcdHJldHVybiBvZmZzZXQ7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRzbGFiLVx1MDAzZW9ial9leHRzX2luX29iamVjdCA9IDE7XG4gfVxuLVxuJiM0MzsjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5AQCAtMTIwNiw4ICYjNDM7MTIwMyw4IEBAIHN0YXRpYyB2b2lkIHByaW50X3RyYWlsZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1OCAqcClcbiBcbiBcdG9mZiAmIzQzOz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuLVx0XHRvZmYgJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuJiM0MztcdGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXG4mIzQzO1x0XHRvZmYgJiM0Mzs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuIFxuIFx0aWYgKG9mZiAhPSBzaXplX2Zyb21fb2JqZWN0KHMpKVxuIFx0XHQvKiBCZWdpbm5pbmcgb2YgdGhlIGZpbGxlciBpcyB0aGUgZnJlZSBwb2ludGVyICovXG5AQCAtMTQxMSw4ICYjNDM7MTQwOCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfcGFkX2J5dGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiYjNDM7XHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuJiM0MztcdFx0b2ZmICYjNDM7PSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcbiBcbiBcdGlmIChzaXplX2Zyb21fb2JqZWN0KHMpID09IG9mZilcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMTQzOSw3ICYjNDM7MTQzNiw3IEBAIHNsYWJfcGFkX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdGxlbmd0aCA9IHNsYWJfc2l6ZShzbGFiKTtcbiBcdGVuZCA9IHN0YXJ0ICYjNDM7IGxlbmd0aDtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XG4mIzQzO1x0aWYgKG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXHUwMDI2XHUwMDI2ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHtcbiBcdFx0cmVtYWluZGVyID0gbGVuZ3RoO1xuIFx0XHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XG4gXHRcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7XG5AQCAtMjA3MCwyMCAmIzQzOzIwNjcsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxuIFx0b2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbiBcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xuIFx0aWYgKHNsYWJfZXh0cykge1xuJiM0MztcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4mIzQzO1x0XHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmO1xuJiM0MztcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbi1cdFx0dW5zaWduZWQgaW50IG9mZnMgPSBvYmpfdG9faW5kZXgob2JqX3NsYWItXHUwMDNlc2xhYl9jYWNoZSxcbi1cdFx0XHRcdFx0XHQgb2JqX3NsYWIsIG9iaik7XG4tXHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLFxuLVx0XHRcdFx0XHRcdCAgICAgICBzbGFiX2V4dHMsIG9mZnMpO1xuJiM0MztcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7XG4mIzQzO1x0XHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7XG4gXG4tXHRcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpKSkge1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHtcbiBcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi9cbi1cdFx0V0FSTl9PTihleHQtXHUwMDNlcmVmLmN0KTtcbi1cdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZik7XG4mIzQzO1x0XHRXQVJOX09OKHJlZi1cdTAwM2VjdCk7XG4mIzQzO1x0XHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuIFx0fVxuIH1cbkBAIC0yMDkzLDE5ICYjNDM7MjA5MSwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHJldHVybiBjbXB4Y2hnKFx1MDAyNnNsYWItXHUwMDNlb2JqX2V4dHMsIDAsIE9CSkVYVFNfQUxMT0NfRkFJTCkgPT0gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cylcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbiBcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbiBcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbiBcdCAqL1xuLVx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpZiAob2JqX2V4dHMgIT0gT0JKRVhUU19BTExPQ19GQUlMKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAvIHNpemVvZigqdmVjKTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIHNsYWItXHUwMDNlb2JqZWN0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgdmVjKTtcbiBcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSYjNDM7JiM0MzspXG4tXHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4mIzQzO1x0XHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xuJiM0MztcdFx0dmVjICYjNDM7PSBzdHJpZGU7XG4gXHR9XG4gfVxuIFxuQEAgLTIxMTMsOCAmIzQzOzIxMjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYykge31cbiBcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbiBcbkBAIC0yMTI3LDEyICYjNDM7MjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xuLVx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xuIFx0Ym9vbCBuZXdfc2xhYiA9IGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcbi1cdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuJiM0MztcdHNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuIFxuIFx0Z2ZwIFx1MDAyNj0gfk9CSkNHU19DTEVBUl9NQVNLO1xuIFx0LypcbkBAIC0yMTgzLDcgJiM0MzsyMTkwLDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuICNlbmRpZlxuIHJldHJ5OlxuIFx0b2xkX2V4dHMgPSBSRUFEX09OQ0Uoc2xhYi1cdTAwM2VvYmpfZXh0cyk7XG4tXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XG4mIzQzO1x0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIsIG9sZF9leHRzLCB2ZWMpO1xuIFxuIFx0aWYgKG5ld19zbGFiKSB7XG4gXHRcdC8qXG5AQCAtMjI1MCw5ICYjNDM7MjI1Nyw2IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0dm9pZCAqYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXG4tXHQvKiBJbml0aWFsaXplIHN0cmlkZSBlYXJseSB0byBhdm9pZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzICovXG4tXHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuLVxuIFx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0yMjc4LDE1ICYjNDM7MjI4MiwxNCBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVx1MDAzZW9iamVjdHMpXG4tXHRcdFx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSAmIzQzOyBvZmZzZXQsIDAsXG4tXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbiYjNDM7XHRcdFx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSAmIzQzOyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuICNlbmRpZlxuIFx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gb2JqX2V4dHM7XG4tXHRcdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0c2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMzIzLDExICYjNDM7MjMyNiwxNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0ICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdm9pZCAqcClcbiB7XG4tXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG4tXHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgIF9fZnVuY19fLCBzLVx1MDAzZW5hbWUpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikpIHtcbiYjNDM7XHRcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBfX2Z1bmNfXywgcy1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbkBAIC0yMzYwLDE0ICYjNDM7MjM2NywyNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxuIFx0ICogY2hlY2sgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhbGxvY190YWdfYWRkKCkuXG4gXHQgKi9cbiBcdGlmIChvYmpfZXh0cykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb2JqX2lkeCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmplY3QpO1xuJiM0MztcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcbiBcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTtcbi1cdFx0YWxsb2NfdGFnX2FkZChcdTAwMjZvYmpfZXh0LVx1MDAzZXJlZiwgY3VycmVudC1cdTAwM2VhbGxvY190YWcsIHMtXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqZWN0KTtcbiYjNDM7XHRcdHJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCBvYmpfZXh0KTtcbiYjNDM7XG4mIzQzO1x0XHRhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC1cdTAwM2VhbGxvY190YWcsIHMtXHUwMDNlc2l6ZSk7XG4mIzQzO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRhbGxvY190YWdfc2V0X2luYWNjdXJhdGUoY3VycmVudC1cdTAwM2VhbGxvY190YWcpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZ1xuJiM0MztcdFx0ICogb25lcyBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIHNvIGl0JiMzOTtzIG5vdCB3b3J0aCBzZXR0aW5nXG4mIzQzO1x0XHQgKiB0YWdzIGFzIGluYWNjdXJhdGUgYmVjYXVzZSBvZiB0aGVtLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWlzX2tmZW5jZV9hZGRyZXNzKG9iamVjdCkpXG4mIzQzO1x0XHRcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyk7XG4gXHR9XG4gfVxuIFxuQEAgLTIzODQsNyAmIzQzOzI0MDEsNiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZFxuIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRcdCAgICAgICBpbnQgb2JqZWN0cylcbiB7XG4tXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXG4gXHQvKiBzbGFiLVx1MDAzZW9ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqL1xuQEAgLTIzOTYsMTAgJiM0MzsyNDEyLDExIEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwXG4gXHRcdHJldHVybjtcbiBcbiBcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHVuc2lnbmVkIGludCBvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcbiBcbi1cdFx0YWxsb2NfdGFnX3N1YihcdTAwMjZzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZiktXHUwMDNlcmVmLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XHRcdGFsbG9jX3RhZ19zdWIoc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIGV4dCksIHMtXHUwMDNlc2l6ZSk7XG4gXHR9XG4gXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gfVxuQEAgLTI0MTIsNiAmIzQzOzI0MjksMjUgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGVcbiYjNDM7ICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKVxuJiM0MzsgKlxuJiM0MzsgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24mIzM5O3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5XG4mIzQzOyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4mIzQzO1x0XHRpZiAobmVlZF9jb2RldGFnKVxuJiM0MztcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuQEAgLTI0MjYsNiAmIzQzOzI0NjIsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICYjNDM7MjUxMSw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTtcbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbkBAIC0yNDg0LDcgJiM0MzsyNTI3LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuLVx0dW5zaWduZWQgbG9uZyBvZmY7XG4gXG4gXHRwYWdlID0gdmlydF90b19wYWdlKHApO1xuIFx0aWYgKFBhZ2VMYXJnZUttYWxsb2MocGFnZSkpIHtcbkBAIC0yNTE3LDE2ICYjNDM7MjU1OSwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbiYjNDM7XHRpZiAoIWNhY2hlX25lZWRzX29iamNnKHMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIElnbm9yZSBhbHJlYWR5IGNoYXJnZWQgb2JqZWN0cy4gKi9cbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmIChvYmpfZXh0cykge1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KG9ial9leHQtXHUwMDNlb2JqY2cpKSB7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCAmIzQzOzM0MzIsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbiBcdFx0c3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7XG4gXHR9XG4gXG4mIzQzO1x0LyogSW5pdGlhbGl6ZXMgZnJvemVuLCBpbnVzZSwgYW5kIGFueSBleHRyYSA2NGJpdC1vbmx5IGZsYWdzICovXG4mIzQzO1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4mIzQzO1xuIFx0c2xhYi1cdTAwM2VvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7XG4tXHRzbGFiLVx1MDAzZWludXNlID0gMDtcbi1cdHNsYWItXHUwMDNlZnJvemVuID0gMDtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbiYjNDM7XHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuJiM0MzsjZW5kaWZcbiBcdHNsYWItXHUwMDNlc2xhYl9jYWNoZSA9IHM7XG4gXG4gXHRrYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbkBAIC02NTI2LDcgJiM0Mzs2NTcyLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuJiM0MztcdGVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiBcdFx0cmV0dXJuIHMtXHUwMDNlaW51c2U7XG4gXHQvKlxuIFx0ICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uXG5AQCAtNzkyOSw3ICYjNDM7Nzk3NSw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0YWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy1cdTAwM2VhbGlnbik7XG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuIFx0aWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQoYWxpZ25lZF9zaXplIC0gc2l6ZSBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKSlcbiYjNDM7XHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiAmIzQzOzg1ODUsOCBAQCB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZClcbiBcdFx0Ym9vdF9rbWVtX2NhY2hlX25vZGU7XG4gXHRpbnQgbm9kZTtcbiBcbiYjNDM7XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpO1xuJiM0MztcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2NoYXJnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgY2hhbmdlcyBob3cgYHNsYWJvYmpfZXh0YCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFjY2Vzc2VkLCBhbmQgbWFuYWdlZCwgcGFydGljdWxhcmx5IHdoZW4gYm90aCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhcmUgZW5hYmxlZC4gSXQgaW50cm9kdWNlcyBgU0xBQl9NQVlfQUNDT1VOVGAgYW5kIGNoYW5nZXMgdGhlIGxheW91dCBvZiBgc2xhYm9ial9leHRgLiBUaGVzZSBhcmUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uLCBsZWFrcywgb3IgYWNjb3VudGluZyBlcnJvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OGY4NDAzMmQxYmQ5MDhlNDYxNDljY2FjZGI5MDEzZWUzMzY5OTIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDI6MTM6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0CmluZGV4IDUzODlkMjQxMTc2YThhLi5kMDJlYjU0ZWU4ZjJjNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKQEAgLTExMiwzICYjNDM7MTEyLDEwIEBAIFRvIGRvIHNvOgogCiAtIFRoZW4sIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHlvdXIgYWxsb2NhdGlvbnM6CiAgIGFsbG9jX2hvb2tzX3RhZyhodC0mZ3Q7eW91cl9zYXZlZF90YWcsIGttYWxsb2Nfbm9wcm9mKC4uLikpCiYjNDM7CiYjNDM7Tm90ZXMKJiM0Mzs9PT09PQomIzQzOwomIzQzOy0gV2hlbiBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIEtGRU5DRSwgaXRzIGFjY291bnRpbmcgaXMgc2tpcHBlZC4KJiM0MzsgIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgbGltaXRlZCB0byBhIHNtYWxsIG51bWJlciwgc28gdGhpcyBvbWlzc2lvbgomIzQzOyAgaXMgbmVnbGlnaWJsZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMTQ0MCwxOSAmIzQzOzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwogCi0vKgotICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYW4gYXJyYXkgaW4gcGFnZS0mZ3Q7bWVtY2dfZGF0YQotICogaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC4KLSAqLwotc3RydWN0IHNsYWJvYmpfZXh0IHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLQlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwotCXVuaW9uIGNvZGV0YWdfcmVmIHJlZjsKLSNlbmRpZgotfSBfX2FsaWduZWQoOCk7Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAzMmM5ZjhlZDdhZTIwNS4uZTE5MTUwMjZlMDMwNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC00NSw2ICYjNDM7NDUsNyBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlfU0xBQl9BQ0NPVU5ULAomIzQzOwlfU0xBQl9NQVlfQUNDT1VOVCwKICNlbmRpZgogI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDCiAJX1NMQUJfS0FTQU4sCkBAIC0yMDQsOCAmIzQzOzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7CiAgKi8KICNpZmRlZiBDT05GSUdfTUVNQ0cKICMgZGVmaW5lIFNMQUJfQUNDT1VOVAkJX19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpCiYjNDM7IyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVAlfX1NMQUJfRkxBR19CSVQoX1NMQUJfTUFZX0FDQ09VTlQpCiAjZWxzZQogIyBkZWZpbmUgU0xBQl9BQ0NPVU5UCQlfX1NMQUJfRkxBR19VTlVTRUQKJiM0MzsjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UCV9fU0xBQl9GTEFHX1VOVVNFRAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQwpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmMKaW5kZXggNjU3N2JkNzY5NTRlYjQuLjkwOTI1YzY0NmM0YzI0IDEwMDY0NAotLS0gYS9tbS9rZmVuY2UvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9jb3JlLmMKQEAgLTYzNiwxMSAmIzQzOzYzNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZCkKIAogCQlwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICYjNDM7IGkpOwogCQlfX1NldFBhZ2VTbGFiKHBhZ2UpOwotI2lmZGVmIENPTkZJR19NRU1DRwotCQlzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKLQkJc2xhYi0mZ3Q7b2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZykmYW1wO2tmZW5jZV9tZXRhZGF0YV9pbml0W2kgLyAyIC0gMV0ub2JqX2V4dHMgfAotCQkJCSBNRU1DR19EQVRBX09CSkVYVFM7Ci0jZW5kaWYKIAl9CiAKIAkvKgpAQCAtNzA0LDEwICYjNDM7Njk5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKQogCQkJY29udGludWU7CiAKIAkJcGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAmIzQzOyBpKTsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLQkJc3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7Ci0JCXNsYWItJmd0O29ial9leHRzID0gMDsKLSNlbmRpZgogCQlfX0NsZWFyUGFnZVNsYWIocGFnZSk7CiAJfQogCkBAIC0xMjQ4LDkgJiM0MzsxMjM5LDYgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpCiB7CiAJc3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLQlLRkVOQ0VfV0FSTl9PTihtZXRhLSZndDtvYmpfZXh0cy5vYmpjZyk7Ci0jZW5kaWYKIAkvKgogCSAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmcKIAkgKiB0aGUgb2JqZWN0LCBhcyB0aGUgb2JqZWN0IHBhZ2UgbWF5IGJlIHJlY3ljbGVkIGZvciBvdGhlci10eXBlZApkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oCmluZGV4IDFmNjE4ZjliMGQxMmQ5Li5lNmI0YmYzNDlmZjczMCAxMDA2NDQKLS0tIGEvbW0va2ZlbmNlL2tmZW5jZS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2UuaApAQCAtMTAyLDkgJiM0MzsxMDIsNiBAQCBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHsKIAlzdHJ1Y3Qga2ZlbmNlX3RyYWNrIGZyZWVfdHJhY2sgX19ndWFyZGVkX2J5KCZhbXA7bG9jayk7CiAJLyogRm9yIHVwZGF0aW5nIGFsbG9jX2NvdmVyZWQgb24gZnJlZXMuICovCiAJdTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KCZhbXA7bG9jayk7Ci0jaWZkZWYgQ09ORklHX01FTUNHCi0Jc3RydWN0IHNsYWJvYmpfZXh0IG9ial9leHRzOwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIEtGRU5DRV9NRVRBREFUQV9TSVpFIFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEpICogXApkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYwppbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCkBAIC0yOTUsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkICp0ZXN0X2FsbG9jKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgZW51bSBhbGxvY2F0CiAJCQkgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS4KIAkJCSAqLwogCQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ial90b19pbmRleChzLCBzbGFiLCBhbGxvYyksIDBVKTsKLQkJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTsKJiM0MzsJCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi0mZ3Q7b2JqZWN0cyksIDEpOwogCiAJCQlpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSkKIAkJCQlyZXR1cm4gYWxsb2M7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZmQuLjZiNTFkZGY2ZGZlMDIyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yODY1LDE4ICYjNDM7Mjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKQogCSAqLwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwotCXVuc2lnbmVkIGludCBvZmY7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAogCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAlpZiAoIW9ial9leHRzKQogCQlyZXR1cm4gTlVMTDsKIAotCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQlvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgc2xhYiwgcCk7Ci0Jb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTsKLQlpZiAob2JqX2V4dC0mZ3Q7b2JqY2cpIHsKLQkJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC0mZ3Q7b2JqY2c7CiYjNDM7CWlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCXJldHVybiBOVUxMOwogCiYjNDM7CWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKJiM0MzsJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmpfZXh0cywgcCk7CiYjNDM7CW9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpOwomIzQzOwlpZiAob2JqY2cpIHsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCQlyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiAJfQpAQCAtMzU0MSw3ICYjNDM7MzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAJc2l6ZV90IG9ial9zaXplID0gb2JqX2Z1bGxfc2l6ZShzKTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgbG9uZyBvZmY7CiAJc2l6ZV90IGk7CiAKIAkvKgpAQCAtMzU4MywxMSAmIzQzOzM1ODMsMTYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSwKIAogCQlzbGFiID0gdmlydF90b19zbGFiKHBbaV0pOwogCi0JCWlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSAmYW1wOyZhbXA7Ci0JCSAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkgewotCQkJY29udGludWU7CiYjNDM7CQlpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikpIHsKJiM0MzsJCQlpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkKJiM0MzsJCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSAmYW1wOyZhbXA7IFdBUk5fT05fT05DRSghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qCiAJCSAqIGlmIHdlIGZhaWwgYW5kIHNpemUgaXMgMSwgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKCkgd2lsbAogCQkgKiBqdXN0IGZyZWUgdGhlIG9iamVjdCwgd2hpY2ggaXMgb2sgYXMgd2UgaGF2ZSBub3QgYXNzaWduZWQKQEAgLTM2MTYsMTAgJiM0MzszNjIxLDExIEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAKIAkJb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpOwogCQlnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7Ci0JCW9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTsKLQkJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTsKJiM0MzsJCW9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pOwomIzQzOwogCQlvYmpfY2dyb3VwX2dldChvYmpjZyk7Ci0JCW9ial9leHQtJmd0O29iamNnID0gb2JqY2c7CiYjNDM7CQlzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTsKJiM0MzsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCX0KIApAQCAtMzYzNSwxNSAmIzQzOzM2NDEsMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7CiAJCXN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jazsKLQkJdW5zaWduZWQgaW50IG9mZjsKIAotCQlvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7Ci0JCW9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7Ci0JCW9iamNnID0gb2JqX2V4dC0mZ3Q7b2JqY2c7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTsKJiM0MzsJCW9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpOwogCQlpZiAoIW9iamNnKQogCQkJY29udGludWU7CiAKLQkJb2JqX2V4dC0mZ3Q7b2JqY2cgPSBOVUxMOwomIzQzOwkJc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBOVUxMKTsKIAogCQlzdG9jayA9IHRyeWxvY2tfc3RvY2soKTsKIAkJX19yZWZpbGxfb2JqX3N0b2NrKG9iamNnLCBzdG9jaywgb2JqX3NpemUsIHRydWUpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IGY1ZTMzNmI2YjZiMDRjLi4wNDYwMGY1N2I0MDE0NiAxMDA2NDQKLS0tIGEvbW0vc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaApAQCAtODEsMTAgJiM0Mzs4MSwxMSBAQCBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgewogI2lmZGVmIENPTkZJR182NEJJVAogCQkJCQkvKgogCQkJCQkgKiBTb21lIG9wdGltaXphdGlvbnMgdXNlIGZyZWUgYml0cyBpbiAmIzM5O2NvdW50ZXJzJiMzOTsgZmllbGQKLQkJCQkJICogdG8gc2F2ZSBtZW1vcnkuIEluIGNhc2UgLSZndDtzdHJpZGUgZmllbGQgaXMgbm90IGF2YWlsYWJsZSwKLQkJCQkJICogc3VjaCBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4KJiM0MzsJCQkJCSAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3QKJiM0MzsJCQkJCSAqIGF2YWlsYWJsZSwgc3VjaCBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4KIAkJCQkJICovCi0JCQkJCXVuc2lnbmVkIGludCBzdHJpZGU7CiYjNDM7CQkJCQl1bnNpZ25lZCBvYmpfZXh0c19pbl9vYmplY3Q6MTsKJiM0MzsJCQkJCXVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7CiAjZW5kaWYKIAkJCQl9OwogCQkJfTsKQEAgLTMzMCwxMiAmIzQzOzMzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJcmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLAotCQkJCWNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKQotewotCXJldHVybiBzbGFiLSZndDtvYmplY3RzOwotfQotCiAvKgogICogU3RhdGUgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLgogICoKQEAgLTU1NSw2ICYjNDM7NTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyoKJiM0MzsgKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW4KJiM0MzsgKiBzbGFiLSZndDtvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS0mZ3Q7bWVtY2dfZGF0YSkgaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3Qgc2xhYm9ial9leHQgewomIzQzOwkvKgomIzQzOwkgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHVuaW9uIHNob3VsZCBiZSBwb2ludGVyLXNpemVkIHRvIGF2b2lkIG1lbW9yeQomIzQzOwkgKiB3YXN0ZQomIzQzOwkgKi8KJiM0MzsJdW5pb24gewomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MzsJCXN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7CiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7CQl1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7CiYjNDM7I2VuZGlmCiYjNDM7CX07CiYjNDM7fSBfX2FsaWduZWQoOCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCwKJiM0MzsJCQkgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULAomIzQzOwkJCQkgICAmYW1wO3NsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKGNhY2hlLSZndDtmbGFncyAmYW1wOyBTTEFCX01BWV9BQ0NPVU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsJcmV0dXJuIHNsYWItJmd0O29ial9leHRzX25lZWRzX29iamNnOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLSZndDtzbGFiX2NhY2hlKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKQomIzQzO3sKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGNhY2hlX25lZWRzX29iamNnKHMpKQomIzQzOwkJc3ogJiM0Mzs9IDE7CiYjNDM7CiYjNDM7CWlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSkKJiM0MzsJCXN6ICYjNDM7PSAxOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlzaXplX3Qgc3ogPSAwOwomIzQzOwomIzQzOwlpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCXN6ICYjNDM7PSAxOwomIzQzOwomIzQzOwlpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpCiYjNDM7CQlzeiAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFQKIAogLyoKQEAgLTU3Miw3ICYjNDM7NjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZCkKICAqIG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKICAqIGlmIChvYmpfZXh0cykgewogICogICAgICAgICBnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7Ci0gKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial90b19pbmRleChzLCBzbGFiLCBvYmopKTsKJiM0MzsgKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iaik7CiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHQKICAqICAgICAgICAgcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogICogfQpAQCAtNjEwLDQ4ICYjNDM7NjkyLDg2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc2xhYl9vYmpfZXh0cyh1bnNpZ25lZCBsb25nIG9ial9leHRzKQogfQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0Jc2xhYi0mZ3Q7c3RyaWRlID0gc3RyaWRlOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKQotewotCXJldHVybiBzbGFiLSZndDtzdHJpZGU7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvCiYjNDM7CSAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dAomIzQzOwkgKiBhbGxvY2F0aW9ucyB3aXRoaW5fc2xhYl9sZWZ0b3ZlciBhcmUgcHJlZmVycmVkLiBBbmQgdGhvc2UgbWF5IGJlCiYjNDM7CSAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHNsYWItJmd0O29ial9leHRzX2luX29iamVjdDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCVZNX1dBUk5fT05fT05DRShzdHJpZGUgIT0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIAogLyoKICAqIHNsYWJfb2JqX2V4dCAtIGdldCB0aGUgcG9pbnRlciB0byB0aGUgc2xhYiBvYmplY3QgZXh0ZW5zaW9uIG1ldGFkYXRhCiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi4KJiM0MzsgKiBAczogY2FjaGUgdGhhdCB0aGUgc2xhYiBiZWxvbmdzIHRvCiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdAogICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yCi0gKiBAaW5kZXg6IGFuIGluZGV4IG9mIHRoZSBvYmplY3QKJiM0MzsgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LgogICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqCiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKJiM0MzsJICAgICBjb25zdCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwomIzQzOwl1bnNpZ25lZCBpbnQgaW5kZXg7CiYjNDM7CXVuc2lnbmVkIGludCBzdHJpZGU7CiAKIAlWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7CiAKLQlvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOwotCQkJCQkgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpOwomIzQzOwkvKgomIzQzOwkgKiBLRkVOQ0Ugb2JqZWN0cyBoYXZlIE5VTEwgb2JqX2V4dHMgYW5kIHRodXMgY2FuJiMzOTt0IHJlYWNoIHRoaXMKJiM0MzsJICogYW5kIHdlIGRvbiYjMzk7dCBuZWVkIG9ial90b19pbmRleCgpCiYjNDM7CSAqLwomIzQzOwlpbmRleCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTsKJiM0MzsKJiM0MzsJaWYgKCFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpCiYjNDM7CQlzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTsKJiM0MzsJZWxzZQomIzQzOwkJc3RyaWRlID0gcy0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJb2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MzsgaW5kZXggKiBzdHJpZGUpOwomIzQzOwogCXJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCkKJiM0Mzt7CiYjNDM7CS8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueXRoaW5nICovCiYjNDM7CXJldHVybiBvYmpfZXh0LSZndDtfb2JqY2c7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCwKJiM0MzsJCQkJCSAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQomIzQzO3sKJiM0MzsJLyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KJiM0MzsJb2JqX2V4dC0mZ3Q7X29iamNnID0gb2JqY2c7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwomIzQzO3N0YXRpYyBpbmxpbmUgdW5pb24gY29kZXRhZ19yZWYgKgomIzQzO3NsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KQomIzQzO3sKJiM0MzsJaWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpCiYjNDM7CQlvYmpfZXh0ICYjNDM7PSAxOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtvYmpfZXh0LSZndDtfY3RyZWY7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQkJZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpOwogCkBAIC02NjIsMTYgJiM0Mzs3ODIsMTcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGluZGV4KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICoKJiM0MztzbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLAomIzQzOwkgICAgIGNvbnN0IHZvaWQgKm9iaikKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIDA7IH0KLQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogCiAjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqLwogCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCAwM2VjYWMxMmNkODY1Zi4uMWUxZDNmZWVjMzUzNWIgMTAwNjQ0Ci0tLSBhL21tL3NsYWJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYl9jb21tb24uYwpAQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7CiAJCVNMQUJfT0JKX0VYVF9JTl9PQkopCiAKICNkZWZpbmUgU0xBQl9NRVJHRV9TQU1FIChTTEFCX1JFQ0xBSU1fQUNDT1VOVCB8IFNMQUJfQ0FDSEVfRE1BIHwgXAotCQkJIFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQpCiYjNDM7CQkJIFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQgfCBTTEFCX01BWV9BQ0NPVU5UKQogCiAvKgogICogTWVyZ2UgY29udHJvbC4gSWYgdGhpcyBpcyBzZXQgdGhlbiBubyBtZXJnaW5nIG9mIHNsYWIgY2FjaGVzIHdpbGwgb2NjdXIuCkBAIC0zNTksNiAmIzQzOzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogRm9yIG5vdyB3ZSBhc3N1bWUgYW55IGNhY2hlIGNhbiBiZSB1c2VkIHdpdGggX19HRlBfQUNDT1VOVCBhbmQgdGh1cwomIzQzOwkgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0cwomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKJiM0MzsJCWZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7CiYjNDM7CiAJLyogRmFpbCBjbG9zZWQgb24gYmFkIHVzZXJzaXplIG9mIHVzZXJvZmZzZXQgdmFsdWVzLiAqLwogCWlmICghSVNfRU5BQkxFRChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpIHx8CiAJICAgIFdBUk5fT04oIWFyZ3MtJmd0O3VzZXJzaXplICZhbXA7JmFtcDsgYXJncy0mZ3Q7dXNlcm9mZnNldCkgfHwKQEAgLTk4NCwxMSAmIzQzOzk5MSwyMCBAQCBuZXdfa21hbGxvY19jYWNoZShpbnQgaWR4LCBlbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB0eXBlKQogI2VuZGlmCiAKIAkvKgotCSAqIElmIENPTkZJR19NRU1DRyBpcyBlbmFibGVkLCBkaXNhYmxlIGNhY2hlIG1lcmdpbmcgZm9yCi0JICogS01BTExPQ19OT1JNQUwgY2FjaGVzLgomIzQzOwkgKiBJZiBtZW1jZ19rbWVtIGlzIGVuYWJsZWQgYW5kIHRoaXMgaXMgYSBLTUFMTE9DX05PUk1BTCBjYWNoZSBhbmQgbm90CiYjNDM7CSAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0JiMzOTtzIG5ldmVyIG1lcmdlZCB3aXRoIGFueSBvdGhlcgomIzQzOwkgKiBjYWNoZS4KJiM0MzsJICoKJiM0MzsJICogSW4gb3RoZXIgY2FzZXMgdGhlIGttYWxsb2MgY2FjaGUgbWF5IGVuZCB1cCBiZWluZyB1c2VkIGZvciBhCiYjNDM7CSAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2guIFRoZSBleGNlcHRpb24gaXMgYQomIzQzOwkgKiBLTUFMTE9DX05PX09CSl9FWFQgY2FjaGUuCiAJICovCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7ICh0eXBlID09IEtNQUxMT0NfTk9STUFMKSkKLQkJZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkgewomIzQzOwkJaWYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwgJmFtcDsmYW1wOyBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpCiYjNDM7CQkJZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTsKJiM0MzsJCWVsc2UgaWYgKCEoZmxhZ3MgJmFtcDsgU0xBQl9OT19PQkpfRVhUKSkKJiM0MzsJCQlmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UOwomIzQzOwl9CiAKIAlpZiAobWluYWxpZ24gJmd0OyBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHsKIAkJYWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggMDMzN2U2MGRiNWFjZTAuLjk0Yjc0NGU1YWM3OTE5IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC0yMTMsNiAmIzQzOzIxMywxMSBAQCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpOwogc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHN0cmljdF9udW1hKTsKICNlbmRpZgogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULAomIzQzOwkJCXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpOwomIzQzOyNlbmRpZgomIzQzOwogLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqLwogc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7CiAJdW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjsKQEAgLTgwMyw3ICYjNDM7ODA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKQogewotCXJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItJmd0O29iamVjdHM7CiYjNDM7CXJldHVybiBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItJmd0O29iamVjdHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywKQEAgLTg3MCwxOCAmIzQzOzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHXzY0QklUKQotc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKLXsKLQkvKgotCSAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvCi0JICogY2hlY2sgdGhlIHN0cmlkZS4gQSBjYWNoZSBjYW4gaGF2ZSBTTEFCX09CSl9FWFRfSU5fT0JKIHNldCwgYnV0Ci0JICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZQotCSAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLgotCSAqLwotCXJldHVybiBvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpICZhbXA7JmFtcDsKLQkgICAgICAgKHNsYWJfZ2V0X3N0cmlkZShzbGFiKSA9PSBzLSZndDtzaXplKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfaW5mb19lbmQocyk7CkBAIC04OTYsMTYgJiM0Mzs4ODksMjAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCiAJcmV0dXJuIG9mZnNldDsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKQogewotCXJldHVybiBmYWxzZTsKJiM0MzsJc2xhYi0mZ3Q7b2JqX2V4dHNfaW5fb2JqZWN0ID0gMTsKIH0KLQomIzQzOyNlbHNlCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzO30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKQEAgLTEyMDYsOCAmIzQzOzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApCiAKIAlvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpOwogCi0JaWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkKLQkJb2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTsKJiM0MzsJaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSkKJiM0MzsJCW9mZiAmIzQzOz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7CiAKIAlpZiAob2ZmICE9IHNpemVfZnJvbV9vYmplY3QocykpCiAJCS8qIEJlZ2lubmluZyBvZiB0aGUgZmlsbGVyIGlzIHRoZSBmcmVlIHBvaW50ZXIgKi8KQEAgLTE0MTEsOCAmIzQzOzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKQogCiAJb2ZmICYjNDM7PSBrYXNhbl9tZXRhZGF0YV9zaXplKHMsIGZhbHNlKTsKIAotCWlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpCi0JCW9mZiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7CiYjNDM7CWlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpCiYjNDM7CQlvZmYgJiM0Mzs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpOwogCiAJaWYgKHNpemVfZnJvbV9vYmplY3QocykgPT0gb2ZmKQogCQlyZXR1cm4gMTsKQEAgLTE0MzksNyAmIzQzOzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpCiAJbGVuZ3RoID0gc2xhYl9zaXplKHNsYWIpOwogCWVuZCA9IHN0YXJ0ICYjNDM7IGxlbmd0aDsKIAotCWlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpICZhbXA7JmFtcDsgIW9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkgewomIzQzOwlpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSAmYW1wOyZhbXA7ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHsKIAkJcmVtYWluZGVyID0gbGVuZ3RoOwogCQlyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7CiAJCXJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7CkBAIC0yMDcwLDIwICYjNDM7MjA2NywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopCiAJb2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTsKIAlzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTsKIAlpZiAoc2xhYl9leHRzKSB7CiYjNDM7CQlzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDsKJiM0MzsJCXVuaW9uIGNvZGV0YWdfcmVmICpyZWY7CiYjNDM7CiAJCWdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7Ci0JCXVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLSZndDtzbGFiX2NhY2hlLAotCQkJCQkJIG9ial9zbGFiLCBvYmopOwotCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYiwKLQkJCQkJCSAgICAgICBzbGFiX2V4dHMsIG9mZnMpOwomIzQzOwkJZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLSZndDtzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopOwomIzQzOwkJcmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKG9ial9zbGFiLCBleHQpOwogCi0JCWlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHsKIAkJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi8KLQkJV0FSTl9PTihleHQtJmd0O3JlZi5jdCk7Ci0JCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpOwomIzQzOwkJV0FSTl9PTihyZWYtJmd0O2N0KTsKJiM0MzsJCXNldF9jb2RldGFnX2VtcHR5KHJlZik7CiAJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJfQogfQpAQCAtMjA5MywxOSAmIzQzOzIwOTEsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpCiAJcmV0dXJuIGNtcHhjaGcoJmFtcDtzbGFiLSZndDtvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCi0JCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYiwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc3RyaWRlOwomIzQzOwomIzQzOwlpZiAoIXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qCiAJICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlCiAJICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpcwogCSAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi4KIAkgKi8KLQlpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7Ci0JCXVuc2lnbmVkIGludCBpOwomIzQzOwlpZiAob2JqX2V4dHMgIT0gT0JKRVhUU19BTExPQ19GQUlMKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAvIHNpemVvZigqdmVjKTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBzbGFiLSZndDtvYmplY3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpOwogCi0JCWZvciAoaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykKLQkJCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7dmVjW2ldLnJlZik7CiYjNDM7CQlzZXRfY29kZXRhZ19lbXB0eShyZWYpOwomIzQzOwkJdmVjICYjNDM7PSBzdHJpZGU7CiAJfQogfQogCkBAIC0yMTEzLDggJiM0MzsyMTIxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCXN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLAomIzQzOwkJdW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpIHt9CiAKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqLwogCkBAIC0yMTI3LDEyICYjNDM7MjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAljb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7Ci0JdW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpOwogCWJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05FV19TTEFCOwogCXVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7CiAJdW5zaWduZWQgbG9uZyBvbGRfZXh0czsKIAlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYzsKLQlzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItJmd0O29iamVjdHM7CiYjNDM7CXNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi0mZ3Q7b2JqZWN0czsKIAogCWdmcCAmYW1wOz0gfk9CSkNHU19DTEVBUl9NQVNLOwogCS8qCkBAIC0yMTgzLDcgJiM0MzsyMTkwLDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogI2VuZGlmCiByZXRyeToKIAlvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLSZndDtvYmpfZXh0cyk7Ci0JaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKG9sZF9leHRzLCB2ZWMsIG9iamVjdHMpOwomIzQzOwloYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7CiAKIAlpZiAobmV3X3NsYWIpIHsKIAkJLyoKQEAgLTIyNTAsOSAmIzQzOzIyNTcsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAl2b2lkICphZGRyOwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAKLQkvKiBJbml0aWFsaXplIHN0cmlkZSBlYXJseSB0byBhdm9pZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzICovCi0Jc2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKLQogCWlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKQogCQlyZXR1cm47CiAKQEAgLTIyNzgsMTUgJiM0MzsyMjgyLDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQogCiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAkJZm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi0mZ3Q7b2JqZWN0cykKLQkJCW1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgJiM0Mzsgb2Zmc2V0LCAwLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKJiM0MzsJCQltZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCwgc2xhYl9vYmpfZXh0X3NpemUoc2xhYikpOwogCQlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAkJb2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTOwogI2VuZGlmCiAJCXNsYWItJmd0O29ial9leHRzID0gb2JqX2V4dHM7Ci0JCXNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLSZndDtzaXplKTsKJiM0MzsJCXNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzbGFiKTsKIAl9CiB9CiAKQEAgLTIzMjMsMTEgJiM0MzsyMzI2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLAogCQkJICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdm9pZCAqcCkKIHsKLQlpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgJmFtcDsmYW1wOwotCSAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHsKLQkJcHJfd2Fybl9vbmNlKCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcbiYjMzQ7LAotCQkJICAgICBfX2Z1bmNfXywgcy0mZ3Q7bmFtZSk7Ci0JCXJldHVybiAwOwomIzQzOwlpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikpIHsKJiM0MzsJCWlmIChpc19rZmVuY2VfYWRkcmVzcyhwKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHsKJiM0MzsJCQlwcl93YXJuX29uY2UoJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxuJiMzNDssCiYjNDM7CQkJCSAgICAgX19mdW5jX18sIHMtJmd0O25hbWUpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQogCX0KIAogCXJldHVybiBzbGFiX29ial9leHRzKHNsYWIpOwpAQCAtMjM2MCwxNCAmIzQzOzIzNjcsMjQgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncywKIAkgKiBjaGVjayBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIGFsbG9jX3RhZ19hZGQoKS4KIAkgKi8KIAlpZiAob2JqX2V4dHMpIHsKLQkJdW5zaWduZWQgaW50IG9ial9pZHggPSBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqZWN0KTsKJiM0MzsJCXVuaW9uIGNvZGV0YWdfcmVmICpyZWY7CiAKIAkJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTsKLQkJYWxsb2NfdGFnX2FkZCgmYW1wO29ial9leHQtJmd0O3JlZiwgY3VycmVudC0mZ3Q7YWxsb2NfdGFnLCBzLSZndDtzaXplKTsKJiM0MzsKJiM0MzsJCW9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iamVjdCk7CiYjNDM7CQlyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7CiYjNDM7CiYjNDM7CQlhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC0mZ3Q7YWxsb2NfdGFnLCBzLSZndDtzaXplKTsKJiM0MzsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCX0gZWxzZSB7Ci0JCWFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LSZndDthbGxvY190YWcpOwomIzQzOwkJLyoKJiM0MzsJCSAqIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZwomIzQzOwkJICogb25lcyBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIHNvIGl0JiMzOTtzIG5vdCB3b3J0aCBzZXR0aW5nCiYjNDM7CQkgKiB0YWdzIGFzIGluYWNjdXJhdGUgYmVjYXVzZSBvZiB0aGVtLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWlzX2tmZW5jZV9hZGRyZXNzKG9iamVjdCkpCiYjNDM7CQkJYWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtJmd0O2FsbG9jX3RhZyk7CiAJfQogfQogCkBAIC0yMzg0LDcgJiM0MzsyNDAxLDYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQKIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLAogCQkJICAgICAgIGludCBvYmplY3RzKQogewotCWludCBpOwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAKIAkvKiBzbGFiLSZndDtvYmpfZXh0cyBtaWdodCBub3QgYmUgTlVMTCBpZiBpdCB3YXMgY3JlYXRlZCBmb3IgTUVNQ0cgYWNjb3VudGluZy4gKi8KQEAgLTIzOTYsMTAgJiM0MzsyNDEyLDExIEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwCiAJCXJldHVybjsKIAogCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgb2JqZWN0czsgaSYjNDM7JiM0MzspIHsKLQkJdW5zaWduZWQgaW50IG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7CiAKLQkJYWxsb2NfdGFnX3N1YigmYW1wO3NsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKS0mZ3Q7cmVmLCBzLSZndDtzaXplKTsKJiM0MzsJCWV4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7CiYjNDM7CQlhbGxvY190YWdfc3ViKHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCBleHQpLCBzLSZndDtzaXplKTsKIAl9CiAJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogfQpAQCAtMjQxMiw2ICYjNDM7MjQyOSwyNSBAQCBhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiAJCV9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwLCBvYmplY3RzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWFrZSBzdXJlIHRoZSBzdGF0aWMga2V5IHVzZWQgYnkgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkgcmVmbGVjdHMgdGhlCiYjNDM7ICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKQomIzQzOyAqCiYjNDM7ICogQW55IGxhdGVyIG1lbSBhbGxvYyBwcm9maWxpbmcgc2h1dGRvd24gd29uJiMzOTt0IGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGljIGtleQomIzQzOyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJYm9vbCBuZWVkX2NvZGV0YWcgPSAhbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCgpOwomIzQzOwomIzQzOwlpZiAobmVlZF9jb2RldGFnICE9IHN0YXRpY19rZXlfZW5hYmxlZCgmYW1wO3NsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7CiYjNDM7CQlpZiAobmVlZF9jb2RldGFnKQomIzQzOwkJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc3RhdGljX2JyYW5jaF9kaXNhYmxlKCZhbXA7c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTI0MjYsNiAmIzQzOzI0NjIsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLAogewogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqLwogCiAKQEAgLTI0NzEsNiAmIzQzOzI1MTEsOSBAQCB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiAJaWYgKGxpa2VseSghb2JqX2V4dHMpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAlfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTsKIAlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CkBAIC0yNDg0LDcgJiM0MzsyNTI3LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKQogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBzbGFiICpzbGFiOwotCXVuc2lnbmVkIGxvbmcgb2ZmOwogCiAJcGFnZSA9IHZpcnRfdG9fcGFnZShwKTsKIAlpZiAoUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkgewpAQCAtMjUxNywxNiAmIzQzOzI1NTksMTUgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKQogCSAqIG9mIHNsYWJfb2JqX2V4dHMgYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgc2xhYiBhbmQgdGh1cyB0aGUgc2xhYgogCSAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuCiAJICovCi0JaWYgKGlzX2ttYWxsb2Nfbm9ybWFsKHMpKQomIzQzOwlpZiAoIWNhY2hlX25lZWRzX29iamNnKHMpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qIElnbm9yZSBhbHJlYWR5IGNoYXJnZWQgb2JqZWN0cy4gKi8KIAlvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7CiAJaWYgKG9ial9leHRzKSB7CiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQkJb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApOwotCQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpOwotCQlpZiAodW5saWtlbHkob2JqX2V4dC0mZ3Q7b2JqY2cpKSB7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTsKJiM0MzsJCWlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7CiAJCQlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMzM5MSwxMCAmIzQzOzM0MzIsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywKIAkJc3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7CiAJfQogCiYjNDM7CS8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqLwomIzQzOwlzbGFiLSZndDtjb3VudGVycyA9IDA7CiYjNDM7CiAJc2xhYi0mZ3Q7b2JqZWN0cyA9IG9vX29iamVjdHMob28pOwotCXNsYWItJmd0O2ludXNlID0gMDsKLQlzbGFiLSZndDtmcm96ZW4gPSAwOwogCiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOwlpZiAoY2FjaGVfbmVlZHNfb2JqY2cocykpCiYjNDM7CQlzbGFiLSZndDtvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7CiYjNDM7I2VuZGlmCiAJc2xhYi0mZ3Q7c2xhYl9jYWNoZSA9IHM7CiAKIAlrYXNhbl9wb2lzb25fc2xhYihzbGFiKTsKQEAgLTY1MjYsNyAmIzQzOzY1NzIsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKQogCSAqLwogCWlmIChzLSZndDtmbGFncyAmYW1wOyAoU0xBQl9UWVBFU0FGRV9CWV9SQ1UgfCBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm4gcy0mZ3Q7aW51c2U7Ci0JZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKQomIzQzOwllbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpCiAJCXJldHVybiBzLSZndDtpbnVzZTsKIAkvKgogCSAqIEVsc2Ugd2UgY2FuIHVzZSBhbGwgdGhlIHBhZGRpbmcgZXRjIGZvciB0aGUgYWxsb2NhdGlvbgpAQCAtNzkyOSw3ICYjNDM7Nzk3NSw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCWFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtJmd0O2FsaWduKTsKICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfNjRCSVQpCiAJaWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLSZndDtmbGFncykgJmFtcDsmYW1wOwotCQkJKGFsaWduZWRfc2l6ZSAtIHNpemUgJmd0Oz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpKQomIzQzOwkJCShhbGlnbmVkX3NpemUgLSBzaXplICZndDs9IGNhY2hlX29ial9leHRfc2l6ZShzKSkpCiAJCXMtJmd0O2ZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7CiAjZW5kaWYKIAlzaXplID0gYWxpZ25lZF9zaXplOwpAQCAtODUzOSw2ICYjNDM7ODU4NSw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKQogCQlib290X2ttZW1fY2FjaGVfbm9kZTsKIAlpbnQgbm9kZTsKIAomIzQzOwlzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpOwomIzQzOwogCWlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSkKIAkJc2x1Yl9tYXhfb3JkZXIgPSAwOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzUwCgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgT2JqZWN0IEV4dGVuc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2gsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBzdWJzdGFudGlhbCBjaGFuZ2VzIHRvIGhvdyBgc2xhYm9ial9leHRgIGlzIGhhbmRsZWQgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB0aGlzIGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBob3cgb2JqZWN0IGV4dGVuc2lvbnMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBzbyB0aGlzIGFic29sdXRlbHkgKm5lZWRzKiBmdXp6aW5nLgoKVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhlIHdheSBgc2xhYm9ial9leHRgIGlzIGRlZmluZWQgaW5pdGlhbGx5IGNvbmZ1c2VkIG1lLCBhcyB0aGUgdW5pb24gc3RydWN0dXJlIHNlZW1lZCB0byBzdWdnZXN0IHRoYXQgaWYgYm90aCBmZWF0dXJlcyB3ZXJlIGVuYWJsZWQsIHRoZXkgd291bGQgc2hhcmUgdGhlIHNhbWUgbWVtb3J5LiBCdXQsIG5vLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFjdHVhbGx5IGFuIGFycmF5IG9mIGBzbGFib2JqX2V4dGAgZWxlbWVudHMgcGVyIG9iamVjdC4gSWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgdGhlIGZpcnN0IGVsZW1lbnQgd2lsbCBiZSB1c2VkIGZvciBgb2JqY2dgLCBhbmQgdGhlbiBgY29kZXRhZ19yZWZgIGdvZXMgaW4gdGhlIHNlY29uZC4gVGhlIHNpemUgb2YgYHNsYWJvYmpfZXh0YCBpcyA4IGJ5dGVzLCBhbmQgYHNsYWJfb2JqX2V4dF9zaXplYCByZXR1cm5zIGBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6YCB3aGVyZSBgc3pgIGlzIGVpdGhlciAxIG9yIDIgZGVwZW5kaW5nIG9uIHRoZSBuZWVkLgoKVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUmIzM5O3MgYSBnb29kIGFtb3VudCBvZiBleHRyYSBtZW1vcnkgdXNlIGlmIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFyZSBib3RoIGVuYWJsZWQuCgpMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgbmV3bHkgaW50cm9kdWNlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwb3NlZCBzeW1ib2xzIOKAkyB0aGluZ3MgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG1pZ2h0IGJlIGNhbGxpbmcuIFdlJiMzOTt2ZSBnb3QgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCB0aGUgaW5saW5lIGBzbGFiX29ial9leHRgLCBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBhbmQgYGttZW1fY2FjaGVfY3JlYXRlYCAoaW5kaXJlY3RseSB2aWEgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2ApLCBwbHVzIGBrbWVtX2NhY2hlX2FsbG9jYCBhbmQgYGttZW1fY2FjaGVfZnJlZWAgdmlhIGhvb2tzLgoKTm93LCBsZXQmIzM5O3MgaHVudCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHJlbGV2YW50IGZpbGVzLiBJJiMzOTttIGNoZWNraW5nIGBtbS9zbHViLmNgLCBgbW0vc2xhYl9jb21tb24uY2AsIGFuZCBgbW0vbWVtY29udHJvbC5jYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIG5vbi1zdGF0aWMgaW4gYG1tL3NsdWIuY2AsIGFuZCBzbyBhcmUgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBhbmQgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGhvb2tzLiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGNvbmZpcm0gdGhhdCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyBub24tc3RhdGljLiBGaW5hbGx5LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpcyBub24tc3RhdGljIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4KCkFsc28gdG8ga2VlcCBpbiBtaW5kIGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgQ09ORklHX01FTUNHYCwgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCwgYENPTkZJR19TTEFCX09CSl9FWFRgIChzZWxlY3RlZCBieSB0aGUgYWJvdmUpLCBhbmQgYENPTkZJR19LRkVOQ0VgLiBJIHNob3VsZCB2ZXJpZnkgdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbmFtZXMsIGxhdGVyLCBidXQgdGhlc2UgYXJlIGFsbCBzdGFydGluZyBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sfHN0cnVjdCBbYS16X10mIzQzOyBcXCo/KSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9NDAzPXN0YXRpYyBpbmxpbmVcbm1tL3NsdWIuYzo0MDQ6dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxubW0vc2x1Yi5jLTQwNS17XG4tLVxubW0vc2x1Yi5jPTkzNT1zdGF0aWMgYm9vbCBzbGFiX2FkZF9rdW5pdF9lcnJvcnModm9pZClcbi0tXG5tbS9zbHViLmMtOTUwLVxubW0vc2x1Yi5jOjk1MTpib29sIHNsYWJfaW5fa3VuaXRfdGVzdCh2b2lkKVxubW0vc2x1Yi5jLTk1Mi17XG4tLVxubW0vc2x1Yi5jPTEwOTM9c3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0LCB1bnNpZ25lZCBsb25nIHByX3RpbWUpXG4tLVxubW0vc2x1Yi5jLTExMTAtXG5tbS9zbHViLmM6MTExMTp2b2lkIHByaW50X3RyYWNraW5nKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtMTExMi17XG4tLVxubW0vc2x1Yi5jPTExMjE9c3RhdGljIHZvaWQgcHJpbnRfc2xhYl9pbmZvKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0xMTI3LVxubW0vc2x1Yi5jOjExMjg6dm9pZCBza2lwX29yaWdfc2l6ZV9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTExMjkte1xuLS1cbm1tL3NsdWIuYz0xNzA4PXN0YXRpY1xubW0vc2x1Yi5jOjE3MDk6dm9pZCBzZXR1cF9zbGFiX2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqYWRkcilcbm1tL3NsdWIuYy0xNzEwLXtcbi0tXG5tbS9zbHViLmM9MjAxMD1zdGF0aWMgaW5saW5lXG5tbS9zbHViLmM6MjAxMTp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKSB7fVxubW0vc2x1Yi5jLTIwMTItXG4tLVxubW0vc2x1Yi5jPTIxMjk9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjEzMy1cbm1tL3NsdWIuYzoyMTM0OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM1LVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yNDc2PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI0Nzc6Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjQ3OC1cdFx0XHRcdHNpemVfdCBzaXplLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmM9MjUwMT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTAyOnZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbm1tL3NsdWIuYy0yNTAzLVx0XHRcdCAgaW50IG9iamVjdHMpXG4tLVxubW0vc2x1Yi5jPTI1MjI9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6MjUyMzpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjUyNC17XG4tLVxubW0vc2x1Yi5jPTI2MzY9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vc2x1Yi5jOjI2Mzc6Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxubW0vc2x1Yi5jLTI2MzgtXHRcdCAgICBib29sIGFmdGVyX3JjdV9kZWxheSlcbi0tXG5tbS9zbHViLmM9MjcyMT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNzIyOmJvb2wgc2xhYl9mcmVlX2ZyZWVsaXN0X2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipoZWFkLCB2b2lkICoqdGFpbCxcbm1tL3NsdWIuYy0yNzIzLVx0XHRcdCAgICAgaW50ICpjbnQpXG4tLVxubW0vc2x1Yi5jPTQwNjc9c3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS9zbHViLmMtNDA5MC0vKiBuZWVkZWQgZm9yIGt2ZnJlZV9yY3VfYmFycmllcigpICovXG5tbS9zbHViLmM6NDA5MTp2b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTQwOTIte1xuLS1cbm1tL3NsdWIuYy00MTIxLVxubW0vc2x1Yi5jOjQxMjI6dm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZClcbm1tL3NsdWIuYy00MTIzLXtcbi0tXG5tbS9zbHViLmM9NDU5MT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzo0NTkyOmJvb2wgc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3Qgc2l6ZSxcbm1tL3NsdWIuYy00NTkzLVx0XHRcdCAgdm9pZCAqKnAsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxuLS1cbm1tL3NsdWIuYz01MDAyPUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKTtcbm1tL3NsdWIuYy01MDAzLVxubW0vc2x1Yi5jOjUwMDQ6Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcbm1tL3NsdWIuYy01MDA1LXtcbi0tXG5tbS9zbHViLmM9NTA3OD1rbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubW0vc2x1Yi5jLTUxNjAtICovXG5tbS9zbHViLmM6NTE2MTp2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5tbS9zbHViLmMtNTE2Mi1cdFx0XHQgICAgIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG5tbS9zbHViLmMtNTIxOC0gKi9cbm1tL3NsdWIuYzo1MjE5OmludCBrbWVtX2NhY2hlX3JlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxubW0vc2x1Yi5jLTUyMjAtXHRcdFx0ICAgIHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmM9NTk3Nz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzo1OTc4OmJvb2wgZnJlZV90b19wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTU5Nzkte1xuLS1cbm1tL3NsdWIuYz02MDcxPXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYwNzItXG5tbS9zbHViLmM6NjA3Mzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG5tbS9zbHViLmMtNjA3NC17XG4tLVxubW0vc2x1Yi5jPTYzOTU9c3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjQwNy1cbm1tL3NsdWIuYzo2NDA4OnZvaWQgZGVmZXJfZnJlZV9iYXJyaWVyKHZvaWQpXG5tbS9zbHViLmMtNjQwOS17XG4tLVxubW0vc2x1Yi5jPTY0MTY9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjQxNzp2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcbm1tL3NsdWIuYy02NDE4LVx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9NjQzNT1zdGF0aWMgbm9pbmxpbmVcbm1tL3NsdWIuYzo2NDM2OnZvaWQgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtNjQzNy17XG4tLVxubW0vc2x1Yi5jPTY0NDc9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjQ0ODp2b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcbm1tL3NsdWIuYy02NDQ5LVx0XHQgICAgdm9pZCAqdGFpbCwgdm9pZCAqKnAsIGludCBjbnQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9NjQ2ND1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4tLVxubW0vc2x1Yi5jLTY0OTItI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmM6NjQ5Mzp2b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9zbHViLmMtNjQ5NC17XG4tLVxubW0vc2x1Yi5jPTY1MDA9c3RhdGljIG5vaW5saW5lIHZvaWQgd2Fybl9mcmVlX2JhZF9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbi0tXG5tbS9zbHViLmMtNjUyOS0gKi9cbm1tL3NsdWIuYzo2NTMwOnZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KVxubW0vc2x1Yi5jLTY1MzEte1xuLS1cbm1tL3NsdWIuYz02NjQ0PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy02NjY5LSAqL1xubW0vc2x1Yi5jOjY2NzA6dm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm1tL3NsdWIuYy02NjcxLXtcbi0tXG5tbS9zbHViLmMtNjcxNi0gKi9cbm1tL3NsdWIuYzo2NzE3OnZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTY3MTgte1xuLS1cbm1tL3NsdWIuYz02NzQwPUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuLS1cbm1tL3NsdWIuYy02NzUwLSAqL1xubW0vc2x1Yi5jOjY3NTE6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTY3NTIte1xuLS1cbm1tL3NsdWIuYz02OTgzPUVYUE9SVF9TWU1CT0woX19rdm1hbGxvY19ub2RlX25vcHJvZik7XG4tLVxubW0vc2x1Yi5jLTY5OTQtICovXG5tbS9zbHViLmM6Njk5NTp2b2lkIGt2ZnJlZShjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTY5OTYte1xuLS1cbm1tL3NsdWIuYz03MDAyPUVYUE9SVF9TWU1CT0woa3ZmcmVlKTtcbi0tXG5tbS9zbHViLmMtNzAxMC0gKi9cbm1tL3NsdWIuYzo3MDExOnZvaWQga3ZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTcwMTIte1xuLS1cbm1tL3NsdWIuYz03MDE4PUVYUE9SVF9TWU1CT0woa3ZmcmVlX2F0b21pYyk7XG4tLVxubW0vc2x1Yi5jLTcwMjgtICovXG5tbS9zbHViLmM6NzAyOTp2b2lkIGt2ZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcbm1tL3NsdWIuYy03MDMwLXtcbi0tXG5tbS9zbHViLmM9NzA4Nz1zdGF0aWMgaW5saW5lXG5tbS9zbHViLmM6NzA4ODppbnQgYnVpbGRfZGV0YWNoZWRfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTcwODktXHRcdFx0ICAgIHZvaWQgKipwLCBzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgKmRmKVxuLS1cbm1tL3NsdWIuYz03MTUyPXN0YXRpYyB2b2lkIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzE3Mi0vKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXG5tbS9zbHViLmM6NzE3Mzp2b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG5tbS9zbHViLmMtNzE3NC17XG4tLVxubW0vc2x1Yi5jPTczNzI9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDIxLSAqL1xubW0vc2x1Yi5jOjc0MjI6Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbm1tL3NsdWIuYy03NDIzLVx0XHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jPTc3Mzg9c3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03NzYwLVxubW0vc2x1Yi5jOjc3NjE6dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy03NzYyLXtcbi0tXG5tbS9zbHViLmM9ODA0OT1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXG4tLVxubW0vc2x1Yi5jLTgwNjktXG5tbS9zbHViLmM6ODA3MDpib29sIF9fa21lbV9jYWNoZV9lbXB0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04MDcxLXtcbi0tXG5tbS9zbHViLmMtODA4My0gKi9cbm1tL3NsdWIuYzo4MDg0OmludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtODA4NS17XG4tLVxubW0vc2x1Yi5jLTgxMTEtI2lmZGVmIENPTkZJR19QUklOVEtcbm1tL3NsdWIuYzo4MTEyOnZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtODExMy17XG4tLVxubW0vc2x1Yi5jPTgyMzY9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFx1MDAyNnBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hLCBOVUxMLCAwKTtcbi0tXG5tbS9zbHViLmMtODI0OC0gKi9cbm1tL3NsdWIuYzo4MjQ5OnZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbm1tL3NsdWIuYy04MjUwLVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCB0b191c2VyKVxuLS1cbm1tL3NsdWIuYz04MzAxPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODM2OS1cbm1tL3NsdWIuYzo4MzcwOmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTgzNzEte1xuLS1cbm1tL3NsdWIuYz04NjQ2PXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXG4tLVxubW0vc2x1Yi5jLTg2NTUtXG5tbS9zbHViLmM6ODY1NjppbnQgZG9fa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbHViLmMtODY1Ny1cdFx0XHQgdW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsXG4tLVxubW0vc2x1Yi5jPTk2ODk9c3RhdGljIGludCBzeXNmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtOTczMi1cbm1tL3NsdWIuYzo5NzMzOnZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtOTczNC17XG4tLVxubW0vc2x1Yi5jLTk3MzgtXG5tbS9zbHViLmM6OTczOTp2b2lkIHN5c2ZzX3NsYWJfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy05NzQwLXtcbi0tXG5tbS9zbHViLmM9OTc1ND1zdGF0aWMgc3RydWN0IHNhdmVkX2FsaWFzICphbGlhc19saXN0O1xubW0vc2x1Yi5jLTk3NTUtXG5tbS9zbHViLmM6OTc1NjppbnQgc3lzZnNfc2xhYl9hbGlhcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSlcbm1tL3NsdWIuYy05NzU3LXtcbi0tXG5tbS9zbHViLmM9OTk5Nz1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy0xMDAxMi1cbm1tL3NsdWIuYzoxMDAxMzp2b2lkIGRlYnVnZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTEwMDE0LXtcbi0tXG5tbS9zbHViLmM9MTAwMzE9X19pbml0Y2FsbChzbGFiX2RlYnVnZnNfaW5pdCk7XG4tLVxubW0vc2x1Yi5jLTEwMDM2LSNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jOjEwMDM3OnZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxubW0vc2x1Yi5jLTEwMDM4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYyMgoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBTbHViIE1lbW9yeSBNYW5hZ2VtZW50IExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNsdWIuY2AgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgbWVtb3J5IGFjY291bnRpbmcgZnVuY3Rpb25zIGludGVyYWN0LiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgd2FzIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGFuZCBgbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGFyZSBhbGwgaG91c2VkIG5lYXRseSB3aXRoaW4gYG1tL3NsdWIuY2AuIEJ1dCBob2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBvZmYgYWJvdXQgdGhhdCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgbG9jYXRpb24uLi4gSXQgKmlzKiBpbiBgbW0vc2x1Yi5jYCwgaXNuJiMzOTt0IGl0PyBPaCByaWdodCwgSSYjMzk7bSBmb3JnZXR0aW5nIGFib3V0IHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQuIFllcywgaXQmIzM5O3MgbW9kaWZpZWQgd2l0aGluIGBtbS9zbHViLmNgLCB0aGF0IG1ha2VzIHNlbnNlLgoKTm93IEkmIzM5O20gcXVlc3Rpb25pbmcgd2hldGhlciBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYG1tL3NsYWJfY29tbW9uLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGNydWNpYWwgZGVwZW5kZW5jaWVzIGx1cmtpbmcgdGhlcmUgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gaGF2ZSBhIHdpZGVyIHZpZXcgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8c3RydWN0IFthLXpfXSYjNDM7IFxcKj8pIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jPTEyOD1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9hbGlnbm1lbnQoc2xhYl9mbGFnc190IGZsYWdzLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTU0LSAqL1xubW0vc2xhYl9jb21tb24uYzoxNTU6aW50IHNsYWJfdW5tZXJnZWFibGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbGFiX2NvbW1vbi5jLTE1Ni17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xNzYtXG5tbS9zbGFiX2NvbW1vbi5jOjE3Nzpib29sIHNsYWJfYXJnc191bm1lcmdlYWJsZShzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG5tbS9zbGFiX2NvbW1vbi5jLTE3OC17XG4tLVxubW0vc2xhYl9jb21tb24uYz01MTg9c3RhdGljIHZvaWQga21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNTI2LVxubW0vc2xhYl9jb21tb24uYzo1Mjc6dm9pZCBzbGFiX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtNTI4LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTUzMy1cbm1tL3NsYWJfY29tbW9uLmM6NTM0OnZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYl9jb21tb24uYy01MzUte1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9NTk4PUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9kZXN0cm95KTtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTYwOC0gKi9cbm1tL3NsYWJfY29tbW9uLmM6NjA5OmludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKVxubW0vc2xhYl9jb21tb24uYy02MTAte1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9NjE1PUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9zaHJpbmspO1xubW0vc2xhYl9jb21tb24uYy02MTYtXG5tbS9zbGFiX2NvbW1vbi5jOjYxNzpib29sIHNsYWJfaXNfYXZhaWxhYmxlKHZvaWQpXG5tbS9zbGFiX2NvbW1vbi5jLTYxOC17XG4tLVxubW0vc2xhYl9jb21tb24uYz02MjM9c3RhdGljIHZvaWQga21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNjQ0LSAqL1xubW0vc2xhYl9jb21tb24uYzo2NDU6Ym9vbCBrbWVtX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbm1tL3NsYWJfY29tbW9uLmMtNjQ2LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEwNzM9c3RhdGljIHZvaWQgZnJlZWxpc3RfcmFuZG9taXplKHVuc2lnbmVkIGludCAqbGlzdCxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEwODktLyogQ3JlYXRlIGEgcmFuZG9tIHNlcXVlbmNlIHBlciBjYWNoZSAqL1xubW0vc2xhYl9jb21tb24uYzoxMDkwOmludCBjYWNoZV9yYW5kb21fc2VxX2NyZWF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB1bnNpZ25lZCBpbnQgY291bnQsXG5tbS9zbGFiX2NvbW1vbi5jLTEwOTEtXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTEwNS0vKiBEZXN0cm95IHRoZSBwZXItY2FjaGUgcmFuZG9tIGZyZWVsaXN0IHNlcXVlbmNlICovXG5tbS9zbGFiX2NvbW1vbi5jOjExMDY6dm9pZCBjYWNoZV9yYW5kb21fc2VxX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcbm1tL3NsYWJfY29tbW9uLmMtMTEwNy17XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMTYzPXN0YXRpYyBpbnQgc2xhYl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTExNzItXG5tbS9zbGFiX2NvbW1vbi5jOjExNzM6dm9pZCBkdW1wX3VucmVjbGFpbWFibGVfc2xhYih2b2lkKVxubW0vc2xhYl9jb21tb24uYy0xMTc0LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyNDU9bW9kdWxlX2luaXQoc2xhYl9wcm9jX2luaXQpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTI1OS0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MTI2MDp2b2lkIGtmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICpwKVxubW0vc2xhYl9jb21tb24uYy0xMjYxLXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzAwLVxubW0vc2xhYl9jb21tb24uYzoxMzAxOnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxubW0vc2xhYl9jb21tb24uYy0xMzAyLXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTE5NTA9dm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xOTczLSAqL1xubW0vc2xhYl9jb21tb24uYzoxOTc0OnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxubW0vc2xhYl9jb21tb24uYy0xOTc1LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIwNTA9c3RhdGljIGlubGluZSB2b2lkIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMTI4LSAqL1xubW0vc2xhYl9jb21tb24uYzoyMTI5OnZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG5tbS9zbGFiX2NvbW1vbi5jLTIxMzAte1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjEzND1FWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjE0Mi0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MjE0Mzp2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE0NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMzMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyBzaWduaWZpY2FudC4gVGhlIG1lbW9yeSBjb250cm9sIHN1YnN5c3RlbSBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgYW55IGNoYW5nZXMgdGhlcmUgd2FycmFudCBhICp2ZXJ5KiBjbG9zZSBsb29rLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbiBpcyBzb3VuZCwgYW5kIEkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nICp3aHkqIHRoaXMgZmlsZSB3YXMgY2hvc2VuIGZvciBtb2RpZmljYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2VzIGFyZSBsb2dpY2FsbHkgcmVsYXRlZCB0byB0aGUgcHJpbWFyeSBpbnRlbnQgb2YgdGhlIHBhdGNoIG9yIGlmIHRoZXkgcmVwcmVzZW50IGEgcG90ZW50aWFsbHkgcmlza3kgc2lkZSBlZmZlY3Qgb3IgdW5yZWxhdGVkIHJlZmFjdG9yaW5nLiBBIGRlZXAgZGl2ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sfHN0cnVjdCBbYS16X10mIzQzOyBcXCo/KSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MTMxPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XG5tbS9tZW1jb250cm9sLmMtMTMyLVxubW0vbWVtY29udHJvbC5jOjEzMzpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxubW0vbWVtY29udHJvbC5jLTEzNC17XG4tLVxubW0vbWVtY29udHJvbC5jPTUyOT1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzEtXG5tbS9tZW1jb250cm9sLmM6NTMyOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy01MzMtXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmM9NzA0PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpXG4tLVxubW0vbWVtY29udHJvbC5jLTcyOC0gKi9cbm1tL21lbWNvbnRyb2wuYzo3Mjk6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy03MzAte1xuLS1cbm1tL21lbWNvbnRyb2wuYy03MzktXG5tbS9tZW1jb250cm9sLmM6NzQwOnZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzQxLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NzU3PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTc3Mi1cbm1tL21lbWNvbnRyb2wuYzo3NzM6Ym9vbCBtZW1jZ19zdGF0X2l0ZW1fdmFsaWQoaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy03NzQte1xuLS1cbm1tL21lbWNvbnRyb2wuYz04NDU9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzAtICovXG5tbS9tZW1jb250cm9sLmM6ODcxOnZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxubW0vbWVtY29udHJvbC5jLTg3Mi1cdFx0ICAgICAgIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTg4Nj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy05MDEtXG5tbS9tZW1jb250cm9sLmM6OTAyOnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTkwMy1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jPTkzNz1zdGF0aWMgdm9pZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTY0LSAqL1xubW0vbWVtY29udHJvbC5jOjk2NTp2b2lkIG1vZF9scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcbm1tL21lbWNvbnRyb2wuYy05NjYtXHRcdFx0aW50IHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtOTc1LVxubW0vbWVtY29udHJvbC5jOjk3Njp2b2lkIGxydXZlY19zdGF0X21vZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcbm1tL21lbWNvbnRyb2wuYy05NzctXHRcdFx0ICAgICBpbnQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYz05OTY9RVhQT1JUX1NZTUJPTChscnV2ZWNfc3RhdF9tb2RfZm9saW8pO1xubW0vbWVtY29udHJvbC5jLTk5Ny1cbm1tL21lbWNvbnRyb2wuYzo5OTg6dm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXG5tbS9tZW1jb250cm9sLmMtOTk5LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTAyNy0gKi9cbm1tL21lbWNvbnRyb2wuYzoxMDI4OnZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCxcbm1tL21lbWNvbnRyb2wuYy0xMDI5LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBjb3VudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTA0OT11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA1OC1cbm1tL21lbWNvbnRyb2wuYzoxMDU5OmJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxubW0vbWVtY29udHJvbC5jLTEwNjAte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMjEzPXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTEzMDQtICovXG5tbS9tZW1jb250cm9sLmM6MTMwNTp2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbm1tL21lbWNvbnRyb2wuYy0xMzA2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICpwcmV2KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMzI4PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKmRlYWRfbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTEzNjEtICovXG5tbS9tZW1jb250cm9sLmM6MTM2Mjp2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtMTM2My1cdFx0XHQgICBpbnQgKCpmbikoc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKiksIHZvaWQgKmFyZylcbi0tXG5tbS9tZW1jb250cm9sLmM9MTQ1Nj1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE0ODItICovXG5tbS9tZW1jb250cm9sLmM6MTQ4Mzp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTQ4NC1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTE3NTE9c3RhdGljIHZvaWQgbWVtb3J5X3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3NjktICovXG5tbS9tZW1jb250cm9sLmM6MTc3MDp2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5tbS9tZW1jb250cm9sLmMtMTc3MS17XG4tLVxubW0vbWVtY29udHJvbC5jLTE3OTAtICovXG5tbS9tZW1jb250cm9sLmM6MTc5MTp2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTE3OTIte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xODM1PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg1My1cbm1tL21lbWNvbnRyb2wuYzoxODU0OnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTE4NTUtXHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcbi0tXG5tbS9tZW1jb250cm9sLmM9MTk0Nz1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTkzLVxubW0vbWVtY29udHJvbC5jOjE5OTQ6dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMTk5NS17XG4tLVxubW0vbWVtY29udHJvbC5jPTIyNTk9c3RhdGljIHZvaWQgc2NoZWR1bGVfZHJhaW5fd29yayhpbnQgY3B1LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtY29udHJvbC5jLTIyNzUtICovXG5tbS9tZW1jb250cm9sLmM6MjI3Njp2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcbm1tL21lbWNvbnRyb2wuYy0yMjc3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjQ2OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI1MDQtICovXG5tbS9tZW1jb250cm9sLmM6MjUwNTp2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxubW0vbWVtY29udHJvbC5jLTI1MDYte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTIyPXN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMxMzQtICovXG5tbS9tZW1jb250cm9sLmM6MzEzNTppbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0zMTM2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1Ni0gKi9cbm1tL21lbWNvbnRyb2wuYzozMTU3OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcbm1tL21lbWNvbnRyb2wuYy0zMTU4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzQ3Mj1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTM0ODUtXG5tbS9tZW1jb250cm9sLmM6MzQ4NjppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxubW0vbWVtY29udHJvbC5jLTM0ODcte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTIzLVxubW0vbWVtY29udHJvbC5jOjM1MjQ6dm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpXG5tbS9tZW1jb250cm9sLmMtMzUyNS17XG4tLVxubW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNjM0LVxubW0vbWVtY29udHJvbC5jOjM2MzU6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL21lbWNvbnRyb2wuYy0zNjM2LVx0XHRcdCAgICB2b2lkICoqcCwgaW50IG9iamVjdHMsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXG4tLVxubW0vbWVtY29udHJvbC5jLTM2NjUtICovXG5tbS9tZW1jb250cm9sLmM6MzY2Njp2b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG9yZGVyKVxubW0vbWVtY29udHJvbC5jLTM2Njcte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0zNjc5LVxubW0vbWVtY29udHJvbC5jOjM2ODA6dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbm1tL21lbWNvbnRyb2wuYy0zNjgxLVx0XHR1bnNpZ25lZCBuZXdfb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM3Mzg9c3RydWN0IHdiX2RvbWFpbiAqbWVtX2Nncm91cF93Yl9kb21haW4oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNzY1LSAqL1xubW0vbWVtY29udHJvbC5jOjM3NjY6dm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgbG9uZyAqcGZpbGVwYWdlcyxcbm1tL21lbWNvbnRyb2wuYy0zNzY3LVx0XHRcdCB1bnNpZ25lZCBsb25nICpwaGVhZHJvb20sIHVuc2lnbmVkIGxvbmcgKnBkaXJ0eSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzgzNC0gKi9cbm1tL21lbWNvbnRyb2wuYzozODM1OnZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9tZW1jb250cm9sLmMtMzgzNi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vbWVtY29udHJvbC5jLTM4ODctLyogaXNzdWUgZm9yZWlnbiB3cml0ZWJhY2sgZmx1c2hlcyBmb3IgcmVjb3JkZWQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzozODg4OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yilcbm1tL21lbWNvbnRyb2wuYy0zODg5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDkwMT1zdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MDgtXG5tbS9tZW1jb250cm9sLmM6NDkwOTppbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5tbS9tZW1jb250cm9sLmMtNDkxMC17XG4tLVxubW0vbWVtY29udHJvbC5jPTUwODA9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTA1LSAqL1xubW0vbWVtY29udHJvbC5jOjUxMDY6dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxubW0vbWVtY29udHJvbC5jLTUxMDctXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmM9NTEyMT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNDAtXG5tbS9tZW1jb250cm9sLmM6NTE0MTppbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxubW0vbWVtY29udHJvbC5jLTUxNDIte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTY0LSAqL1xubW0vbWVtY29udHJvbC5jOjUxNjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxubW0vbWVtY29udHJvbC5jLTUxNjYte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTk4LSAqL1xubW0vbWVtY29udHJvbC5jOjUxOTk6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbm1tL21lbWNvbnRyb2wuYy01MjAwLVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1NT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1Zylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTMwMC1cbm1tL21lbWNvbnRyb2wuYzo1MzAxOnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTMwMi17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzMTMtXG5tbS9tZW1jb250cm9sLmM6NTMxNDp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXG5tbS9tZW1jb250cm9sLmMtNTMxNS17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzMzUtICovXG5tbS9tZW1jb250cm9sLmM6NTMzNjp2b2lkIG1lbV9jZ3JvdXBfcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG5tbS9tZW1jb250cm9sLmMtNTMzNy17XG4tLVxubW0vbWVtY29udHJvbC5jLTUzODQtICovXG5tbS9tZW1jb250cm9sLmM6NTM4NTp2b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG5tbS9tZW1jb250cm9sLmMtNTM4Ni17XG4tLVxubW0vbWVtY29udHJvbC5jPTU0MTc9RVhQT1JUX1NZTUJPTChtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcbm1tL21lbWNvbnRyb2wuYy01NDE4LVxubW0vbWVtY29udHJvbC5jOjU0MTk6dm9pZCBtZW1fY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaylcbm1tL21lbWNvbnRyb2wuYy01NDIwLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQ0MS1cbm1tL21lbWNvbnRyb2wuYzo1NDQyOnZvaWQgbWVtX2Nncm91cF9za19mcmVlKHN0cnVjdCBzb2NrICpzaylcbm1tL21lbWNvbnRyb2wuYy01NDQzLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQ0OS1cbm1tL21lbWNvbnRyb2wuYzo1NDUwOnZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubW0vbWVtY29udHJvbC5jLTU0NTEte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NDc0LSAqL1xubW0vbWVtY29udHJvbC5jOjU0NzU6Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbm1tL21lbWNvbnRyb2wuYy01NDc2LVx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OTUtICovXG5tbS9tZW1jb250cm9sLmM6NTQ5Njp2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTQ5Ny17XG4tLVxubW0vbWVtY29udHJvbC5jLTU1MDktXG5tbS9tZW1jb250cm9sLmM6NTUxMDp2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNTUxMS17XG4tLVxubW0vbWVtY29udHJvbC5jPTU1NDE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU4NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NTg2OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTU4Ny17XG4tLVxubW0vbWVtY29udHJvbC5jLTU2MzUtICovXG5tbS9tZW1jb250cm9sLmM6NTYzNjp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTYzNy17XG4tLVxubW0vbWVtY29udHJvbC5jPTU2NTU9bG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY2Ny1cbm1tL21lbWNvbnRyb2wuYzo1NjY4OmJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy01NjY5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc5Mz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4NDAtICovXG5tbS9tZW1jb250cm9sLmM6NTg0MTpib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbm1tL21lbWNvbnRyb2wuYy01ODQyLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg4MS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1ODgyOnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy01ODgzLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTkxMy0gKi9cbm1tL21lbWNvbnRyb2wuYzo1OTE0OnZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxubW0vbWVtY29udHJvbC5jLTU5MTUte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01OTM0LVxubW0vbWVtY29udHJvbC5jOjU5MzU6Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy01OTM2LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjA0MD1zdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MDQzLVxubW0vbWVtY29udHJvbC5jOjYwNDQ6dm9pZCBtZW1fY2dyb3VwX25vZGVfZmlsdGVyX2FsbG93ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBub2RlbWFza190ICptYXNrKVxubW0vbWVtY29udHJvbC5jLTYwNDUte1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MDYwLVxubW0vbWVtY29udHJvbC5jOjYwNjE6dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNjA2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNZW1vcnkgQ29udHJvbCBNb2R1bGUgRGVlcCBEaXZlKioKCkhtbSwgbGV0IG1lIHRoaW5rLi4uIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIHdhcyBzaXR1YXRlZCBpbiBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSBrZXJuZWwsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHNsYWIgYWxsb2NhdG9yIGl0c2VsZi4gQnV0IHdhaXQgYSBtaW51dGUuLi4gdGhhdCBkb2VzbiYjMzk7dCBxdWl0ZSBzaXQgcmlnaHQuIExldCYjMzk7cyByZXZpc2l0IHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlIGFnYWluLiBJIHNob3VsZCBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZnVuY3Rpb25zLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgcHJlY2lzZSBsb2NhdGlvbiBvZiBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IHJlZ2FyZGluZyBhbGwgb2YgdGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkwNi1cdGlmIChzbGFiKVxubW0vbWVtY29udHJvbC5jOjI5MDc6XHRcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XG5tbS9tZW1jb250cm9sLmMtMjkwOC1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjayh2aXJ0X3RvX2ZvbGlvKHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU2xhYiBDYWNoZSBIb29rIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG1hcmtlZCBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYW5kIGV4cGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHdpdGhpbiB0aGUgbW9kdWxlLiBCdXQgdGhlbiBteSBtaW5kIGp1bXBzIHRvIHRoZSBob29rcywgYW5kIEkgc2VlIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaGVyZSwgSeKAmW0gdGhpbmtpbmcsIHdoeSBhcmVu4oCZdCB0aGUgc2xhYiBjYWNoZSBhbGxvY2F0aW9uIGFuZCBmcmVlIGhvb2sgZnVuY3Rpb25zIHN0YXRpYz8gIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIHBhdXNlLiBBbmQgdGhlbiB0aGVyZeKAmXMgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBhbHNvIG5vdCBzdGF0aWMuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIGdsb2JhbCBpbnRlbnQgd2l0aCB0aGVpciBzY29wZSB0aGFuIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiBzdWdnZXN0cyBmb3IgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAuIFRoaXMgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGEgKnByb2JsZW0qLCBidXQgaXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24gZm9yIGhvdyB0aGVzZSBob29rIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIHNsYWIgYWxsb2NhdG9yIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVsbCBjb250ZXh0IGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBhcmUgcmVhbGx5IGludGVuZGVkIHRvIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jPTI2Nz1fX2ttZW1fY2FjaGVfYWxpYXMoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTI5MS0vKipcbm1tL3NsYWJfY29tbW9uLmM6MjkyOiAqIF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyAtIENyZWF0ZSBhIGttZW0gY2FjaGUuXG5tbS9zbGFiX2NvbW1vbi5jLTI5My0gKiBAbmFtZTogQSBzdHJpbmcgd2hpY2ggaXMgdXNlZCBpbiAvcHJvYy9zbGFiaW5mbyB0byBpZGVudGlmeSB0aGlzIGNhY2hlLlxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMzE3LSAqL1xubW0vc2xhYl9jb21tb24uYzozMTg6c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxubW0vc2xhYl9jb21tb24uYy0zMTktXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemUsXG4tLVxubW0vc2xhYl9jb21tb24uYy00MDgtfVxubW0vc2xhYl9jb21tb24uYzo0MDk6RVhQT1JUX1NZTUJPTChfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MpO1xubW0vc2xhYl9jb21tb24uYy00MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTFVCIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHRob3VnaCBpdCBpc24mIzM5O3Qgc3RhdGljIGVpdGhlci4gVGhpcyBzZWVtcyBhIGxpdHRsZSB1bnVzdWFsLiBOb3csIGxldCBtZSB0aGluay4uLiBBaGEhIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCB3aGljaCBpcyBpbmxpbmUgd2l0aGluIGBtbS9zbHViLmNgLiBSaWdodCwgdGhhdCBleHBsYWlucyB0aGUgYWNjZXNzLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgZGVmaW5lZC4gSXMgaXQgaW4gYG1tL3NsdWIuY2Agb3IgcGVyaGFwcyBoaWRpbmcgaW4gYG1tL3NsYWJfY29tbW9uLmNgPyBPa2F5LCBJJiMzOTt2ZSBjaGVja2VkLi4uIGl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYG1tL3NsdWIuY2AuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgKmRlY2xhcmVkKiBpbiBgbW0vc2xhYi5oYC4gSG1tLCB0aGF0JiMzOTtzIGEga2V5IGRldGFpbC4gVGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhbGxvY19zbGFiX29ial9leHRzYCB3aXRoaW4gYG1tL3NsdWIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIxMjk9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjEzMy1cbm1tL3NsdWIuYzoyMTM0OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM1LVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMjIzPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjI1NC0gKi9cbm1tL3NsdWIuYzoyMjU1OnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIyNTYte1xuLS1cbm1tL3NsdWIuYz0yMzAyPXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMDUtXG5tbS9zbHViLmM6MjMwNjpzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMDctXHRcdFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0yMzEyPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjMxNS1cbm1tL3NsdWIuYzoyMzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMTctXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz0yMzI2PXByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjMzMi1cbm1tL3NsdWIuYzoyMzMzOlx0XHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjMzNC1cdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzc3LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNzg6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzNzktXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzQwMD1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDU1LVx0ICovXG5tbS9zbHViLmM6MzQ1NjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQ1Ny1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBhbGxvY19zbGFiX29ial9leHRzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIHNsYWIgYWxsb2NhdG9yIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgZXh0ZW5kZWQgb2JqZWN0IGZlYXR1cmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgbGlrZWx5IG5vbi1zdGF0aWMgaWYgYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGVuYWJsZWQuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24uLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBkZWZpbml0aW9uIG5vdywgYW5kIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLgoKTm93LCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBJZiBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIHVzZWQgbW9yZSBicm9hZGx5LCBidXQgdGhlIGNvZGUgc2NhbiBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzICpvbmx5KiB1c2VkIHdpdGhpbiBgbW0vc2x1Yi5jYCBpdHNlbGYsIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyBub3QgdGhlIHVzdWFsIHBhdHRlcm4uIFVzdWFsbHksIGlmIGEgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYyBpdCB3aWxsIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgZmlsZS4KCkFoYSEgYG1tL21lbWNvbnRyb2wuY2AgKmRvZXMqIGNhbGwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgISBFeGNlbGxlbnQsIHRoYXQgYW5zd2VycyBhIGJpdCBvZiB0aGUgcHV6emxlLCBidXQgbGV0JiMzOTtzIGdvIGNoZWNrIGBtbS9tZW1jb250cm9sLmNgIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG51YW5jZSBpcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTg4LVx0XHRcdFx0Y29udGludWU7XG5tbS9tZW1jb250cm9sLmM6MzU4OTpcdFx0XHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpXG5tbS9tZW1jb250cm9sLmMtMzU5MC1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgSG9va3MqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgYXMgYSBrZXkgZnVuY3Rpb24sIHNlZWluZyBhcyBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGZ1bmN0aW9ucyBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQuIFdhaXQgYSBzZWNvbmQsIHRob3VnaDsgSSByZWNhbGwgbm93IHRoYXQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIHdoaWNoIGlzIGFjdHVhbGx5IGlubGluZWQgZnJvbSBgbW0vc2x1Yi5jYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0IG9uZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcnJlY3QgZGVmaW5pdGlvbi4gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AgZGlyZWN0bHkgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzUyOT1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZnVsbF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxubW0vbWVtY29udHJvbC5jOjM1Mzg6Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbm1tL21lbWNvbnRyb2wuYy0zNTM5LVx0XHRcdFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkhvb2sgSW52ZXN0aWdhdGlvbioqCgpSaWdodCwgc28gYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIHRoYXQmIzM5O3MgdXNlZnVsLCB0aGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIGludGVydmVudGlvbiwgbGlrZWx5IGZyb20gZXh0ZXJuYWwgbW9kdWxlcyBvciBwZXJoYXBzIGV2ZW4gaW4gYSBzeXN0ZW0td2lkZSBvciBjb3JlIHdheS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdHJhY2luZyBjYWxscyB0aHJvdWdoIHRoZSBhbGxvY2F0aW9uL2ZyZWUgcGF0aC4gV2hhdCBhYm91dCB0aGUgY291bnRlcnBhcnQ/IEkgbmVlZCB0byBjaGVjayBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AuIElzIGl0IHN0YXRpYyBhcyB3ZWxsPyBJcyB0aGVyZSBhbnkgc2ltaWxhciBiZWhhdmlvciB3aXRoIHRoZSBmcmVlIGhvb2s/IEJlY2F1c2UgdGhlIHBvc3QtYWxsb2NhdGlvbiBvbmUgaXMgbm9uIHN0YXRpYyBpdCB3aWxsIGhhdmUgc2VyaW91cyBpbXBsaWNhdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzg9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cbm1tL21lbWNvbnRyb2wuYzozNjM1OnZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9tZW1jb250cm9sLmMtMzYzNi1cdFx0XHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDExMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgSW50ZXJhY3Rpb24gd2l0aCBTTFVCIEFsbG9jYXRvcioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBpbnRlcmFjdCB3aXRoIHRoZSBTTFVCIGFsbG9jYXRvci4gTGV0IG1lIHNlZSwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tg4oCmIFl1cCwgdGhhdOKAmXMgY29uZmlybWVkLCBpdCYjMzk7cyBkZWZpbml0ZWx5ICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gR29vZCwgdGhhdCBoZWxwcyBjbGFyaWZ5IGEgc3BlY2lmaWMgcG9pbnQuIE5vdywgd2hhdCBhYm91dCB0aGUgb3RoZXIgc2lkZSBvZiB0aGlzPyBMZXQgbWUgY2hlY2vigKYgYWgsIHllcywgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLiBUaGF0IGxvb2tzIGludGVyZXN0aW5nLCBhbmQgaXQgbGl2ZXMgb3ZlciBpbiBgbW0vc2x1Yi5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGF0IGZpbGUgYW5kIHVuZGVyc3RhbmQgaG93IGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFNMVUIgY29kZS4gR290dGEgZGl2ZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfc2xhYl9wb3N0X2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjUyMj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTIzOmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbm1tL3NsdWIuYy0yNTI0LXtcbi0tXG5tbS9zbHViLmM9MjU5MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yNTk0LVxubW0vc2x1Yi5jOjI1OTU6c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjU5Ni17XG4tLVxubW0vc2x1Yi5jPTUwMDQ9Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcbi0tXG5tbS9zbHViLmMtNTAwOC1cbm1tL3NsdWIuYzo1MDA5Olx0cmV0dXJuIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uob2JqcCwgZ2ZwZmxhZ3MpO1xubW0vc2x1Yi5jLTUwMTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFNsYWIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZWAgd2l0aGluIGBtbS9zbHViLmNgLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3Mgb3B0aW1pemVkIGZvciBzcGVlZCBhbmQgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IHdpdGhpbiB0aGF0IGZpbGUuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgYGttZW1fY2FjaGVfY2hhcmdlYC4gVGhhdCYjMzk7cyBub3Qgc3RhdGljOyBpdCYjMzk7cyBleHBvcnRlZCwgbWVhbmluZyBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBjYWxsIGl0LiAgUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrbWVtX2NhY2hlX2NoYXJnZWAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBsaWVzLCBhbmQgd2hhdCYjMzk7cyBkcml2aW5nIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUwMDI9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2YpO1xubW0vc2x1Yi5jLTUwMDMtXG5tbS9zbHViLmM6NTAwNDpib29sIGttZW1fY2FjaGVfY2hhcmdlKHZvaWQgKm9ianAsIGdmcF90IGdmcGZsYWdzKVxubW0vc2x1Yi5jLTUwMDUte1xuLS1cbm1tL3NsdWIuYy01MDEwLX1cbm1tL3NsdWIuYzo1MDExOkVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9jaGFyZ2UpO1xubW0vc2x1Yi5jLTUwMTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBTbGFiIEFsbG9jYXRvciBJbnRlcm5hbHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc2xhYiBhbGxvY2F0b3Igc3R1ZmYuIGBrbWVtX2NhY2hlX2NoYXJnZWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIGFsbG9jYXRpb24gY29zdHMsIHJpZ2h0PyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgcHJvY2Vzcy4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIG91dCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4gSXQgbG9va3MgbGlrZSB0aGF0IG9uZSYjMzk7cyB0aGUgaGVhcnQgb2YgaG93IHRoZXNlIGNhY2hlcyBhcmUgYWN0dWFsbHkgbWFkZSwgSSBzZWUgdGhhdCBpdCYjMzk7cyBpbiBgbW0vc2xhYl9jb21tb24uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBhcmUgd29ya2luZywgYW5kIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cbm1tL3NsYWJfY29tbW9uLmMtMjkzLSAqIEBuYW1lOiBBIHN0cmluZyB3aGljaCBpcyB1c2VkIGluIC9wcm9jL3NsYWJpbmZvIHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUuXG4tLVxubW0vc2xhYl9jb21tb24uYy0zMTctICovXG5tbS9zbGFiX2NvbW1vbi5jOjMxODpzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZSxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XG5tbS9zbGFiX2NvbW1vbi5jOjQwOTpFWFBPUlRfU1lNQk9MKF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyk7XG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1NDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKUmlnaHQsIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gY2VudGVyIG9uLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBjYWNoZSBjcmVhdGlvbiwgbWFraW5nIGl0IGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gQnV0IHdhaXQuLi4gd2hhdCBhYm91dCBgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2A/IFRoYXQmIzM5O3MgcmlnaHQsIGl0JiMzOTtzIGRlZmluZWQgaW5saW5lLCBzbyBpdHMgYmVoYXZpb3IgaXMgaW50aW1hdGVseSB0aWVkIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJbnRlcmVzdGluZy4uLiBub3csIGhhbmcgb24gYSBzZWNvbmQuIElzbiYjMzk7dCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLCBJIHNob3VsZCBjb25maXJtIHRoYXQgaW4gYG1tL3NsdWIuY2AgcmlnaHQgYXdheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTI0MDA9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyNDAxOl9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxubW0vc2x1Yi5jLTI0MDItXHRcdFx0ICAgICAgIGludCBvYmplY3RzKVxuLS1cbm1tL3NsdWIuYz0yNDI1PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQyOC1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyNDI5Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG5tbS9zbHViLmMtMjQzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlY2lwaGVyaW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGBzdGF0aWMgbm9pbmxpbmUgdm9pZGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgY3JpdGljYWwgdGhpbmdzLiBJdCYjMzk7cyBgc3RhdGljYCwgbWVhbmluZyBpdHMgc2NvcGUgaXMgcmVzdHJpY3RlZCB0byB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQg4oCTIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhpcyBtb2R1bGUuIFRoZSBgbm9pbmxpbmVgIGF0dHJpYnV0ZSBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbnN0cnVjdGluZyBpdCAqbm90KiB0byBpbmxpbmUgdGhpcyBmdW5jdGlvbiYjMzk7cyBjb2RlIGludG8gYW55IGNhbGwgc2l0ZXMuIFRoaXMgbWlnaHQgYmUgZHVlIHRvIHNpemUgY29uc3RyYWludHMsIGRlYnVnZ2luZyBjb25zaWRlcmF0aW9ucywgb3IgcGVyaGFwcyBiZWNhdXNlIHdlIHdhbnQgcHJlY2lzZSBjb250cm9sIG92ZXIgd2hlcmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGNvZGUgcmVzaWRlcyBpbiBtZW1vcnkuCgpOb3csIHRoYXQgbmFtZS4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLi4uIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gY2xlYXJseSBzdWdnZXN0cyBhIGhvb2sgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHNsYWIgYWxsb2NhdG9yLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgYXQgdGhlIGJlZ2lubmluZyBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYW4gaW50ZXJuYWwgb3IgcHJpdmF0ZSBmdW5jdGlvbi4gVGhlIHByZXNlbmNlIG9mICYjMzQ7dGFnZ2luZyYjMzQ7IGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGhpbnRzIGF0IG1ldGFkYXRhIG9yIGluc3RydW1lbnRhdGlvbi4gVGhlICYjMzQ7YWxsb2MgaG9vayYjMzQ7IHBpZWNlIGlzIHRoZSBtb3N0IG9idmlvdXMgcGFydC4gSXQgc291bmRzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzbGFiIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGhvb2sgZG9lcywgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGFsbG9jYXRpb24gYmVoYXZlcyBhdCBhIGxvd2VyIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMzQ1PXN0YXRpYyBub2lubGluZSB2b2lkXG5tbS9zbHViLmM6MjM0NjpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxubW0vc2x1Yi5jLTIzNDctXHRcdFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzOTI9YWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTIzOTUtXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG5tbS9zbHViLmM6MjM5NjpcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzLCBvYmplY3QsIGZsYWdzLCBhbGxvY19mbGFncyk7XG5tbS9zbHViLmMtMjM5Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJldmlzaXRpbmcgU2xhYiBBbGxvY2F0b3IgSW50ZXJuYWxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbiBhZ2Fpbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuIENvbnNpZGVyaW5nIGl0cyByb2xlIGluIG9iamVjdCBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBleHRlbmRlZCBtZXRhZGF0YSBpcyBpbnZvbHZlZCwgYSBjbG9zZXIgaW5zcGVjdGlvbiBpcyB3YXJyYW50ZWQuIEFuZCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdG8gdGFrZSBub3RlIG9mIHdoeSB0aGUgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYHN0YXRpYyBub2lubGluZSB2b2lkYC4gSXMgaXQgZm9yIGlubGluaW5nLCBvciBpcyBpdCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2libGUgb25seSB3aXRoaW4gYSBzcGVjaWZpYyB0cmFuc2xhdGlvbiB1bml0LCBvciBpcyB0aGUgaW50ZW50aW9uIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gbWFraW5nIGEgY2FsbCBhY3Jvc3MgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgYmVoYXZpb3IgYXJlIHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEyOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTMzLVxubW0vc2x1Yi5jOjIxMzQ6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxMzUtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMjM9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU0LSAqL1xubW0vc2x1Yi5jOjIyNTU6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI1Ni17XG4tLVxubW0vc2x1Yi5jPTIzMDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMwNS1cbm1tL3NsdWIuYzoyMzA2OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMwNy1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzE1LVxubW0vc2x1Yi5jOjIzMTY6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMxNy1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzMjY9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzMyLVxubW0vc2x1Yi5jOjIzMzM6XHRcdGlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzM0LVx0XHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi0tXG5tbS9zbHViLmM9MzM3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXG4tLVxubW0vc2x1Yi5jLTMzNzctXHRcdFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXG5tbS9zbHViLmM6MzM3ODpcdFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXG5tbS9zbHViLmMtMzM3OS1cdFx0XHRcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xuLS1cbm1tL3NsdWIuYz0zNDAwPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0NTUtXHQgKi9cbm1tL3NsdWIuYzozNDU2Olx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcbm1tL3NsdWIuYy0zNDU3LVx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTbGFiIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbiBGdW5jdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJZiBgQ09ORklHX1NMQUJfT0JKX0VYVGAgaXMgYWN0aXZlLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgcmVndWxhciBgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBub3QgYSBzdGF0aWMgb25lLCByaWdodD8gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIGxpbmUgMjEzNCBpcyB0aGUgbm9uLXN0YXRpYyBkZWZpbml0aW9uLCBhbmQgbGluZSAyMzA2IGlzIHRoZSBzdGF0aWMgZHVtbXkgdmVyc2lvbiB1c2VkIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRpc2FibGVkLiBTbywgdGhhdCBtZWFucyB0aGUgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGZ1bmN0aW9uICppc24mIzM5O3QqIHN0YXRpYyB3aGVuIHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgbWVhbmluZyBpdCYjMzk7cyB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtZWFucyBpdCBpc24mIzM5O3Qgc3RyaWN0bHkgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzLCBidXQgaXQgKmlzKiBub24tc3RhdGljIGFuZCB0aHVzIHZpc2libGUsIG1ha2luZyBpdHMgdXNlIGEgYml0Li4uaW50ZXJlc3RpbmcuIEhtbSwgbGV0IG1lIGp1c3QgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBhY3R1YWxseSBnZXRzIGV4cG9ydGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDM0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nKioKClJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzbiYjMzk7dCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBhIGdvb2QgaW5pdGlhbCBzaWduIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSG93ZXZlciwgaXQmIzM5O3MgKm5vbi1zdGF0aWMqIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwb3RlbnRpYWxseSBldmVuIGZyb20gYSBkaWZmZXJlbnQgbW9kdWxlLCBzbyBmdXp6aW5nIGl0IGlzIGRlZmluaXRlbHkgb24gdGhlIHRhYmxlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYC4gVGhlc2Ugc291bmQgbGlrZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB3aGF0ZXZlciYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGV5IHByb2JhYmx5IGFyZSBob29rcyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIChtZW1jZ3MpIGFuZCBzbGFiIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLiBXZSBjYW4gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBhbmQgc2VlIGhvdyB0aGV5IGFyZSBjYWxsZWQgYW5kIHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uIGNhbiBiZSByZWFjaGVkIGFuZCBob3cgd2UgbWlnaHQgbWFuaXB1bGF0ZSBpdHMgaW5wdXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKl9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5vbi1FeHBvcnRlZCwgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyAqYWxzbyogbm90IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgYSBmdW5jdGlvbiBwb3RlbnRpYWxseSB1c2VkIGludGVybmFsbHkgd2l0aGluIGEgbW9kdWxlLCBvciBwZXJoYXBzIGluZGlyZWN0bHkgdmlhIGEgZnVuY3Rpb24gcG9pbnRlciBvciBvdGhlciBsZXNzIG9idmlvdXMgbWVjaGFuaXNtLiBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIG1lYW50IGZvciBkaXJlY3QgZXh0ZXJuYWwgY29uc3VtcHRpb24sIGJ1dCBpdCAqaXMqIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBvciBwZXJoYXBzLCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdC4KClRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdpbGwgYmUgd2l0aGluIHRoZSBjb2RlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9rZmVuY2UvY29yZS5jYC4gTGV0IG1lIHNlZSB3aGF0IGBfX2tmZW5jZV9mcmVlYCBkb2VzLCBhbmQgd2hhdCBpdCBtaWdodCB0ZWxsIHVzIGFib3V0IGhvdyB0aGlzIG5vbi1zdGF0aWMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBwYXR0ZXJucyBvciBkZXNpZ24gY2hvaWNlcyByZWZsZWN0ZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2tmZW5jZV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2ZlbmNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jPTEyMjc9dm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTIzNy1cbm1tL2tmZW5jZS9jb3JlLmM6MTIzODp2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcbm1tL2tmZW5jZS9jb3JlLmMtMTIzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU2xhYiBPYmplY3QgRXh0ZW5zaW9uIGFuZCBLRkVOQ0UgSW50ZWdyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uY2VybiB3YXMgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBfX2tmZW5jZV9mcmVlYCwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBOb3csIEkgd2FudCB0byBtYXAgb3V0IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEuIGBrbWVtX2NhY2hlX2NoYXJnZWAgaXMgYWxzbyBleHBvcnRlZCwgc28gaXQmIzM5O3MgcmVsZXZhbnQsIGFuZCBJJiMzOTttIHNlZWluZyBvdGhlciBpbXBvcnRhbnQgc3ltYm9scyByZWxhdGVkIHRvIG1lbWNnIGFuZCBzbGFiIG9iamVjdCBleHRlbnNpb25zLgoKTGV0JiMzOTtzIHNlZTogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AgYW5kIGBrbWVtX2NhY2hlX2NoYXJnZWAuIEFuZCBvZiBjb3Vyc2UgYF9fa2ZlbmNlX2ZyZWVgLiBXYWl0LCB0aGVyZSYjMzk7cyBhIG1pbm9yIGNoYW5nZSBpbiBgX19rZmVuY2VfZnJlZWAgd2l0aCB0aGF0IGBLRkVOQ0VfV0FSTl9PTmAgcmVtb3ZhbCwgYnV0IHRoZSAqc2lnbmlmaWNhbnQqIG1vZGlmaWNhdGlvbnMgYXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGBhbGxvY19zbGFiX29ial9leHRzYCBhbmQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLgoKTm93IEkgbmVlZCB0byBlbGltaW5hdGUgc29tZSBpcnJlbGV2YW50IHBpZWNlcyBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBvbmVzLiBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyBgc3RhdGljIGlubGluZWAsIHNvIG5vdCBkaXJlY3RseSByZWxldmFudC4gQWxzbyBgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXRgIGlzIGBzdGF0aWMgX19pbml0YCBhbmQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGlzIGBzdGF0aWMgdm9pZGAsIHNvIEkgd29uJiMzOTt0IG5lZWQgdG8gZm9jdXMgb24gdGhlbSBhcyBtdWNoLgoKU28sIHRha2luZyBhbGwgdGhhdCBpbnRvIGNvbnNpZGVyYXRpb24sIHRoZSBtb3N0IGNyaXRpY2FsIHN5bWJvbHMgdG8gemVybyBpbiBvbiBhcmU6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgYW5kIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLgoKRmluYWxseSwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01FTUNHYCwgb2J2aW91c2x5LCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLCBgQ09ORklHX1NMQUJfT0JKX0VYVGAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGFib3ZlLCBhbmQsIGltcG9ydGFudGx5LCBgQ09ORklHX0tGRU5DRWAgc2luY2Ugd2UmIzM5O3ZlIHNlZW4gaXQgbW9kaWZpZWQuIE5vdyB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsYWIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9MTAwPXN0cnVjdCBzbGFiIHtcbi0tXG5tbS9zbGFiLmgtMTE0LVx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xubW0vc2xhYi5oOjExNTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2xhYi5oLTExNi1cdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4tLVxubW0vc2xhYi5oPTEyNj1TTEFCX01BVENIKG1lbWNnX2RhdGEsIG9ial9leHRzKTtcbm1tL3NsYWIuaDoxMjc6I2VsaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKVxubW0vc2xhYi5oLTEyOC1TTEFCX01BVENIKF91bnVzZWRfc2xhYl9vYmpfZXh0cywgb2JqX2V4dHMpO1xuLS1cbm1tL3NsYWIuaD02Mjc9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2xhYi5oLTYzOS1cbm1tL3NsYWIuaDo2NDA6I2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcbm1tL3NsYWIuaC02NDEtXG4tLVxubW0vc2xhYi5oPTc3NT1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2xhYi5oLTc3Ny1cbm1tL3NsYWIuaDo3Nzg6I2Vsc2UgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xubW0vc2xhYi5oLTc3OS1cbi0tXG5tbS9zbGFiLmg9NzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2xhYi5oLTc5Ni1cbm1tL3NsYWIuaDo3OTc6I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbm1tL3NsYWIuaC03OTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gYENPTkZJR19TTEFCX09CSl9FWFRgKioKCk9rYXksIHNvIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgZGVmaW5pdGVseSBhbiBpbnRlcm5hbCBjb25maWcgb3B0aW9uOyBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG5vdCBzb21ldGhpbmcgeW91JiMzOTtkIG1hbnVhbGx5IGVuYWJsZS4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgbGlrZWx5IHNlbGVjdGVkIGJhc2VkIG9uIG90aGVyLCBicm9hZGVyIGZlYXR1cmVzLiBQZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBNRU1DR2AgKG1lbW9yeSBjb250cm9sIGdyb3Vwcykgb3IgbWF5YmUgZXZlbiBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gdG8gd2hlcmUgdGhpcyB0aGluZyBpcyBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogaXQmIzM5O3MgZGVmaW5lZC4gVGltZSB0byBnbyBodW50aW5nIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgbW9zdCBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCB3b3VsZCBiZSBgaW5pdC9LY29uZmlnYCBhbmQsIG1vcmUgbGlrZWx5LCBgbW0vS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEkmIzM5O2xsIGNoZWNrIHRob3NlIGZpbGVzLCBhbmQgaG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgYFNMQUJfT0JKX0VYVGAgaXMgYWxsIGFib3V0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIG9uZSwganVzdCBhIG1hdHRlciBvZiB0cmFjaW5nIHRoZSBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTEFCX09CSl9FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMzM9Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuLS1cbmluaXQvS2NvbmZpZy0xMDQwLVxuaW5pdC9LY29uZmlnOjEwNDE6Y29uZmlnIFNMQUJfT0JKX0VYVFxuaW5pdC9LY29uZmlnLTEwNDItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDk2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5jb3ZlcmluZyB0aGUgQm9vbGVhbiBMYWJ5cmludGgqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBoaWRkZW4gYm9vbGVhbiBmbGFnIGx1cmtpbmcgc29tZXdoZXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYE1FTUNHYCwgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBhbmQgYEtGRU5DRWAuIFRob3NlIHRocmVlIG9mdGVuIGRhbmNlIHRvZ2V0aGVyIGluIHRoaXMgc3BhY2UuIE5vdywgbGV0JiMzOTtzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBCZWZvcmUgd2UgZGl2ZSBkZWVwZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBEb2VzIGl0IHJlbHkgb24gb3RoZXIgY29uZmlndXJhdGlvbnM/IERvZXMgaXQgaGF2ZSBhbnkgaW1wbGljYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0/IEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY29uc2lkZXJpbmcgdGhlIHdob2xlIHBpY3R1cmUgYmVmb3JlIGNoYXNpbmcgYSBzcGVjaWZpYyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xMDQ3PWNvbmZpZyBDT0RFX1RBR0dJTkdcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxubGliL0tjb25maWcuZGVidWc6MTA1MTpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xubGliL0tjb25maWcuZGVidWctMTA1Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDY1OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTA2OS1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbmxpYi9LY29uZmlnLmRlYnVnLTEwNzEtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBwcm9qZWN0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUg4oCTIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdXN1YWxseSB3aGVyZSB0aGVzZSBzZXR0aW5ncyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgbGliL0tjb25maWcuZGVidWdgLiBJIHNlZW0gdG8gcmVtZW1iZXIgdGhlcmUgd2FzIGEgY29uZmlndXJhdGlvbiBJIHdhcyBpbnRlcmVzdGVkIGluIGFyb3VuZCBsaW5lIDEwNTEsIHNvIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRoZXJlLiBMZXQgbWUgc2VlIHdoYXQgdGhhdCByZXZlYWxzIGFib3V0IHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvci4uLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdG8gZXhwZWN0LCBidXQgbmVlZCB0aGUgaGFyZCBkYXRhIHRvIG1ha2UgYSB1c2VmdWwgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0NTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4xMDQ2Olx0XG4xMDQ3Olx0Y29uZmlnIENPREVfVEFHR0lOR1xuMTA0ODpcdFx0Ym9vbFxuMTA0OTpcdFx0c2VsZWN0IEtBTExTWU1TXG4xMDUwOlx0XG4xMDUxOlx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbjEwNTI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuMTA1MzpcdFx0ZGVmYXVsdCBuXG4xMDU0Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTA1NTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4xMDU2Olx0XHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcbjEwNTc6XHRcdHNlbGVjdCBDT0RFX1RBR0dJTkdcbjEwNTg6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuMTA1OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA2MDpcdFx0aGVscFxuMTA2MTpcdFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXG4xMDYyOlx0XHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcbjEwNjM6XHRcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXG4xMDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDAwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWNpcGhlcmluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIHNlZSB0aGF0IGl0IHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiBhbiBgTU1VYCwgdGhlIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCB0aGUgbmVnYXRpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAuIFRoZXNlIGFyZSBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzOyBwcm9maWxpbmcgb2Z0ZW4gbmVlZHMgYSBtYXR1cmUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBhbmQgYWNjZXNzIHRvIHRoZSBwcm9jZXNzIGZpbGVzeXN0ZW0gZm9yIGludHJvc3BlY3Rpb24uIFRoZSBleGNsdXNpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAgc3VnZ2VzdHMgdGhhdCBhIGRpZmZlcmVudCwgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QsIGRlYnVnIG1lY2hhbmlzbSBpcyBhdCBwbGF5IHdoZW4gd2UmIzM5O3JlIHByb2ZpbGluZy4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBTTEFCX09CSl9FWFRgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIGBTTEFCX09CSl9FWFRgIGlzIGxpa2VseSBzZWxlY3RlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgbWV0YWRhdGEgb3IgZXh0ZW5kZWQgb2JqZWN0IHN1cHBvcnQgbmVlZGVkIGZvciB0aGUgcHJvZmlsaW5nLiBJdCBwcm92aWRlcyBleHRlbmRlZCBkYXRhIHRvIGVhY2ggc2xhYiBvYmplY3QuIEkgd291bGQgbmVlZCB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4KCk15IG5leHQgdGhvdWdodCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBkcmlsbCBkb3duLCBpcyBhYm91dCBgTUVNQ0dgLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBtZW1vcnkgY2dyb3VwcyAoTUVNQ0cpIHBsYXkgYSByb2xlIGhlcmUuIE1lbW9yeSBjZ3JvdXBzIG9mZmVyIG1vcmUgZ3JhbnVsYXIgcmVzb3VyY2UgdHJhY2tpbmcsIHdoaWNoIG1pZ2h0IGJlIGNyaXRpY2FsIGZvciBhIG1vcmUgYWNjdXJhdGUgYW5kIHVzZWZ1bCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlLiBEb2VzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCB3b3JrIHdlbGwgd2l0aCBtZW1vcnkgY2dyb3Vwcywgb3IgYXJlIHRoZXJlIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBldmVuIGJldHRlciwgZG9lcyBpdCBsZXZlcmFnZSB0aGVtIGluIHNvbWUgd2F5PyBUaGlzIGlzIGFuIGltcG9ydGFudCBxdWVzdGlvbiB0byBhZGRyZXNzLCBhcyBpbnRlZ3JhdGluZyB3aXRoIE1FTUNHIHdvdWxkIG1ha2UgdGhlIHByb2ZpbGluZyBtdWNoIG1vcmUgdmFsdWFibGUgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHdvdWxkIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzItXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDgxLVxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDgzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg4LVxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5NS1cbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTEwOTctXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBhIGNvcmUgb3B0aW9uLCBpcyB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwgc291cmNlLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gdGhlcmUuIFNwZWNpZmljYWxseSwgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpcyBhcm91bmQgbGluZSAxMDczLiBJdCYjMzk7cyBhIGJyb2FkIHN0YXJ0aW5nIHBvaW50LCBidXQgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyBhcmUgb2Z0ZW4gZ3JvdXBlZCB0b2dldGhlciBzb21ld2hhdCBsb2dpY2FsbHksIGFuZCB0aGF0IGxpbmUgbnVtYmVyIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBwbGFjZSB0byBiZWdpbi4gVGltZSB0byBwdWxsIHVwIHRoZSBmaWxlIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIHN5bnRheCwgYW5kIHRoZW4gZXh0cmFwb2xhdGUgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCBkZWZpbmVzIGFuZCBob3cgaXQgbWF5IGJlIGFmZmVjdGluZyB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW91ciBpbiB0aGUgc3BlY2lmaWMgYXJlYSBJJiMzOTttIGludGVyZXN0ZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0XG4xMDcxOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzI6XHRcbjEwNzM6XHRjb25maWcgTUVNQ0dcbjEwNzQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwNzU6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwNzY6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDc3Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDc4Olx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwNzk6XHRcdGhlbHBcbjEwODA6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA4MTpcdFxuMTA4MjpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDgzOlx0XHRib29sXG4xMDg0Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDg1Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDg2Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA4NzpcdFx0ZGVmYXVsdCB5XG4xMDg4Olx0XG4xMDg5Olx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTk5CgkJCQkJCQlvdXRwdXQ6IDIxNAoJCQkJCQkJdGhvdWdodHM6IDgwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGBTTEFCX09CSl9FWFRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBpdCYjMzk7cyBnb2luZyB0byByZXF1aXJlIHRoYXQgd2UgZW5hYmxlIGBNRU1DR2AsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCwgYW5kIGBLRkVOQ0VgLiBUaGlzIGlzIGNydWNpYWwgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCBhbmQgZGVmaW5pdGVseSB0b3VjaGVzIGNvcmUgc2xhYiBiZWhhdmlvci4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGhlcmUuIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLCBhbmQgYGttZW1fY2FjaGVfY2hhcmdlYC4gSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgY2hhbmdlIHRvIGBfX2tmZW5jZV9mcmVlYCBzZWVtcyBtaW5vcuKAlGp1c3QgcmVtb3ZpbmcgYSBgS0ZFTkNFX1dBUk5fT05gLCBzbyBJIHdpbGwgZGlzY291bnQgdGhhdCBzeW1ib2wuCgpJbml0aWFsbHksIEkgY29uc2lkZXJlZCBhZGRpbmcgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQmIzM5O3MgaW5saW5lLCBzbyBpdCYjMzk7cyBub3QgYSByZWxldmFudCBzeW1ib2wgdG8gZm9jdXMgb24uIEJ1dCBJIHN0aWxsIG5lZWQgdG8gbWFrZSBzdXJlIEkgZm9jdXMgb24gYGttZW1fY2FjaGVfY2hhcmdlYC4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSBteSBmb2N1cyBzeW1ib2xzLiBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgaW4gYG1tL3NsYWJfY29tbW9uLmNgLCBsb29rcyByaWdodC4gT2theSwgbW92aW5nIG9uLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgbG9va3MgY29ycmVjdC4gYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIHNlZW1zIHJpZ2h0LiBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgbG9va3MgZ29vZC4gQW5kLCB5ZXMsIGBrbWVtX2NhY2hlX2NoYXJnZWAgc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgaW5jbHVkZWQuCgpCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgaXQgaW1wYWN0cyAoIGBNRU1DR2AsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCwgYEtGRU5DRWApLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBpcyBjaGFuZ2luZyBob3cgYHNsYWJvYmpfZXh0YCBzdHJ1Y3R1cmVzIGFyZSBtYW5hZ2VkIGFuZCBhY2Nlc3NlZC4gSXQgbG9va3MgbGlrZSBgU0xBQl9NQVlfQUNDT1VOVGAgaXMgaW50cm9kdWNlZCBhbmQgdGhlIGBzbGFib2JqX2V4dGAgbGF5b3V0IGlzIGNoYW5nZWQgdG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgb3IgYSB1bmlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLiBHaXZlbiB0aGVzZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCBJIG5lZWQgdG8gZm9jdXMgb24gZnV6emluZyB0aGVzZSBjaGFuZ2VzIHRvIGxvb2sgZm9yIGFueSBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzLgoKSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2NoYXJnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgY2hhbmdlcyBob3cgYHNsYWJvYmpfZXh0YCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFjY2Vzc2VkLCBhbmQgbWFuYWdlZCwgcGFydGljdWxhcmx5IHdoZW4gYm90aCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhcmUgZW5hYmxlZC4gSXQgaW50cm9kdWNlcyBgU0xBQl9NQVlfQUNDT1VOVGAgYW5kIGNoYW5nZXMgdGhlIGxheW91dCBvZiBgc2xhYm9ial9leHRgLiBUaGVzZSBhcmUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uLCBsZWFrcywgb3IgYWNjb3VudGluZyBlcnJvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfY2hhcmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBjaGFuZ2VzIGhvdyBgc2xhYm9ial9leHRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgd2hlbiBib3RoIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFyZSBlbmFibGVkLiBJdCBpbnRyb2R1Y2VzIGBTTEFCX01BWV9BQ0NPVU5UYCBhbmQgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGBzbGFib2JqX2V4dGAuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhY2NvdW50aW5nIGVycm9ycyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjEzOjE3LjQyMTkyNzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNzU2MzkzMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxMzoxNy40MjE5MzU3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5MTkzOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDhmODQwMzJkMWJkOTA4ZTQ2MTQ5Y2NhY2RiOTAxM2VlMzM2OTkyMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMjoxMzoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmQwMmViNTRlZThmMmM2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG5AQCAtMTEyLDMgKzExMiwxMCBAQCBUbyBkbyBzbzpcXG4gXFxuIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczpcXG4gICBhbGxvY19ob29rc190YWcoaHQtXFx1MDAzZXlvdXJfc2F2ZWRfdGFnLCBrbWFsbG9jX25vcHJvZiguLi4pKVxcbitcXG4rTm90ZXNcXG4rPT09PT1cXG4rXFxuKy0gV2hlbiBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIEtGRU5DRSwgaXRzIGFjY291bnRpbmcgaXMgc2tpcHBlZC5cXG4rICBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIsIHNvIHRoaXMgb21pc3Npb25cXG4rICBpcyBuZWdsaWdpYmxlLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTQ0MCwxOSArMTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4tLypcXG4tICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYW4gYXJyYXkgaW4gcGFnZS1cXHUwMDNlbWVtY2dfZGF0YVxcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0Llxcbi0gKi9cXG4tc3RydWN0IHNsYWJvYmpfZXh0IHtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuLSNlbmRpZlxcbi0jaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4tXFx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xcbi0jZW5kaWZcXG4tfSBfX2FsaWduZWQoOCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbmluZGV4IDMyYzlmOGVkN2FlMjA1Li5lMTkxNTAyNmUwMzA0MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuQEAgLTQ1LDYgKzQ1LDcgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRfU0xBQl9BQ0NPVU5ULFxcbitcXHRfU0xBQl9NQVlfQUNDT1VOVCxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbiBcXHRfU0xBQl9LQVNBTixcXG5AQCAtMjA0LDggKzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XFxuICAqL1xcbiAjaWZkZWYgQ09ORklHX01FTUNHXFxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFxcdFxcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9BQ0NPVU5UKVxcbisjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UXFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX01BWV9BQ0NPVU5UKVxcbiAjZWxzZVxcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcXHRcXHRfX1NMQUJfRkxBR19VTlVTRURcXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFxcdF9fU0xBQl9GTEFHX1VOVVNFRFxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuY1xcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li45MDkyNWM2NDZjNGMyNCAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXFxuKysrIGIvbW0va2ZlbmNlL2NvcmUuY1xcbkBAIC02MzYsMTEgKzYzNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG4gXFxuIFxcdFxcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gKyBpKTtcXG4gXFx0XFx0X19TZXRQYWdlU2xhYihwYWdlKTtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4tXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZylcXHUwMDI2a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8XFxuLVxcdFxcdFxcdFxcdCBNRU1DR19EQVRBX09CSkVYVFM7XFxuLSNlbmRpZlxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC03MDQsMTAgKzY5OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICsgaSk7XFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG4tXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XFxuLVxcdFxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4tI2VuZGlmXFxuIFxcdFxcdF9fQ2xlYXJQYWdlU2xhYihwYWdlKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI0OCw5ICsxMjM5LDYgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxuIHtcXG4gXFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuLVxcdEtGRU5DRV9XQVJOX09OKG1ldGEtXFx1MDAzZW9ial9leHRzLm9iamNnKTtcXG4tI2VuZGlmXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcXG4gXFx0ICogdGhlIG9iamVjdCwgYXMgdGhlIG9iamVjdCBwYWdlIG1heSBiZSByZWN5Y2xlZCBmb3Igb3RoZXItdHlwZWRcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXFxuaW5kZXggMWY2MThmOWIwZDEyZDkuLmU2YjRiZjM0OWZmNzMwIDEwMDY0NFxcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxcbisrKyBiL21tL2tmZW5jZS9rZmVuY2UuaFxcbkBAIC0xMDIsOSArMTAyLDYgQEAgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XFxuIFxcdHN0cnVjdCBrZmVuY2VfdHJhY2sgZnJlZV90cmFjayBfX2d1YXJkZWRfYnkoXFx1MDAyNmxvY2spO1xcbiBcXHQvKiBGb3IgdXBkYXRpbmcgYWxsb2NfY292ZXJlZCBvbiBmcmVlcy4gKi9cXG4gXFx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFxcdTAwMjZsb2NrKTtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRzdHJ1Y3Qgc2xhYm9ial9leHQgb2JqX2V4dHM7XFxuLSNlbmRpZlxcbiB9O1xcbiBcXG4gI2RlZmluZSBLRkVOQ0VfTUVUQURBVEFfU0laRSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhKSAqIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xcbmluZGV4IGRlMmQwZjdkNjJiMTVlLi45ODY3YzAzZWYwYWUzZCAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xcbisrKyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXFxuQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCAqdGVzdF9hbGxvYyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGVudW0gYWxsb2NhdFxcbiBcXHRcXHRcXHQgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpfdG9faW5kZXgocywgc2xhYiwgYWxsb2MpLCAwVSk7XFxuLVxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTtcXG4rXFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsICgodW5zaWduZWQgaW50KXNsYWItXFx1MDAzZW9iamVjdHMpLCAxKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChwb2xpY3kgPT0gQUxMT0NBVEVfQU5ZKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gYWxsb2M7XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi42YjUxZGRmNmRmZTAyMiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjg2NSwxOCArMjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKVxcbiBcXHQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcXG4gXFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xcbi1cXHR1bnNpZ25lZCBpbnQgb2ZmO1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcbiBcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuIFxcdGlmICghb2JqX2V4dHMpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi1cXHRvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgcCk7XFxuLVxcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XFxuLVxcdGlmIChvYmpfZXh0LVxcdTAwM2VvYmpjZykge1xcbi1cXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBvYmpfZXh0LVxcdTAwM2VvYmpjZztcXG4rXFx0aWYgKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4rXFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBvYmpfZXh0cywgcCk7XFxuK1xcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xcbitcXHRpZiAob2JqY2cpIHtcXG4gXFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXHRcXHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuIFxcdH1cXG5AQCAtMzU0MSw3ICszNTQyLDYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gXFx0c2l6ZV90IG9ial9zaXplID0gb2JqX2Z1bGxfc2l6ZShzKTtcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmY7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4gXFx0LypcXG5AQCAtMzU4MywxMSArMzU4MywxNiBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiBcXG4gXFx0XFx0c2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcXG4gXFxuLVxcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpIHtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSkge1xcbitcXHRcXHRcXHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFxcdTAwMjZcXHUwMDI2IFdBUk5fT05fT05DRSghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogaWYgd2UgZmFpbCBhbmQgc2l6ZSBpcyAxLCBtZW1jZ19hbGxvY19hYm9ydF9zaW5nbGUoKSB3aWxsXFxuIFxcdFxcdCAqIGp1c3QgZnJlZSB0aGUgb2JqZWN0LCB3aGljaCBpcyBvayBhcyB3ZSBoYXZlIG5vdCBhc3NpZ25lZFxcbkBAIC0zNjE2LDEwICszNjIxLDExIEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIFxcbiBcXHRcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcXG4rXFxuIFxcdFxcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcXG4tXFx0XFx0b2JqX2V4dC1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4rXFx0XFx0c2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBvYmpjZyk7XFxuK1xcbiBcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdH1cXG4gXFxuQEAgLTM2MzUsMTUgKzM2NDEsMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gXFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XFxuIFxcdFxcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcXG4tXFx0XFx0dW5zaWduZWQgaW50IG9mZjtcXG4gXFxuLVxcdFxcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcXG4tXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcXG4tXFx0XFx0b2JqY2cgPSBvYmpfZXh0LVxcdTAwM2VvYmpjZztcXG4rXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XFxuK1xcdFxcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xcbiBcXHRcXHRpZiAoIW9iamNnKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdG9ial9leHQtXFx1MDAzZW9iamNnID0gTlVMTDtcXG4rXFx0XFx0c2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBOVUxMKTtcXG4gXFxuIFxcdFxcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xcbiBcXHRcXHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XFxuZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaFxcbmluZGV4IGY1ZTMzNmI2YjZiMDRjLi4wNDYwMGY1N2I0MDE0NiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiLmhcXG4rKysgYi9tbS9zbGFiLmhcXG5AQCAtODEsMTAgKzgxLDExIEBAIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyB7XFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4gXFx0XFx0XFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0XFx0XFx0ICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJ2NvdW50ZXJzJyBmaWVsZFxcbi1cXHRcXHRcXHRcXHRcXHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXFx1MDAzZXN0cmlkZSBmaWVsZCBpcyBub3QgYXZhaWxhYmxlLFxcbi1cXHRcXHRcXHRcXHRcXHQgKiBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxcbitcXHRcXHRcXHRcXHRcXHQgKiB0byBzYXZlIG1lbW9yeSBvciBDUFUuIElmIHRoZXNlIGZyZWUgYml0cyBhcmUgbm90XFxuK1xcdFxcdFxcdFxcdFxcdCAqIGF2YWlsYWJsZSwgc3VjaCBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC5cXG4gXFx0XFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBzdHJpZGU7XFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIG9ial9leHRzX2luX29iamVjdDoxO1xcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBvYmpfZXh0c19uZWVkc19vYmpjZzoxO1xcbiAjZW5kaWZcXG4gXFx0XFx0XFx0XFx0fTtcXG4gXFx0XFx0XFx0fTtcXG5AQCAtMzMwLDEyICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxcbiBcXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgb2Jqc19wZXJfc2xhYihjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXFxuLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxcbi17XFxuLVxcdHJldHVybiBzbGFiLVxcdTAwM2VvYmplY3RzO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXFxuICAqXFxuQEAgLTU1NSw2ICs1NTAsOTMgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbisvKlxcbisgKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW5cXG4rICogc2xhYi1cXHUwMDNlb2JqX2V4dHMgKGFsaWFzaW5nIHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGEpIGlmIE1FTUNHX0RBVEFfT0JKRVhUUyBpcyBzZXQuXFxuKyAqL1xcbitzdHJ1Y3Qgc2xhYm9ial9leHQge1xcbitcXHQvKlxcbitcXHQgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHVuaW9uIHNob3VsZCBiZSBwb2ludGVyLXNpemVkIHRvIGF2b2lkIG1lbW9yeVxcbitcXHQgKiB3YXN0ZVxcbitcXHQgKi9cXG4rXFx0dW5pb24ge1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK1xcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgX2N0cmVmO1xcbisjZW5kaWZcXG4rXFx0fTtcXG4rfSBfX2FsaWduZWQoOCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4rREVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbitcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0cmV0dXJuIChjYWNoZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTTEFCX01BWV9BQ0NPVU5UKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbitcXHRyZXR1cm4gc2xhYi1cXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XFxuKyNlbHNlXFxuK1xcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVxcdTAwM2VzbGFiX2NhY2hlKTtcXG4rI2VuZGlmXFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX25lZWRzX29iamNnKHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4re1xcbitcXHRzaXplX3Qgc3ogPSAwO1xcbitcXG4rXFx0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHNpemVfdCBzeiA9IDA7XFxuK1xcbitcXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcXG4rXFx0XFx0c3ogKz0gMTtcXG4rXFxuK1xcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcXG4rXFx0XFx0c3ogKz0gMTtcXG4rXFxuK1xcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxcbiBcXG4gLypcXG5AQCAtNTcyLDcgKzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXFxuICAqIG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG4gICogaWYgKG9ial9leHRzKSB7XFxuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi0gKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial90b19pbmRleChzLCBzbGFiLCBvYmopKTtcXG4rICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmopO1xcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcXG4gICogICAgICAgICBwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuICAqIH1cXG5AQCAtNjEwLDQ4ICs2OTIsODYgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zbGFiX29ial9leHRzKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRzbGFiLVxcdTAwM2VzdHJpZGUgPSBzdHJpZGU7XFxuLX1cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxcbi17XFxuLVxcdHJldHVybiBzbGFiLVxcdTAwM2VzdHJpZGU7XFxuK1xcdC8qXFxuK1xcdCAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvXFxuK1xcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxcbitcXHQgKiBhbGxvY2F0aW9ucyB3aXRoaW5fc2xhYl9sZWZ0b3ZlciBhcmUgcHJlZmVycmVkLiBBbmQgdGhvc2UgbWF5IGJlXFxuK1xcdCAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYidzIHNpemUuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gc2xhYi1cXHUwMDNlb2JqX2V4dHNfaW5fb2JqZWN0O1xcbiB9XFxuICNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXFxuLXtcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKHN0cmlkZSAhPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XFxuLX1cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbiB7XFxuLVxcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4gLypcXG4gICogc2xhYl9vYmpfZXh0IC0gZ2V0IHRoZSBwb2ludGVyIHRvIHRoZSBzbGFiIG9iamVjdCBleHRlbnNpb24gbWV0YWRhdGFcXG4gICogYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCBpbiBhIHNsYWIuXFxuKyAqIEBzOiBjYWNoZSB0aGF0IHRoZSBzbGFiIGJlbG9uZ3MgdG9cXG4gICogQHNsYWI6IGEgcG9pbnRlciB0byB0aGUgc2xhYiBzdHJ1Y3RcXG4gICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXFxuLSAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxcbisgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdFxcbiAgKlxcbiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcXG4rc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4rXFx0ICAgICBjb25zdCB2b2lkICpvYmopXFxuIHtcXG4gXFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xcbitcXHR1bnNpZ25lZCBpbnQgaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGludCBzdHJpZGU7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XFxuIFxcbi1cXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArXFxuLVxcdFxcdFxcdFxcdFxcdCBzbGFiX2dldF9zdHJpZGUoc2xhYikgKiBpbmRleCk7XFxuK1xcdC8qXFxuK1xcdCAqIEtGRU5DRSBvYmplY3RzIGhhdmUgTlVMTCBvYmpfZXh0cyBhbmQgdGh1cyBjYW4ndCByZWFjaCB0aGlzXFxuK1xcdCAqIGFuZCB3ZSBkb24ndCBuZWVkIG9ial90b19pbmRleCgpXFxuK1xcdCAqL1xcbitcXHRpbmRleCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcXG4rXFxuK1xcdGlmICghb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxcbitcXHRcXHRzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzdHJpZGUgPSBzLVxcdTAwM2VzaXplO1xcbitcXG4rXFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgKyBpbmRleCAqIHN0cmlkZSk7XFxuK1xcbiBcXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKG9ial9leHQpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKnNsYWJfb2JqX2V4dF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXFxuK3tcXG4rXFx0LyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xcbitcXHRyZXR1cm4gb2JqX2V4dC1cXHUwMDNlX29iamNnO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbit7XFxuK1xcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi9cXG4rXFx0b2JqX2V4dC1cXHUwMDNlX29iamNnID0gb2JqY2c7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4rc3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXFxuK3NsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxcbit7XFxuK1xcdGlmIChzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRvYmpfZXh0ICs9IDE7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNm9ial9leHQtXFx1MDAzZV9jdHJlZjtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcbiBcXG5AQCAtNjYyLDE2ICs3ODIsMTcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKlxcbitzbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbitcXHQgICAgIGNvbnN0IHZvaWQgKm9iailcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkgeyB9XFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxcbi1cXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xcbmluZGV4IDAzZWNhYzEyY2Q4NjVmLi4xZTFkM2ZlZWMzNTM1YiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXFxuKysrIGIvbW0vc2xhYl9jb21tb24uY1xcbkBAIC01Miw3ICs1Miw3IEBAIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2NhY2hlO1xcbiBcXHRcXHRTTEFCX09CSl9FWFRfSU5fT0JKKVxcbiBcXG4gI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcXFxcXFxuLVxcdFxcdFxcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UKVxcbitcXHRcXHRcXHQgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCB8IFNMQUJfTUFZX0FDQ09VTlQpXFxuIFxcbiAvKlxcbiAgKiBNZXJnZSBjb250cm9sLiBJZiB0aGlzIGlzIHNldCB0aGVuIG5vIG1lcmdpbmcgb2Ygc2xhYiBjYWNoZXMgd2lsbCBvY2N1ci5cXG5AQCAtMzU5LDYgKzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRm9yIG5vdyB3ZSBhc3N1bWUgYW55IGNhY2hlIGNhbiBiZSB1c2VkIHdpdGggX19HRlBfQUNDT1VOVCBhbmQgdGh1c1xcbitcXHQgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0c1xcbitcXHQgKi9cXG4rXFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDtcXG4rXFxuIFxcdC8qIEZhaWwgY2xvc2VkIG9uIGJhZCB1c2Vyc2l6ZSBvZiB1c2Vyb2Zmc2V0IHZhbHVlcy4gKi9cXG4gXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgfHxcXG4gXFx0ICAgIFdBUk5fT04oIWFyZ3MtXFx1MDAzZXVzZXJzaXplIFxcdTAwMjZcXHUwMDI2IGFyZ3MtXFx1MDAzZXVzZXJvZmZzZXQpIHx8XFxuQEAgLTk4NCwxMSArOTkxLDIwIEBAIG5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXFxuICNlbmRpZlxcbiBcXG4gXFx0LypcXG4tXFx0ICogSWYgQ09ORklHX01FTUNHIGlzIGVuYWJsZWQsIGRpc2FibGUgY2FjaGUgbWVyZ2luZyBmb3JcXG4tXFx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxcbitcXHQgKiBJZiBtZW1jZ19rbWVtIGlzIGVuYWJsZWQgYW5kIHRoaXMgaXMgYSBLTUFMTE9DX05PUk1BTCBjYWNoZSBhbmQgbm90XFxuK1xcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXFxuK1xcdCAqIGNhY2hlLlxcbitcXHQgKlxcbitcXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcXG4rXFx0ICogX19HRlBfQUNDT1VOVCBhbGxvY2F0aW9uIHNvIG1hcmsgaXQgYXMgc3VjaC4gVGhlIGV4Y2VwdGlvbiBpcyBhXFxuK1xcdCAqIEtNQUxMT0NfTk9fT0JKX0VYVCBjYWNoZS5cXG4gXFx0ICovXFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKVxcbi1cXHRcXHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XFxuK1xcdFxcdGlmICh0eXBlID09IEtNQUxMT0NfTk9STUFMIFxcdTAwMjZcXHUwMDI2IEtNQUxMT0NfUkVDTEFJTSAhPSBLTUFMTE9DX05PUk1BTClcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcXG4rXFx0XFx0ZWxzZSBpZiAoIShmbGFncyBcXHUwMDI2IFNMQUJfTk9fT0JKX0VYVCkpXFxuK1xcdFxcdFxcdGZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChtaW5hbGlnbiBcXHUwMDNlIEFSQ0hfS01BTExPQ19NSU5BTElHTikge1xcbiBcXHRcXHRhbGlnbmVkX3NpemUgPSBBTElHTihhbGlnbmVkX3NpemUsIG1pbmFsaWduKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggMDMzN2U2MGRiNWFjZTAuLjk0Yjc0NGU1YWM3OTE5IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC0yMTMsNiArMjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuIHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuKyNlbmRpZlxcbitcXG4gLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqL1xcbiBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjtcXG5AQCAtODAzLDcgKzgwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXFxuIHtcXG4tXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4rXFx0cmV0dXJuIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gI2VuZGlmXFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0b1xcbi1cXHQgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXRcXG4tXFx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxcbi1cXHQgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWIncyBzaXplLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIChzbGFiX2dldF9zdHJpZGUoc2xhYikgPT0gcy1cXHUwMDNlc2l6ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X2luZm9fZW5kKHMpO1xcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBcXHRyZXR1cm4gb2Zmc2V0O1xcbiB9XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHNsYWItXFx1MDAzZW9ial9leHRzX2luX29iamVjdCA9IDE7XFxuIH1cXG4tXFxuKyNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXFxuIFxcbiBcXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxcbi1cXHRcXHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuK1xcdFxcdG9mZiArPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcXG4gXFxuIFxcdGlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSlcXG4gXFx0XFx0LyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqL1xcbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxcbiBcXG4gXFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xcbiBcXG4tXFx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcXG4tXFx0XFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xcbitcXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxcbitcXHRcXHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XFxuIFxcbiBcXHRpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdGxlbmd0aCA9IHNsYWJfc2l6ZShzbGFiKTtcXG4gXFx0ZW5kID0gc3RhcnQgKyBsZW5ndGg7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcXHUwMDI2XFx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFxcdTAwMjZcXHUwMDI2ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHtcXG4gXFx0XFx0cmVtYWluZGVyID0gbGVuZ3RoO1xcbiBcXHRcXHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XFxuIFxcdFxcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7XFxuQEAgLTIwNzAsMjAgKzIwNjcsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxcbiBcXHRvYmpfc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopO1xcbiBcXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcXG4gXFx0aWYgKHNsYWJfZXh0cykge1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcXG4rXFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgb2JqX3NsYWIsIG9iaik7XFxuLVxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcXG4rXFx0XFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopO1xcbitcXHRcXHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7XFxuIFxcbi1cXHRcXHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShyZWYpKSkge1xcbiBcXHRcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xcbi1cXHRcXHRXQVJOX09OKGV4dC1cXHUwMDNlcmVmLmN0KTtcXG4tXFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNmV4dC1cXHUwMDNlcmVmKTtcXG4rXFx0XFx0V0FSTl9PTihyZWYtXFx1MDAzZWN0KTtcXG4rXFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkocmVmKTtcXG4gXFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTIwOTMsMTkgKzIwOTEsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdHJldHVybiBjbXB4Y2hnKFxcdTAwMjZzbGFiLVxcdTAwM2VvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuLVxcdFxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cylcXG4rc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IHN0cmlkZTtcXG4rXFxuK1xcdGlmICghc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxcbiBcXHQgKiBvYmplY3RzIHdpdGggbm8gdGFnIHJlZmVyZW5jZS4gTWFyayBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzXFxuIFxcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cXG4gXFx0ICovXFxuLVxcdGlmIChvYmpfZXh0cyA9PSBPQkpFWFRTX0FMTE9DX0ZBSUwpIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGlmIChvYmpfZXh0cyAhPSBPQkpFWFRTX0FMTE9DX0ZBSUwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpIC8gc2l6ZW9mKCp2ZWMpO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBzbGFiLVxcdTAwM2VvYmplY3RzOyBpKyspIHtcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpO1xcbiBcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKylcXG4tXFx0XFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNnZlY1tpXS5yZWYpO1xcbitcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xcbitcXHRcXHR2ZWMgKz0gc3RyaWRlO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIxMTMsOCArMjEyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iaikge31cXG4gc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tXFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYykge31cXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbiBcXG5AQCAtMjEyNywxMiArMjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdGNvbnN0IGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFsbG9jX2ZsYWdzKTtcXG4tXFx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xcbiBcXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5ld19leHRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9sZF9leHRzO1xcbiBcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcXG4tXFx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVxcdTAwM2VvYmplY3RzO1xcbitcXHRzaXplX3Qgc3ogPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuIFxcbiBcXHRnZnAgXFx1MDAyNj0gfk9CSkNHU19DTEVBUl9NQVNLO1xcbiBcXHQvKlxcbkBAIC0yMTgzLDcgKzIxOTAsNyBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuICNlbmRpZlxcbiByZXRyeTpcXG4gXFx0b2xkX2V4dHMgPSBSRUFEX09OQ0Uoc2xhYi1cXHUwMDNlb2JqX2V4dHMpO1xcbi1cXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XFxuK1xcdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzbGFiLCBvbGRfZXh0cywgdmVjKTtcXG4gXFxuIFxcdGlmIChuZXdfc2xhYikge1xcbiBcXHRcXHQvKlxcbkBAIC0yMjUwLDkgKzIyNTcsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0dm9pZCAqYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcXG4gXFxuLVxcdC8qIEluaXRpYWxpemUgc3RyaWRlIGVhcmx5IHRvIGF2b2lkIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgKi9cXG4tXFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcXG4tXFxuIFxcdGlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0yMjc4LDE1ICsyMjgyLDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXG4gXFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXHRcXHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVxcdTAwM2VvYmplY3RzKVxcbi1cXHRcXHRcXHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICsgb2Zmc2V0LCAwLFxcbi1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xcbitcXHRcXHRcXHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICsgb2Zmc2V0LCAwLCBzbGFiX29ial9leHRfc2l6ZShzbGFiKSk7XFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0XFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbiAjZW5kaWZcXG4gXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSBvYmpfZXh0cztcXG4tXFx0XFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHMtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc2xhYik7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjMyMywxMSArMjMyNiwxNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbiBcXHRcXHRcXHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxcbiB7XFxuLVxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxuLVxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgX19mdW5jX18sIHMtXFx1MDAzZW5hbWUpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpKSB7XFxuK1xcdFxcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHRpZiAoYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIHMtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5AQCAtMjM2MCwxNCArMjM2NywyNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbiBcXHQgKiBjaGVjayBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIGFsbG9jX3RhZ19hZGQoKS5cXG4gXFx0ICovXFxuIFxcdGlmIChvYmpfZXh0cykge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb2JqX2lkeCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmplY3QpO1xcbitcXHRcXHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmO1xcbiBcXG4gXFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTtcXG4tXFx0XFx0YWxsb2NfdGFnX2FkZChcXHUwMDI2b2JqX2V4dC1cXHUwMDNlcmVmLCBjdXJyZW50LVxcdTAwM2VhbGxvY190YWcsIHMtXFx1MDAzZXNpemUpO1xcbitcXG4rXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqZWN0KTtcXG4rXFx0XFx0cmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIG9ial9leHQpO1xcbitcXG4rXFx0XFx0YWxsb2NfdGFnX2FkZChyZWYsIGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZywgcy1cXHUwMDNlc2l6ZSk7XFxuK1xcbiBcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVxcdTAwM2VhbGxvY190YWcpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIHRoZSBhbW91bnQgb2Ygb3V0c3RhbmRpbmdcXG4rXFx0XFx0ICogb25lcyBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIHNvIGl0J3Mgbm90IHdvcnRoIHNldHRpbmdcXG4rXFx0XFx0ICogdGFncyBhcyBpbmFjY3VyYXRlIGJlY2F1c2Ugb2YgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghaXNfa2ZlbmNlX2FkZHJlc3Mob2JqZWN0KSlcXG4rXFx0XFx0XFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZyk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjM4NCw3ICsyNDAxLDYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWRcXG4gX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuIFxcdFxcdFxcdCAgICAgICBpbnQgb2JqZWN0cylcXG4ge1xcbi1cXHRpbnQgaTtcXG4gXFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcXG4gXFxuIFxcdC8qIHNsYWItXFx1MDAzZW9ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqL1xcbkBAIC0yMzk2LDEwICsyNDEyLDExIEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKykge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcXG4gXFxuLVxcdFxcdGFsbG9jX3RhZ19zdWIoXFx1MDAyNnNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKS1cXHUwMDNlcmVmLCBzLVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcXG4rXFx0XFx0YWxsb2NfdGFnX3N1YihzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgZXh0KSwgcy1cXHUwMDNlc2l6ZSk7XFxuIFxcdH1cXG4gXFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiB9XFxuQEAgLTI0MTIsNiArMjQyOSwyNSBAQCBhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuIFxcdFxcdF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwLCBvYmplY3RzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogTWFrZSBzdXJlIHRoZSBzdGF0aWMga2V5IHVzZWQgYnkgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkgcmVmbGVjdHMgdGhlXFxuKyAqIHZhbHVlIG9mICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKClcXG4rICpcXG4rICogQW55IGxhdGVyIG1lbSBhbGxvYyBwcm9maWxpbmcgc2h1dGRvd24gd29uJ3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5XFxuKyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpXFxuK3tcXG4rXFx0Ym9vbCBuZWVkX2NvZGV0YWcgPSAhbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCgpO1xcbitcXG4rXFx0aWYgKG5lZWRfY29kZXRhZyAhPSBzdGF0aWNfa2V5X2VuYWJsZWQoXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XFxuK1xcdFxcdGlmIChuZWVkX2NvZGV0YWcpXFxuK1xcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbitcXHR9XFxuK31cXG4rXFxuICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWRcXG5AQCAtMjQyNiw2ICsyNDYyLDEwIEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4re1xcbit9XFxuK1xcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG4gXFxuIFxcbkBAIC0yNDcxLDYgKzI1MTEsOSBAQCB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuIFxcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xcbiBcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuQEAgLTI0ODQsNyArMjUyNyw2IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4gXFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmY7XFxuIFxcbiBcXHRwYWdlID0gdmlydF90b19wYWdlKHApO1xcbiBcXHRpZiAoUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkge1xcbkBAIC0yNTE3LDE2ICsyNTU5LDE1IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4gXFx0ICogb2Ygc2xhYl9vYmpfZXh0cyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGFuZCB0aHVzIHRoZSBzbGFiXFxuIFxcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoaXNfa21hbGxvY19ub3JtYWwocykpXFxuK1xcdGlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xcbiBcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuIFxcdGlmIChvYmpfZXh0cykge1xcbiBcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLVxcdFxcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcXG4tXFx0XFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KG9ial9leHQtXFx1MDAzZW9iamNnKSkge1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KSkpIHtcXG4gXFx0XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbkBAIC0zMzkxLDEwICszNDMyLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuIFxcdFxcdHN0YXQocywgT1JERVJfRkFMTEJBQ0spO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBJbml0aWFsaXplcyBmcm96ZW4sIGludXNlLCBhbmQgYW55IGV4dHJhIDY0Yml0LW9ubHkgZmxhZ3MgKi9cXG4rXFx0c2xhYi1cXHUwMDNlY291bnRlcnMgPSAwO1xcbitcXG4gXFx0c2xhYi1cXHUwMDNlb2JqZWN0cyA9IG9vX29iamVjdHMob28pO1xcbi1cXHRzbGFiLVxcdTAwM2VpbnVzZSA9IDA7XFxuLVxcdHNsYWItXFx1MDAzZWZyb3plbiA9IDA7XFxuIFxcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuK1xcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcXG4rXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xcbisjZW5kaWZcXG4gXFx0c2xhYi1cXHUwMDNlc2xhYl9jYWNoZSA9IHM7XFxuIFxcbiBcXHRrYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcXG5AQCAtNjUyNiw3ICs2NTcyLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0ICovXFxuIFxcdGlmIChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXFxuIFxcdFxcdHJldHVybiBzLVxcdTAwM2VpbnVzZTtcXG4tXFx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxcbitcXHRlbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuIFxcdFxcdHJldHVybiBzLVxcdTAwM2VpbnVzZTtcXG4gXFx0LypcXG4gXFx0ICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uXFxuQEAgLTc5MjksNyArNzk3NSw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiBcXHRhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBzLVxcdTAwM2VhbGlnbik7XFxuICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbiBcXHRpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQoYWxpZ25lZF9zaXplIC0gc2l6ZSBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpXFxuK1xcdFxcdFxcdChhbGlnbmVkX3NpemUgLSBzaXplIFxcdTAwM2U9IGNhY2hlX29ial9leHRfc2l6ZShzKSkpXFxuIFxcdFxcdHMtXFx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XFxuICNlbmRpZlxcbiBcXHRzaXplID0gYWxpZ25lZF9zaXplO1xcbkBAIC04NTM5LDYgKzg1ODUsOCBAQCB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZClcXG4gXFx0XFx0Ym9vdF9rbWVtX2NhY2hlX25vZGU7XFxuIFxcdGludCBub2RlO1xcbiBcXG4rXFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQoKTtcXG4rXFxuIFxcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcXG4gXFx0XFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MTguMDUxOTAyODU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQzMTI2NDA2MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0OGY4NDAzMmQxYmQ5MDhlNDYxNDljY2FjZGI5MDEzZWUzMzY5OTIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDI6MTM6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uZDAyZWI1NGVlOGYyYzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbkBAIC0xMTIsMyArMTEyLDEwIEBAIFRvIGRvIHNvOlxuIFxuIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczpcbiAgIGFsbG9jX2hvb2tzX3RhZyhodC1cdTAwM2V5b3VyX3NhdmVkX3RhZywga21hbGxvY19ub3Byb2YoLi4uKSlcbitcbitOb3Rlc1xuKz09PT09XG4rXG4rLSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLlxuKyAgS0ZFTkNFIGFsbG9jYXRpb25zIGFyZSByYXJlIGFuZCBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyLCBzbyB0aGlzIG9taXNzaW9uXG4rICBpcyBuZWdsaWdpYmxlLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGUxZjQ2YTAwMTZmY2ZkLi45Mzg2OWNjMzVjMjViYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTE0NDAsMTkgKzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4tLypcbi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLVx1MDAzZW1lbWNnX2RhdGFcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuLSAqL1xuLXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuLVx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuLSNlbmRpZlxuLX0gX19hbGlnbmVkKDgpO1xuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmhcbmluZGV4IDMyYzlmOGVkN2FlMjA1Li5lMTkxNTAyNmUwMzA0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTQ1LDYgKzQ1LDcgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdF9TTEFCX0FDQ09VTlQsXG4rXHRfU0xBQl9NQVlfQUNDT1VOVCxcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcbiBcdF9TTEFCX0tBU0FOLFxuQEAgLTIwNCw4ICsyMDUsMTAgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX01BWV9BQ0NPVU5UKVxuICNlbHNlXG4gIyBkZWZpbmUgU0xBQl9BQ0NPVU5UXHRcdF9fU0xBQl9GTEFHX1VOVVNFRFxuKyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlRcdF9fU0xBQl9GTEFHX1VOVVNFRFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jXG5pbmRleCA2NTc3YmQ3Njk1NGViNC4uOTA5MjVjNjQ2YzRjMjQgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXG4rKysgYi9tbS9rZmVuY2UvY29yZS5jXG5AQCAtNjM2LDExICs2MzYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpXG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gKyBpKTtcbiBcdFx0X19TZXRQYWdlU2xhYihwYWdlKTtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4tXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuLVx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8XG4tXHRcdFx0XHQgTUVNQ0dfREFUQV9PQkpFWFRTO1xuLSNlbmRpZlxuIFx0fVxuIFxuIFx0LypcbkBAIC03MDQsMTAgKzY5OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiArIGkpO1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLSNlbmRpZlxuIFx0XHRfX0NsZWFyUGFnZVNsYWIocGFnZSk7XG4gXHR9XG4gXG5AQCAtMTI0OCw5ICsxMjM5LDYgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4ge1xuIFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0S0ZFTkNFX1dBUk5fT04obWV0YS1cdTAwM2VvYmpfZXh0cy5vYmpjZyk7XG4tI2VuZGlmXG4gXHQvKlxuIFx0ICogSWYgdGhlIG9iamVjdHMgb2YgdGhlIGNhY2hlIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSwgZGVmZXIgZnJlZWluZ1xuIFx0ICogdGhlIG9iamVjdCwgYXMgdGhlIG9iamVjdCBwYWdlIG1heSBiZSByZWN5Y2xlZCBmb3Igb3RoZXItdHlwZWRcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2Uva2ZlbmNlLmggYi9tbS9rZmVuY2Uva2ZlbmNlLmhcbmluZGV4IDFmNjE4ZjliMGQxMmQ5Li5lNmI0YmYzNDlmZjczMCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxuKysrIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5AQCAtMTAyLDkgKzEwMiw2IEBAIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEge1xuIFx0c3RydWN0IGtmZW5jZV90cmFjayBmcmVlX3RyYWNrIF9fZ3VhcmRlZF9ieShcdTAwMjZsb2NrKTtcbiBcdC8qIEZvciB1cGRhdGluZyBhbGxvY19jb3ZlcmVkIG9uIGZyZWVzLiAqL1xuIFx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFx1MDAyNmxvY2spO1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdHN0cnVjdCBzbGFib2JqX2V4dCBvYmpfZXh0cztcbi0jZW5kaWZcbiB9O1xuIFxuICNkZWZpbmUgS0ZFTkNFX01FVEFEQVRBX1NJWkUgUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IGtmZW5jZV9tZXRhZGF0YSkgKiBcXFxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jIGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbmluZGV4IGRlMmQwZjdkNjJiMTVlLi45ODY3YzAzZWYwYWUzZCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCAqdGVzdF9hbGxvYyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGVudW0gYWxsb2NhdFxuIFx0XHRcdCAqIG1lbWNnIGFjY291bnRpbmcgd29ya3MgY29ycmVjdGx5LlxuIFx0XHRcdCAqL1xuIFx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpfdG9faW5kZXgocywgc2xhYiwgYWxsb2MpLCAwVSk7XG4tXHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ianNfcGVyX3NsYWIocywgc2xhYiksIDEpO1xuK1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAoKHVuc2lnbmVkIGludClzbGFiLVx1MDAzZW9iamVjdHMpLCAxKTtcbiBcbiBcdFx0XHRpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSlcbiBcdFx0XHRcdHJldHVybiBhbGxvYztcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi42YjUxZGRmNmRmZTAyMiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjg2NSwxOCArMjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKVxuIFx0ICovXG4gXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xuIFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuLVx0dW5zaWduZWQgaW50IG9mZjtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmICghb2JqX2V4dHMpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0b2ZmID0gb2JqX3RvX2luZGV4KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgcCk7XG4tXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0aWYgKG9ial9leHQtXHUwMDNlb2JqY2cpIHtcbi1cdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC1cdTAwM2VvYmpjZztcbitcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4rXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqX2V4dHMsIHApO1xuK1x0b2JqY2cgPSBzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCk7XG4rXHRpZiAob2JqY2cpIHtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gXHR9XG5AQCAtMzU0MSw3ICszNTQyLDYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFx0c2l6ZV90IGk7XG4gXG4gXHQvKlxuQEAgLTM1ODMsMTEgKzM1ODMsMTYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcbiBcdFx0c2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcbiBcbi1cdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpIHtcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpKSB7XG4rXHRcdFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHBbaV0pKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIHNsYWJfYWxsb2NfZmxhZ3MpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSBcdTAwMjZcdTAwMjYgV0FSTl9PTl9PTkNFKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0LypcbiBcdFx0ICogaWYgd2UgZmFpbCBhbmQgc2l6ZSBpcyAxLCBtZW1jZ19hbGxvY19hYm9ydF9zaW5nbGUoKSB3aWxsXG4gXHRcdCAqIGp1c3QgZnJlZSB0aGUgb2JqZWN0LCB3aGljaCBpcyBvayBhcyB3ZSBoYXZlIG5vdCBhc3NpZ25lZFxuQEAgLTM2MTYsMTAgKzM2MjEsMTEgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcbiBcdFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4rXG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IG9iamNnO1xuK1x0XHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTtcbitcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fVxuIFxuQEAgLTM2MzUsMTUgKzM2NDEsMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4gXHRcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcbi1cdFx0dW5zaWduZWQgaW50IG9mZjtcbiBcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4rXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xuK1x0XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiBcdFx0aWYgKCFvYmpjZylcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IE5VTEw7XG4rXHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7XG4gXG4gXHRcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xuIFx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCBmNWUzMzZiNmI2YjA0Yy4uMDQ2MDBmNTdiNDAxNDYgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTgxLDEwICs4MSwxMSBAQCBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMge1xuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdFx0XHRcdFx0LypcbiBcdFx0XHRcdFx0ICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJ2NvdW50ZXJzJyBmaWVsZFxuLVx0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXG4tXHRcdFx0XHRcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4rXHRcdFx0XHRcdCAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3RcbitcdFx0XHRcdFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuIFx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0cmlkZTtcbitcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7XG4gI2VuZGlmXG4gXHRcdFx0XHR9O1xuIFx0XHRcdH07XG5AQCAtMzMwLDEyICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0cmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNsYWItXHUwMDNlb2JqZWN0cztcbi19XG4tXG4gLypcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXG4gICpcbkBAIC01NTUsNiArNTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qXG4rICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluXG4rICogc2xhYi1cdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cdTAwM2VtZW1jZ19kYXRhKSBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuKyAqL1xuK3N0cnVjdCBzbGFib2JqX2V4dCB7XG4rXHQvKlxuK1x0ICogQWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiBzaG91bGQgYmUgcG9pbnRlci1zaXplZCB0byBhdm9pZCBtZW1vcnlcbitcdCAqIHdhc3RlXG4rXHQgKi9cbitcdHVuaW9uIHtcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmIF9jdHJlZjtcbisjZW5kaWZcbitcdH07XG4rfSBfX2FsaWduZWQoOCk7XG4rXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rREVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxuK3tcbitcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRcdCAgIFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbitzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxuK3tcbitcdHJldHVybiAoY2FjaGUtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rI2lmZGVmIENPTkZJR182NEJJVFxuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XG4rI2Vsc2VcbitcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVx1MDAzZXNsYWJfY2FjaGUpO1xuKyNlbmRpZlxuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbit7XG4rXHRzaXplX3Qgc3ogPSAwO1xuK1xuK1x0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHNpemVfdCBzeiA9IDA7XG4rXG4rXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxuIFxuIC8qXG5AQCAtNTcyLDcgKzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuICAqIGlmIChvYmpfZXh0cykge1xuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xuKyAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqKTtcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiAgKiB9XG5AQCAtNjEwLDQ4ICs2OTIsODYgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zbGFiX29ial9leHRzKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfNjRCSVRcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0c2xhYi1cdTAwM2VzdHJpZGUgPSBzdHJpZGU7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VzdHJpZGU7XG4rXHQvKlxuK1x0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbitcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuK1x0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuK1x0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbitcdCAqL1xuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfaW5fb2JqZWN0O1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKHN0cmlkZSAhPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gI2VuZGlmXG4gXG4gLypcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuKyAqIEBzOiBjYWNoZSB0aGF0IHRoZSBzbGFiIGJlbG9uZ3MgdG9cbiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdFxuICAqIEBvYmpfZXh0czogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIHZlY3RvclxuLSAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxuKyAqIEBvYmo6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdC5cbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSBzZWN0aW9uIGNvdmVyZWQgYnkgZ2V0L3B1dF9zbGFiX29ial9leHRzKCkuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYixcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKlxuK3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4rXHQgICAgIGNvbnN0IHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4rXHR1bnNpZ25lZCBpbnQgaW5kZXg7XG4rXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xuIFxuLVx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgK1xuLVx0XHRcdFx0XHQgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpO1xuK1x0LypcbitcdCAqIEtGRU5DRSBvYmplY3RzIGhhdmUgTlVMTCBvYmpfZXh0cyBhbmQgdGh1cyBjYW4ndCByZWFjaCB0aGlzXG4rXHQgKiBhbmQgd2UgZG9uJ3QgbmVlZCBvYmpfdG9faW5kZXgoKVxuK1x0ICovXG4rXHRpbmRleCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcbitcbitcdGlmICghb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuK1x0XHRzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcbitcdGVsc2VcbitcdFx0c3RyaWRlID0gcy1cdTAwM2VzaXplO1xuK1xuK1x0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgKyBpbmRleCAqIHN0cmlkZSk7XG4rXG4gXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKG9ial9leHQpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbit7XG4rXHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4rXHRyZXR1cm4gb2JqX2V4dC1cdTAwM2Vfb2JqY2c7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4re1xuK1x0LyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xuK1x0b2JqX2V4dC1cdTAwM2Vfb2JqY2cgPSBvYmpjZztcbit9XG4rI2VuZGlmXG4rXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rc3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG4rc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXG4re1xuK1x0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdG9ial9leHQgKz0gMTtcbitcbitcdHJldHVybiBcdTAwMjZvYmpfZXh0LVx1MDAzZV9jdHJlZjtcbit9XG4rI2VuZGlmXG4rXG4gaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiBcbkBAIC02NjIsMTYgKzc4MiwxNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4rc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbitcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH1cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIDA7IH1cbi1cbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xuaW5kZXggMDNlY2FjMTJjZDg2NWYuLjFlMWQzZmVlYzM1MzViIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuKysrIGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7XG4gXHRcdFNMQUJfT0JKX0VYVF9JTl9PQkopXG4gXG4gI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcXFxuLVx0XHRcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UKVxuK1x0XHRcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UIHwgU0xBQl9NQVlfQUNDT1VOVClcbiBcbiAvKlxuICAqIE1lcmdlIGNvbnRyb2wuIElmIHRoaXMgaXMgc2V0IHRoZW4gbm8gbWVyZ2luZyBvZiBzbGFiIGNhY2hlcyB3aWxsIG9jY3VyLlxuQEAgLTM1OSw2ICszNTksMTMgQEAgc3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogRm9yIG5vdyB3ZSBhc3N1bWUgYW55IGNhY2hlIGNhbiBiZSB1c2VkIHdpdGggX19HRlBfQUNDT1VOVCBhbmQgdGh1c1xuK1x0ICogbWF5IG5lZWQgdG8gc3RvcmUgb2JqY2cgcG9pbnRlcnMgZm9yIG9iamVjdHNcbitcdCAqL1xuK1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbitcdFx0ZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDtcbitcbiBcdC8qIEZhaWwgY2xvc2VkIG9uIGJhZCB1c2Vyc2l6ZSBvZiB1c2Vyb2Zmc2V0IHZhbHVlcy4gKi9cbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpIHx8XG4gXHQgICAgV0FSTl9PTighYXJncy1cdTAwM2V1c2Vyc2l6ZSBcdTAwMjZcdTAwMjYgYXJncy1cdTAwM2V1c2Vyb2Zmc2V0KSB8fFxuQEAgLTk4NCwxMSArOTkxLDIwIEBAIG5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG4gI2VuZGlmXG4gXG4gXHQvKlxuLVx0ICogSWYgQ09ORklHX01FTUNHIGlzIGVuYWJsZWQsIGRpc2FibGUgY2FjaGUgbWVyZ2luZyBmb3Jcbi1cdCAqIEtNQUxMT0NfTk9STUFMIGNhY2hlcy5cbitcdCAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCBub3RcbitcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXG4rXHQgKiBjYWNoZS5cbitcdCAqXG4rXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcbitcdCAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2guIFRoZSBleGNlcHRpb24gaXMgYVxuK1x0ICogS01BTExPQ19OT19PQkpfRVhUIGNhY2hlLlxuIFx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXG4tXHRcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG4rXHRcdGlmICh0eXBlID09IEtNQUxMT0NfTk9STUFMIFx1MDAyNlx1MDAyNiBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpXG4rXHRcdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbitcdFx0ZWxzZSBpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT19PQkpfRVhUKSlcbitcdFx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuK1x0fVxuIFxuIFx0aWYgKG1pbmFsaWduIFx1MDAzZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHtcbiBcdFx0YWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7XG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCAwMzM3ZTYwZGI1YWNlMC4uOTRiNzQ0ZTVhYzc5MTkgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTIxMyw2ICsyMTMsMTEgQEAgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbiBzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbisjZW5kaWZcbitcbiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovXG4gc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7XG4gXHR1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyO1xuQEAgLTgwMyw3ICs4MDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9zbGFiX29ial9leHRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX3NpemVfaW5fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4rXHRyZXR1cm4gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHQvKlxuLVx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbi1cdCAqIGNoZWNrIHRoZSBzdHJpZGUuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuLVx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuLVx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbi1cdCAqL1xuLVx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKHNsYWJfZ2V0X3N0cmlkZShzbGFiKSA9PSBzLVx1MDAzZXNpemUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9pbmZvX2VuZChzKTtcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRyZXR1cm4gb2Zmc2V0O1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0c2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3QgPSAxO1xuIH1cbi1cbisjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuLVx0XHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XG4rXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuK1x0XHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4gXG4gXHRpZiAob2ZmICE9IHNpemVfZnJvbV9vYmplY3QocykpXG4gXHRcdC8qIEJlZ2lubmluZyBvZiB0aGUgZmlsbGVyIGlzIHRoZSBmcmVlIHBvaW50ZXIgKi9cbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxuIFxuIFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuK1x0aWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbitcdFx0b2ZmICs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuIFxuIFx0aWYgKHNpemVfZnJvbV9vYmplY3QocykgPT0gb2ZmKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7XG4gXHRlbmQgPSBzdGFydCArIGxlbmd0aDtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XG4rXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjYgIW9ial9leHRzX2luX29iamVjdChzbGFiKSkge1xuIFx0XHRyZW1haW5kZXIgPSBsZW5ndGg7XG4gXHRcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzLCBzbGFiKTtcbiBcdFx0cmVtYWluZGVyIC09IG9ial9leHRzX3NpemVfaW5fc2xhYihzbGFiKTtcbkBAIC0yMDcwLDIwICsyMDY3LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbiBcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4gXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcbiBcdGlmIChzbGFiX2V4dHMpIHtcbitcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4rXG4gXHRcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4tXHRcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsXG4tXHRcdFx0XHRcdFx0IG9ial9zbGFiLCBvYmopO1xuLVx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYixcbi1cdFx0XHRcdFx0XHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7XG4rXHRcdHJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihvYmpfc2xhYiwgZXh0KTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZikpKSB7XG4rXHRcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KHJlZikpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbiBcdFx0LyogY29kZXRhZyBzaG91bGQgYmUgTlVMTCBoZXJlICovXG4tXHRcdFdBUk5fT04oZXh0LVx1MDAzZXJlZi5jdCk7XG4tXHRcdHNldF9jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpO1xuK1x0XHRXQVJOX09OKHJlZi1cdTAwM2VjdCk7XG4rXHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4gXHR9XG4gfVxuQEAgLTIwOTMsMTkgKzIwOTEsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRyZXR1cm4gY21weGNoZyhcdTAwMjZzbGFiLVx1MDAzZW9ial9leHRzLCAwLCBPQkpFWFRTX0FMTE9DX0ZBSUwpID09IDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpXG4rc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbitcdFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpXG4ge1xuK1x0dW5zaWduZWQgaW50IHN0cmlkZTtcbitcbitcdGlmICghc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qXG4gXHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbiBcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbiBcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbiBcdCAqL1xuLVx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgaTtcbitcdGlmIChvYmpfZXh0cyAhPSBPQkpFWFRTX0FMTE9DX0ZBSUwpXG4rXHRcdHJldHVybjtcbitcbitcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpIC8gc2l6ZW9mKCp2ZWMpO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIHNsYWItXHUwMDNlb2JqZWN0czsgaSsrKSB7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgdmVjKTtcbiBcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSsrKVxuLVx0XHRcdHNldF9jb2RldGFnX2VtcHR5KFx1MDAyNnZlY1tpXS5yZWYpO1xuK1x0XHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xuK1x0XHR2ZWMgKz0gc3RyaWRlO1xuIFx0fVxuIH1cbiBcbkBAIC0yMTEzLDggKzIxMjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbitcdFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpIHt9XG4gXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4gXG5AQCAtMjEyNywxMiArMjEzNSwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xuLVx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xuIFx0Ym9vbCBuZXdfc2xhYiA9IGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcbiBcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XG4gXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcbi1cdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cdTAwM2VvYmplY3RzO1xuK1x0c2l6ZV90IHN6ID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gXG4gXHRnZnAgXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XG4gXHQvKlxuQEAgLTIxODMsNyArMjE5MCw3IEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiAjZW5kaWZcbiByZXRyeTpcbiBcdG9sZF9leHRzID0gUkVBRF9PTkNFKHNsYWItXHUwMDNlb2JqX2V4dHMpO1xuLVx0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKG9sZF9leHRzLCB2ZWMsIG9iamVjdHMpO1xuK1x0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIsIG9sZF9leHRzLCB2ZWMpO1xuIFxuIFx0aWYgKG5ld19zbGFiKSB7XG4gXHRcdC8qXG5AQCAtMjI1MCw5ICsyMjU3LDYgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHR2b2lkICphZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcbi1cdC8qIEluaXRpYWxpemUgc3RyaWRlIGVhcmx5IHRvIGF2b2lkIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgKi9cbi1cdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG4tXG4gXHRpZiAoIW5lZWRfc2xhYl9vYmpfZXh0cyhzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTIyNzgsMTUgKzIyODIsMTQgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdFx0Zm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi1cdTAwM2VvYmplY3RzKVxuLVx0XHRcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsXG4tXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbitcdFx0XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICsgb2Zmc2V0LCAwLCBzbGFiX29ial9leHRfc2l6ZShzbGFiKSk7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbiAjZW5kaWZcbiBcdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xuLVx0XHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgcy1cdTAwM2VzaXplKTtcbitcdFx0c2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMzIzLDExICsyMzI2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuIHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0XHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxuIHtcbi1cdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbi1cdFx0cHJfd2Fybl9vbmNlKFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cIixcbi1cdFx0XHQgICAgIF9fZnVuY19fLCBzLVx1MDAzZW5hbWUpO1xuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSkge1xuK1x0XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGlmIChhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbitcdFx0XHRwcl93YXJuX29uY2UoXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwiLFxuK1x0XHRcdFx0ICAgICBfX2Z1bmNfXywgcy1cdTAwM2VuYW1lKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIHNsYWJfb2JqX2V4dHMoc2xhYik7XG5AQCAtMjM2MCwxNCArMjM2NywyNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxuIFx0ICogY2hlY2sgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhbGxvY190YWdfYWRkKCkuXG4gXHQgKi9cbiBcdGlmIChvYmpfZXh0cykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb2JqX2lkeCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmplY3QpO1xuK1x0XHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmO1xuIFxuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial9pZHgpO1xuLVx0XHRhbGxvY190YWdfYWRkKFx1MDAyNm9ial9leHQtXHUwMDNlcmVmLCBjdXJyZW50LVx1MDAzZWFsbG9jX3RhZywgcy1cdTAwM2VzaXplKTtcbitcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqZWN0KTtcbitcdFx0cmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIG9ial9leHQpO1xuK1xuK1x0XHRhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC1cdTAwM2VhbGxvY190YWcsIHMtXHUwMDNlc2l6ZSk7XG4rXG4gXHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyk7XG4rXHRcdC8qXG4rXHRcdCAqIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZ1xuK1x0XHQgKiBvbmVzIGlzIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIgc28gaXQncyBub3Qgd29ydGggc2V0dGluZ1xuK1x0XHQgKiB0YWdzIGFzIGluYWNjdXJhdGUgYmVjYXVzZSBvZiB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFpc19rZmVuY2VfYWRkcmVzcyhvYmplY3QpKVxuK1x0XHRcdGFsbG9jX3RhZ19zZXRfaW5hY2N1cmF0ZShjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyk7XG4gXHR9XG4gfVxuIFxuQEAgLTIzODQsNyArMjQwMSw2IEBAIHN0YXRpYyBub2lubGluZSB2b2lkXG4gX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4gXHRcdFx0ICAgICAgIGludCBvYmplY3RzKVxuIHtcbi1cdGludCBpO1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcbiBcdC8qIHNsYWItXHUwMDNlb2JqX2V4dHMgbWlnaHQgbm90IGJlIE5VTEwgaWYgaXQgd2FzIGNyZWF0ZWQgZm9yIE1FTUNHIGFjY291bnRpbmcuICovXG5AQCAtMjM5NiwxMCArMjQxMiwxMSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcFxuIFx0XHRyZXR1cm47XG4gXG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpKyspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpKyspIHtcbitcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4gXG4tXHRcdGFsbG9jX3RhZ19zdWIoXHUwMDI2c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLVx1MDAzZXJlZiwgcy1cdTAwM2VzaXplKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbitcdFx0YWxsb2NfdGFnX3N1YihzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgZXh0KSwgcy1cdTAwM2VzaXplKTtcbiBcdH1cbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiB9XG5AQCAtMjQxMiw2ICsyNDI5LDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xuIH1cbiBcbisvKlxuKyAqIE1ha2Ugc3VyZSB0aGUgc3RhdGljIGtleSB1c2VkIGJ5IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpIHJlZmxlY3RzIHRoZVxuKyAqIHZhbHVlIG9mICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKClcbisgKlxuKyAqIEFueSBsYXRlciBtZW0gYWxsb2MgcHJvZmlsaW5nIHNodXRkb3duIHdvbid0IGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGljIGtleVxuKyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbitcdGJvb2wgbmVlZF9jb2RldGFnID0gIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKTtcbitcbitcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4rXHRcdGlmIChuZWVkX2NvZGV0YWcpXG4rXHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHR9XG4rfVxuK1xuICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkXG5AQCAtMjQyNiw2ICsyNDYyLDEwIEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbit9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICsyNTExLDkgQEAgdm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdHJldHVybjtcbitcbiBcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xuIFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuQEAgLTI0ODQsNyArMjUyNyw2IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFxuIFx0cGFnZSA9IHZpcnRfdG9fcGFnZShwKTtcbiBcdGlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7XG5AQCAtMjUxNywxNiArMjU1OSwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbitcdGlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xuIFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0aWYgKG9ial9leHRzKSB7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRpZiAodW5saWtlbHkob2JqX2V4dC1cdTAwM2VvYmpjZykpIHtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcCk7XG4rXHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCArMzQzMiwxNSBAQCBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuIFx0XHRzdGF0KHMsIE9SREVSX0ZBTExCQUNLKTtcbiBcdH1cbiBcbitcdC8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqL1xuK1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4rXG4gXHRzbGFiLVx1MDAzZW9iamVjdHMgPSBvb19vYmplY3RzKG9vKTtcbi1cdHNsYWItXHUwMDNlaW51c2UgPSAwO1xuLVx0c2xhYi1cdTAwM2Vmcm96ZW4gPSAwO1xuIFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcbitcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbitcdFx0c2xhYi1cdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7XG4rI2VuZGlmXG4gXHRzbGFiLVx1MDAzZXNsYWJfY2FjaGUgPSBzO1xuIFxuIFx0a2FzYW5fcG9pc29uX3NsYWIoc2xhYik7XG5AQCAtNjUyNiw3ICs2NTcyLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuK1x0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuIFx0XHRyZXR1cm4gcy1cdTAwM2VpbnVzZTtcbiBcdC8qXG4gXHQgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb25cbkBAIC03OTI5LDcgKzc5NzUsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xuICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbiBcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpXG4rXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiArODU4NSw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKVxuIFx0XHRib290X2ttZW1fY2FjaGVfbm9kZTtcbiBcdGludCBub2RlO1xuIFxuK1x0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQoKTtcbitcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MTguMDUxOTA0NjM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MzMxNDIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTFVCIE9iamVjdCBFeHRlbnNpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgc3Vic3RhbnRpYWwgY2hhbmdlcyB0byBob3cgYHNsYWJvYmpfZXh0YCBpcyBoYW5kbGVkIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIGRlYWxpbmcgd2l0aCBob3cgb2JqZWN0IGV4dGVuc2lvbnMgYXJlIGFsbG9jYXRlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkLCBzbyB0aGlzIGFic29sdXRlbHkgKm5lZWRzKiBmdXp6aW5nLlxuXG5UaGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGUgd2F5IGBzbGFib2JqX2V4dGAgaXMgZGVmaW5lZCBpbml0aWFsbHkgY29uZnVzZWQgbWUsIGFzIHRoZSB1bmlvbiBzdHJ1Y3R1cmUgc2VlbWVkIHRvIHN1Z2dlc3QgdGhhdCBpZiBib3RoIGZlYXR1cmVzIHdlcmUgZW5hYmxlZCwgdGhleSB3b3VsZCBzaGFyZSB0aGUgc2FtZSBtZW1vcnkuIEJ1dCwgbm8sIGl0IGxvb2tzIGxpa2UgaXQncyBhY3R1YWxseSBhbiBhcnJheSBvZiBgc2xhYm9ial9leHRgIGVsZW1lbnRzIHBlciBvYmplY3QuIElmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoZSBmaXJzdCBlbGVtZW50IHdpbGwgYmUgdXNlZCBmb3IgYG9iamNnYCwgYW5kIHRoZW4gYGNvZGV0YWdfcmVmYCBnb2VzIGluIHRoZSBzZWNvbmQuIFRoZSBzaXplIG9mIGBzbGFib2JqX2V4dGAgaXMgOCBieXRlcywgYW5kIGBzbGFiX29ial9leHRfc2l6ZWAgcmV0dXJucyBgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzemAgd2hlcmUgYHN6YCBpcyBlaXRoZXIgMSBvciAyIGRlcGVuZGluZyBvbiB0aGUgbmVlZC5cblxuVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUncyBhIGdvb2QgYW1vdW50IG9mIGV4dHJhIG1lbW9yeSB1c2UgaWYgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGJvdGggZW5hYmxlZC5cblxuTGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgbmV3bHkgaW50cm9kdWNlZC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBleHBvc2VkIHN5bWJvbHMg4oCTIHRoaW5ncyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgbWlnaHQgYmUgY2FsbGluZy4gV2UndmUgZ290IGBhbGxvY19zbGFiX29ial9leHRzYCwgdGhlIGlubGluZSBgc2xhYl9vYmpfZXh0YCwgYHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCwgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYW5kIGBrbWVtX2NhY2hlX2NyZWF0ZWAgKGluZGlyZWN0bHkgdmlhIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgKSwgcGx1cyBga21lbV9jYWNoZV9hbGxvY2AgYW5kIGBrbWVtX2NhY2hlX2ZyZWVgIHZpYSBob29rcy5cblxuTm93LCBsZXQncyBodW50IGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gcmVsZXZhbnQgZmlsZXMuIEknbSBjaGVja2luZyBgbW0vc2x1Yi5jYCwgYG1tL3NsYWJfY29tbW9uLmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuIEkndmUgY29uZmlybWVkIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIG5vbi1zdGF0aWMgaW4gYG1tL3NsdWIuY2AsIGFuZCBzbyBhcmUgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBhbmQgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGhvb2tzLiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGNvbmZpcm0gdGhhdCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyBub24tc3RhdGljLiBGaW5hbGx5LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpcyBub24tc3RhdGljIGluIGBtbS9zbGFiX2NvbW1vbi5jYC5cblxuQWxzbyB0byBrZWVwIGluIG1pbmQgYXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLCBgQ09ORklHX1NMQUJfT0JKX0VYVGAgKHNlbGVjdGVkIGJ5IHRoZSBhYm92ZSksIGFuZCBgQ09ORklHX0tGRU5DRWAuIEkgc2hvdWxkIHZlcmlmeSB0aGVzZSBmdW5jdGlvbiBuYW1lcywgYW5kIGFueSBvdGhlciByZWxldmFudCBuYW1lcywgbGF0ZXIsIGJ1dCB0aGVzZSBhcmUgYWxsIHN0YXJ0aW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NTAsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MzAuNTg1MDUwMTAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDkyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbHxzdHJ1Y3QgW2Etel9dKyBcXFxcKj8pIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTQwMz1zdGF0aWMgaW5saW5lXFxubW0vc2x1Yi5jOjQwNDp2b2lkIHN0YXRfYWRkKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSwgaW50IHYpXFxubW0vc2x1Yi5jLTQwNS17XFxuLS1cXG5tbS9zbHViLmM9OTM1PXN0YXRpYyBib29sIHNsYWJfYWRkX2t1bml0X2Vycm9ycyh2b2lkKVxcbi0tXFxubW0vc2x1Yi5jLTk1MC1cXG5tbS9zbHViLmM6OTUxOmJvb2wgc2xhYl9pbl9rdW5pdF90ZXN0KHZvaWQpXFxubW0vc2x1Yi5jLTk1Mi17XFxuLS1cXG5tbS9zbHViLmM9MTA5Mz1zdGF0aWMgdm9pZCBwcmludF90cmFjayhjb25zdCBjaGFyICpzLCBzdHJ1Y3QgdHJhY2sgKnQsIHVuc2lnbmVkIGxvbmcgcHJfdGltZSlcXG4tLVxcbm1tL3NsdWIuYy0xMTEwLVxcbm1tL3NsdWIuYzoxMTExOnZvaWQgcHJpbnRfdHJhY2tpbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtMTExMi17XFxuLS1cXG5tbS9zbHViLmM9MTEyMT1zdGF0aWMgdm9pZCBwcmludF9zbGFiX2luZm8oY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMTEyNy1cXG5tbS9zbHViLmM6MTEyODp2b2lkIHNraXBfb3JpZ19zaXplX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCB2b2lkICpvYmplY3QpXFxubW0vc2x1Yi5jLTExMjkte1xcbi0tXFxubW0vc2x1Yi5jPTE3MDg9c3RhdGljXFxubW0vc2x1Yi5jOjE3MDk6dm9pZCBzZXR1cF9zbGFiX2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqYWRkcilcXG5tbS9zbHViLmMtMTcxMC17XFxuLS1cXG5tbS9zbHViLmM9MjAxMD1zdGF0aWMgaW5saW5lXFxubW0vc2x1Yi5jOjIwMTE6dm9pZCBzZXR1cF9zbGFiX2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqYWRkcikge31cXG5tbS9zbHViLmMtMjAxMi1cXG4tLVxcbm1tL3NsdWIuYz0yMTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjEzMy1cXG5tbS9zbHViLmM6MjEzNDppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxMzUtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjQ3Nj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjQ3Nzpib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjQ3OC1cXHRcXHRcXHRcXHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmM9MjUwMT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUwMjp2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxubW0vc2x1Yi5jLTI1MDMtXFx0XFx0XFx0ICBpbnQgb2JqZWN0cylcXG4tLVxcbm1tL3NsdWIuYz0yNTIyPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTIzOmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG5tbS9zbHViLmMtMjUyNC17XFxuLS1cXG5tbS9zbHViLmM9MjYzNj1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubW0vc2x1Yi5jOjI2Mzc6Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxcbm1tL3NsdWIuYy0yNjM4LVxcdFxcdCAgICBib29sIGFmdGVyX3JjdV9kZWxheSlcXG4tLVxcbm1tL3NsdWIuYz0yNzIxPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNzIyOmJvb2wgc2xhYl9mcmVlX2ZyZWVsaXN0X2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipoZWFkLCB2b2lkICoqdGFpbCxcXG5tbS9zbHViLmMtMjcyMy1cXHRcXHRcXHQgICAgIGludCAqY250KVxcbi0tXFxubW0vc2x1Yi5jPTQwNjc9c3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL3NsdWIuYy00MDkwLS8qIG5lZWRlZCBmb3Iga3ZmcmVlX3JjdV9iYXJyaWVyKCkgKi9cXG5tbS9zbHViLmM6NDA5MTp2b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy00MDkyLXtcXG4tLVxcbm1tL3NsdWIuYy00MTIxLVxcbm1tL3NsdWIuYzo0MTIyOnZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpXFxubW0vc2x1Yi5jLTQxMjMte1xcbi0tXFxubW0vc2x1Yi5jPTQ1OTE9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjQ1OTI6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxcbm1tL3NsdWIuYy00NTkzLVxcdFxcdFxcdCAgdm9pZCAqKnAsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vc2x1Yi5jPTUwMDI9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2YpO1xcbm1tL3NsdWIuYy01MDAzLVxcbm1tL3NsdWIuYzo1MDA0OmJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXFxubW0vc2x1Yi5jLTUwMDUte1xcbi0tXFxubW0vc2x1Yi5jPTUwNzg9a21lbV9jYWNoZV9wcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTUxNjAtICovXFxubW0vc2x1Yi5jOjUxNjE6dm9pZCBrbWVtX2NhY2hlX3JldHVybl9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbm1tL3NsdWIuYy01MTYyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxubW0vc2x1Yi5jLTUyMTgtICovXFxubW0vc2x1Yi5jOjUyMTk6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxubW0vc2x1Yi5jLTUyMjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBzbGFiX3NoZWFmICoqc2hlYWZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbm1tL3NsdWIuYz01OTc3PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzo1OTc4OmJvb2wgZnJlZV90b19wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy01OTc5LXtcXG4tLVxcbm1tL3NsdWIuYz02MDcxPXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xcbm1tL3NsdWIuYy02MDcyLVxcbm1tL3NsdWIuYzo2MDczOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG5tbS9zbHViLmMtNjA3NC17XFxuLS1cXG5tbS9zbHViLmM9NjM5NT1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY0MDctXFxubW0vc2x1Yi5jOjY0MDg6dm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZClcXG5tbS9zbHViLmMtNjQwOS17XFxuLS1cXG5tbS9zbHViLmM9NjQxNj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6NjQxNzp2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcXG5tbS9zbHViLmMtNjQxOC1cXHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vc2x1Yi5jPTY0MzU9c3RhdGljIG5vaW5saW5lXFxubW0vc2x1Yi5jOjY0MzY6dm9pZCBtZW1jZ19hbGxvY19hYm9ydF9zaW5nbGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtNjQzNy17XFxuLS1cXG5tbS9zbHViLmM9NjQ0Nz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6NjQ0ODp2b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcXG5tbS9zbHViLmMtNjQ0OS1cXHRcXHQgICAgdm9pZCAqdGFpbCwgdm9pZCAqKnAsIGludCBjbnQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL3NsdWIuYz02NDY0PXN0YXRpYyB2b2lkIHNsYWJfZnJlZV9hZnRlcl9yY3VfZGVidWcoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02NDkyLSNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbm1tL3NsdWIuYzo2NDkzOnZvaWQgX19fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKngsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9zbHViLmMtNjQ5NC17XFxuLS1cXG5tbS9zbHViLmM9NjUwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCB3YXJuX2ZyZWVfYmFkX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxcbi0tXFxubW0vc2x1Yi5jLTY1MjktICovXFxubW0vc2x1Yi5jOjY1MzA6dm9pZCBrbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpXFxubW0vc2x1Yi5jLTY1MzEte1xcbi0tXFxubW0vc2x1Yi5jPTY2NDQ9c3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXFxuLS1cXG5tbS9zbHViLmMtNjY2OS0gKi9cXG5tbS9zbHViLmM6NjY3MDp2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm1tL3NsdWIuYy02NjcxLXtcXG4tLVxcbm1tL3NsdWIuYy02NzE2LSAqL1xcbm1tL3NsdWIuYzo2NzE3OnZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02NzE4LXtcXG4tLVxcbm1tL3NsdWIuYz02NzQwPUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xcbi0tXFxubW0vc2x1Yi5jLTY3NTAtICovXFxubW0vc2x1Yi5jOjY3NTE6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02NzUyLXtcXG4tLVxcbm1tL3NsdWIuYz02OTgzPUVYUE9SVF9TWU1CT0woX19rdm1hbGxvY19ub2RlX25vcHJvZik7XFxuLS1cXG5tbS9zbHViLmMtNjk5NC0gKi9cXG5tbS9zbHViLmM6Njk5NTp2b2lkIGt2ZnJlZShjb25zdCB2b2lkICphZGRyKVxcbm1tL3NsdWIuYy02OTk2LXtcXG4tLVxcbm1tL3NsdWIuYz03MDAyPUVYUE9SVF9TWU1CT0woa3ZmcmVlKTtcXG4tLVxcbm1tL3NsdWIuYy03MDEwLSAqL1xcbm1tL3NsdWIuYzo3MDExOnZvaWQga3ZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxcbm1tL3NsdWIuYy03MDEyLXtcXG4tLVxcbm1tL3NsdWIuYz03MDE4PUVYUE9SVF9TWU1CT0woa3ZmcmVlX2F0b21pYyk7XFxuLS1cXG5tbS9zbHViLmMtNzAyOC0gKi9cXG5tbS9zbHViLmM6NzAyOTp2b2lkIGt2ZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcXG5tbS9zbHViLmMtNzAzMC17XFxuLS1cXG5tbS9zbHViLmM9NzA4Nz1zdGF0aWMgaW5saW5lXFxubW0vc2x1Yi5jOjcwODg6aW50IGJ1aWxkX2RldGFjaGVkX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSxcXG5tbS9zbHViLmMtNzA4OS1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIHN0cnVjdCBkZXRhY2hlZF9mcmVlbGlzdCAqZGYpXFxuLS1cXG5tbS9zbHViLmM9NzE1Mj1zdGF0aWMgdm9pZCBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuLS1cXG5tbS9zbHViLmMtNzE3Mi0vKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXFxubW0vc2x1Yi5jOjcxNzM6dm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbm1tL3NsdWIuYy03MTc0LXtcXG4tLVxcbm1tL3NsdWIuYz03MzcyPXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDIxLSAqL1xcbm1tL3NsdWIuYzo3NDIyOmJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxubW0vc2x1Yi5jLTc0MjMtXFx0XFx0c2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jPTc3Mzg9c3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc3NjAtXFxubW0vc2x1Yi5jOjc3NjE6dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtNzc2Mi17XFxuLS1cXG5tbS9zbHViLmM9ODA0OT1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXFxuLS1cXG5tbS9zbHViLmMtODA2OS1cXG5tbS9zbHViLmM6ODA3MDpib29sIF9fa21lbV9jYWNoZV9lbXB0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODA3MS17XFxuLS1cXG5tbS9zbHViLmMtODA4My0gKi9cXG5tbS9zbHViLmM6ODA4NDppbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy04MDg1LXtcXG4tLVxcbm1tL3NsdWIuYy04MTExLSNpZmRlZiBDT05GSUdfUFJJTlRLXFxubW0vc2x1Yi5jOjgxMTI6dm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtODExMy17XFxuLS1cXG5tbS9zbHViLmM9ODIzNj1fX2NvcmVfcGFyYW1fY2Ioc2xhYl9zdHJpY3RfbnVtYSwgXFx1MDAyNnBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hLCBOVUxMLCAwKTtcXG4tLVxcbm1tL3NsdWIuYy04MjQ4LSAqL1xcbm1tL3NsdWIuYzo4MjQ5OnZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcXG5tbS9zbHViLmMtODI1MC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgdG9fdXNlcilcXG4tLVxcbm1tL3NsdWIuYz04MzAxPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04MzY5LVxcbm1tL3NsdWIuYzo4MzcwOmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy04MzcxLXtcXG4tLVxcbm1tL3NsdWIuYz04NjQ2PXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtODY1NS1cXG5tbS9zbHViLmM6ODY1NjppbnQgZG9fa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUsXFxubW0vc2x1Yi5jLTg2NTctXFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLFxcbi0tXFxubW0vc2x1Yi5jPTk2ODk9c3RhdGljIGludCBzeXNmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy05NzMyLVxcbm1tL3NsdWIuYzo5NzMzOnZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTk3MzQte1xcbi0tXFxubW0vc2x1Yi5jLTk3MzgtXFxubW0vc2x1Yi5jOjk3Mzk6dm9pZCBzeXNmc19zbGFiX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTk3NDAte1xcbi0tXFxubW0vc2x1Yi5jPTk3NTQ9c3RhdGljIHN0cnVjdCBzYXZlZF9hbGlhcyAqYWxpYXNfbGlzdDtcXG5tbS9zbHViLmMtOTc1NS1cXG5tbS9zbHViLmM6OTc1NjppbnQgc3lzZnNfc2xhYl9hbGlhcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSlcXG5tbS9zbHViLmMtOTc1Ny17XFxuLS1cXG5tbS9zbHViLmM9OTk5Nz1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTEwMDEyLVxcbm1tL3NsdWIuYzoxMDAxMzp2b2lkIGRlYnVnZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0xMDAxNC17XFxuLS1cXG5tbS9zbHViLmM9MTAwMzE9X19pbml0Y2FsbChzbGFiX2RlYnVnZnNfaW5pdCk7XFxuLS1cXG5tbS9zbHViLmMtMTAwMzYtI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jOjEwMDM3OnZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxcbm1tL3NsdWIuYy0xMDAzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjEzOjMwLjY0ODU0NzUwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODAxMDIwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgU2x1YiBNZW1vcnkgTWFuYWdlbWVudCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2x1Yi5jYCBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBtZW1vcnkgYWNjb3VudGluZyBmdW5jdGlvbnMgaW50ZXJhY3QuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYW5kIGBtZW1jZ19zbGFiX2ZyZWVfaG9va2AgYXJlIGFsbCBob3VzZWQgbmVhdGx5IHdpdGhpbiBgbW0vc2x1Yi5jYC4gQnV0IGhvbGQgb24uLi4gc29tZXRoaW5nIGZlZWxzIG9mZiBhYm91dCB0aGF0IGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCBsb2NhdGlvbi4uLiBJdCAqaXMqIGluIGBtbS9zbHViLmNgLCBpc24ndCBpdD8gT2ggcmlnaHQsIEknbSBmb3JnZXR0aW5nIGFib3V0IHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdC4gWWVzLCBpdCdzIG1vZGlmaWVkIHdpdGhpbiBgbW0vc2x1Yi5jYCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuTm93IEknbSBxdWVzdGlvbmluZyB3aGV0aGVyIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayBgbW0vc2xhYl9jb21tb24uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgb3IgY3J1Y2lhbCBkZXBlbmRlbmNpZXMgbHVya2luZyB0aGVyZSB0aGF0IEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIEl0J3MgYWx3YXlzIHNtYXJ0IHRvIGhhdmUgYSB3aWRlciB2aWV3IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjIyLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjEzOjM0LjgyODY1MTg4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA0OTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGJvb2x8c3RydWN0IFthLXpfXSsgXFxcXCo/KSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYl9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTEyOD1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGN1bGF0ZV9hbGlnbm1lbnQoc2xhYl9mbGFnc190IGZsYWdzLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNTQtICovXFxubW0vc2xhYl9jb21tb24uYzoxNTU6aW50IHNsYWJfdW5tZXJnZWFibGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy0xNTYte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNzYtXFxubW0vc2xhYl9jb21tb24uYzoxNzc6Ym9vbCBzbGFiX2FyZ3NfdW5tZXJnZWFibGUoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc2xhYl9mbGFnc190IGZsYWdzKVxcbm1tL3NsYWJfY29tbW9uLmMtMTc4LXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9NTE4PXN0YXRpYyB2b2lkIGttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTI2LVxcbm1tL3NsYWJfY29tbW9uLmM6NTI3OnZvaWQgc2xhYl9rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy01Mjgte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy01MzMtXFxubW0vc2xhYl9jb21tb24uYzo1MzQ6dm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy01MzUte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz01OTg9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy02MDgtICovXFxubW0vc2xhYl9jb21tb24uYzo2MDk6aW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApXFxubW0vc2xhYl9jb21tb24uYy02MTAte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz02MTU9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX3Nocmluayk7XFxubW0vc2xhYl9jb21tb24uYy02MTYtXFxubW0vc2xhYl9jb21tb24uYzo2MTc6Ym9vbCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKVxcbm1tL3NsYWJfY29tbW9uLmMtNjE4LXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9NjIzPXN0YXRpYyB2b2lkIGttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNjQ0LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6NjQ1OmJvb2wga21lbV9kdW1wX29iaih2b2lkICpvYmplY3QpXFxubW0vc2xhYl9jb21tb24uYy02NDYte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMDczPXN0YXRpYyB2b2lkIGZyZWVsaXN0X3JhbmRvbWl6ZSh1bnNpZ25lZCBpbnQgKmxpc3QsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEwODktLyogQ3JlYXRlIGEgcmFuZG9tIHNlcXVlbmNlIHBlciBjYWNoZSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MTA5MDppbnQgY2FjaGVfcmFuZG9tX3NlcV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgaW50IGNvdW50LFxcbm1tL3NsYWJfY29tbW9uLmMtMTA5MS1cXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMTA1LS8qIERlc3Ryb3kgdGhlIHBlci1jYWNoZSByYW5kb20gZnJlZWxpc3Qgc2VxdWVuY2UgKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjExMDY6dm9pZCBjYWNoZV9yYW5kb21fc2VxX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcClcXG5tbS9zbGFiX2NvbW1vbi5jLTExMDcte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMTYzPXN0YXRpYyBpbnQgc2xhYl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTE3Mi1cXG5tbS9zbGFiX2NvbW1vbi5jOjExNzM6dm9pZCBkdW1wX3VucmVjbGFpbWFibGVfc2xhYih2b2lkKVxcbm1tL3NsYWJfY29tbW9uLmMtMTE3NC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyNDU9bW9kdWxlX2luaXQoc2xhYl9wcm9jX2luaXQpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMjU5LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MTI2MDp2b2lkIGtmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICpwKVxcbm1tL3NsYWJfY29tbW9uLmMtMTI2MS17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMDAtXFxubW0vc2xhYl9jb21tb24uYzoxMzAxOnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMwMi17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE5NTA9dm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE5NzMtICovXFxubW0vc2xhYl9jb21tb24uYzoxOTc0OnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTk3NS17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIwNTA9c3RhdGljIGlubGluZSB2b2lkIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTIxMjgtICovXFxubW0vc2xhYl9jb21tb24uYzoyMTI5OnZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXFxubW0vc2xhYl9jb21tb24uYy0yMTMwLXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjEzND1FWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMTQyLSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MjE0Mzp2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbGFiX2NvbW1vbi5jLTIxNDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxMzozNC44OTA3MDg0ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc5OTk3OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6XG5cbioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0J3Mgc2lnbmlmaWNhbnQuIFRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0gaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGFueSBjaGFuZ2VzIHRoZXJlIHdhcnJhbnQgYSAqdmVyeSogY2xvc2UgbG9vay4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24gaXMgc291bmQsIGFuZCBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGZpbGUgd2FzIGNob3NlbiBmb3IgbW9kaWZpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2VzIGFyZSBsb2dpY2FsbHkgcmVsYXRlZCB0byB0aGUgcHJpbWFyeSBpbnRlbnQgb2YgdGhlIHBhdGNoIG9yIGlmIHRoZXkgcmVwcmVzZW50IGEgcG90ZW50aWFsbHkgcmlza3kgc2lkZSBlZmZlY3Qgb3IgdW5yZWxhdGVkIHJlZmFjdG9yaW5nLiBBIGRlZXAgZGl2ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzMzLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTM6MzkuMjcwNzA5ODg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzQ4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbHxzdHJ1Y3QgW2Etel9dKyBcXFxcKj8pIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTEzMT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9iamNnX2xvY2spO1xcbm1tL21lbWNvbnRyb2wuYy0xMzItXFxubW0vbWVtY29udHJvbC5jOjEzMzpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xMzQte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyOT1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMS1cXG5tbS9tZW1jb250cm9sLmM6NTMyOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtNTMzLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTcwND1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcyOC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NzI5OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTczMC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzM5LVxcbm1tL21lbWNvbnRyb2wuYzo3NDA6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzQxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz03NTc9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03NzItXFxubW0vbWVtY29udHJvbC5jOjc3Mzpib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KVxcbm1tL21lbWNvbnRyb2wuYy03NzQte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTg0NT1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODcwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo4NzE6dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxubW0vbWVtY29udHJvbC5jLTg3Mi1cXHRcXHQgICAgICAgaW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04ODY9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MDEtXFxubW0vbWVtY29udHJvbC5jOjkwMjp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtOTAzLVxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTM3PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk2NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6OTY1OnZvaWQgbW9kX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxcbm1tL21lbWNvbnRyb2wuYy05NjYtXFx0XFx0XFx0aW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NzUtXFxubW0vbWVtY29udHJvbC5jOjk3Njp2b2lkIGxydXZlY19zdGF0X21vZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcXG5tbS9tZW1jb250cm9sLmMtOTc3LVxcdFxcdFxcdCAgICAgaW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05OTY9RVhQT1JUX1NZTUJPTChscnV2ZWNfc3RhdF9tb2RfZm9saW8pO1xcbm1tL21lbWNvbnRyb2wuYy05OTctXFxubW0vbWVtY29udHJvbC5jOjk5ODp2b2lkIG1vZF9scnV2ZWNfa21lbV9zdGF0ZSh2b2lkICpwLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcXG5tbS9tZW1jb250cm9sLmMtOTk5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMDI3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxMDI4OnZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCxcXG5tbS9tZW1jb250cm9sLmMtMTAyOS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTA0OT11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMDU4LVxcbm1tL21lbWNvbnRyb2wuYzoxMDU5OmJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbm1tL21lbWNvbnRyb2wuYy0xMDYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMjEzPXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTMwNC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTMwNTp2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG5tbS9tZW1jb250cm9sLmMtMTMwNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcHJldilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMzI4PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKmRlYWRfbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTM2MS0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTM2Mjp2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTEzNjMtXFx0XFx0XFx0ICAgaW50ICgqZm4pKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTQ1Nj1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTQ4Mi0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTQ4Mzp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxubW0vbWVtY29udHJvbC5jLTE0ODQtXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzUxPXN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3NjktICovXFxubW0vbWVtY29udHJvbC5jOjE3NzA6dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbm1tL21lbWNvbnRyb2wuYy0xNzcxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzkwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNzkxOnZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTE3OTIte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MzU9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4NTMtXFxubW0vbWVtY29udHJvbC5jOjE4NTQ6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTE4NTUtXFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTQ3PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTk5My1cXG5tbS9tZW1jb250cm9sLmM6MTk5NDp2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMTk5NS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjI1OT1zdGF0aWMgdm9pZCBzY2hlZHVsZV9kcmFpbl93b3JrKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjc1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoyMjc2OnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy0yMjc3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNDY4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTA0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoyNTA1OnZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxubW0vbWVtY29udHJvbC5jLTI1MDYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxMjI9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTM0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTM1OmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbm1tL21lbWNvbnRyb2wuYy0zMTM2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTU2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTU3OnZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcXG5tbS9tZW1jb250cm9sLmMtMzE1OC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzQ3Mj1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQ4NS1cXG5tbS9tZW1jb250cm9sLmM6MzQ4NjppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy0zNDg3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTIzLVxcbm1tL21lbWNvbnRyb2wuYzozNTI0OnZvaWQgb2JqX2Nncm91cF91bmNoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy0zNTI1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNTI5PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9mdWxsX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cXG5tbS9tZW1jb250cm9sLmM6MzUzODpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL21lbWNvbnRyb2wuYy0zNTM5LVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2MzQtXFxubW0vbWVtY29udHJvbC5jOjM2MzU6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9tZW1jb250cm9sLmMtMzYzNi1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2NjUtICovXFxubW0vbWVtY29udHJvbC5jOjM2NjY6dm9pZCBzcGxpdF9wYWdlX21lbWNnKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBvcmRlcilcXG5tbS9tZW1jb250cm9sLmMtMzY2Ny17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzY3OS1cXG5tbS9tZW1jb250cm9sLmM6MzY4MDp2b2lkIGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgb2xkX29yZGVyLFxcbm1tL21lbWNvbnRyb2wuYy0zNjgxLVxcdFxcdHVuc2lnbmVkIG5ld19vcmRlcilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNzM4PXN0cnVjdCB3Yl9kb21haW4gKm1lbV9jZ3JvdXBfd2JfZG9tYWluKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzY1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozNzY2OnZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTM3NjctXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnBoZWFkcm9vbSwgdW5zaWduZWQgbG9uZyAqcGRpcnR5LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM4MzQtICovXFxubW0vbWVtY29udHJvbC5jOjM4MzU6dm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9tZW1jb250cm9sLmMtMzgzNi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zODg3LS8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXFxubW0vbWVtY29udHJvbC5jOjM4ODg6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbm1tL21lbWNvbnRyb2wuYy0zODg5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTAxPXN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTA4LVxcbm1tL21lbWNvbnRyb2wuYzo0OTA5OmludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5tbS9tZW1jb250cm9sLmMtNDkxMC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA4MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTEwNS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTEwNjp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxubW0vbWVtY29udHJvbC5jLTUxMDctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTEyMT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE0MC1cXG5tbS9tZW1jb250cm9sLmM6NTE0MTppbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbm1tL21lbWNvbnRyb2wuYy01MTQyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTY0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MTY1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTE2Ni17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5OC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTE5OTppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbm1tL21lbWNvbnRyb2wuYy01MjAwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI1NT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzAwLVxcbm1tL21lbWNvbnRyb2wuYzo1MzAxOnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTUzMDIte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMTMtXFxubW0vbWVtY29udHJvbC5jOjUzMTQ6dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbm1tL21lbWNvbnRyb2wuYy01MzE1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzM1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MzM2OnZvaWQgbWVtX2Nncm91cF9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG5tbS9tZW1jb250cm9sLmMtNTMzNy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM4NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTM4NTp2b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXFxubW0vbWVtY29udHJvbC5jLTUzODYte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU0MTc9RVhQT1JUX1NZTUJPTChtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcXG5tbS9tZW1jb250cm9sLmMtNTQxOC1cXG5tbS9tZW1jb250cm9sLmM6NTQxOTp2b2lkIG1lbV9jZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2sgKnNrKVxcbm1tL21lbWNvbnRyb2wuYy01NDIwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDQxLVxcbm1tL21lbWNvbnRyb2wuYzo1NDQyOnZvaWQgbWVtX2Nncm91cF9za19mcmVlKHN0cnVjdCBzb2NrICpzaylcXG5tbS9tZW1jb250cm9sLmMtNTQ0My17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ0OS1cXG5tbS9tZW1jb250cm9sLmM6NTQ1MDp2b2lkIG1lbV9jZ3JvdXBfc2tfaW5oZXJpdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5tbS9tZW1jb250cm9sLmMtNTQ1MS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ3NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTQ3NTpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy01NDc2LVxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ5NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTQ5Njp2b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxubW0vbWVtY29udHJvbC5jLTU0OTcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1MDktXFxubW0vbWVtY29udHJvbC5jOjU1MTA6dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy01NTExLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTQxPWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTU4NS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTU4NjppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NTg3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjM1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NjM2OnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTYzNy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTY1NT1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2NjctXFxubW0vbWVtY29udHJvbC5jOjU2Njg6Ym9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NjY5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzkzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODQwLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODQxOmJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbm1tL21lbWNvbnRyb2wuYy01ODQyLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODgxLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODgyOnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcXG5tbS9tZW1jb250cm9sLmMtNTg4My17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkxMy0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTkxNDp2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcXG5tbS9tZW1jb250cm9sLmMtNTkxNS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkzNC1cXG5tbS9tZW1jb250cm9sLmM6NTkzNTpib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy01OTM2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDQwPXN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjA0My1cXG5tbS9tZW1jb250cm9sLmM6NjA0NDp2b2lkIG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIG5vZGVtYXNrX3QgKm1hc2spXFxubW0vbWVtY29udHJvbC5jLTYwNDUte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNjAtXFxubW0vbWVtY29udHJvbC5jOjYwNjE6dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTYwNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxMzozOS4zMzQ0NjUxNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzM0MzI1NDMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IENvbnRyb2wgTW9kdWxlIERlZXAgRGl2ZSoqXG5cbkhtbSwgbGV0IG1lIHRoaW5rLi4uIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIHdhcyBzaXR1YXRlZCBpbiBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSBrZXJuZWwsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHNsYWIgYWxsb2NhdG9yIGl0c2VsZi4gQnV0IHdhaXQgYSBtaW51dGUuLi4gdGhhdCBkb2Vzbid0IHF1aXRlIHNpdCByaWdodC4gTGV0J3MgcmV2aXNpdCB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZSBhZ2Fpbi4gSSBzaG91bGQgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9ucy4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhlIHByZWNpc2UgbG9jYXRpb24gb2YgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXRpZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSByZWdhcmRpbmcgYWxsIG9mIHRoZSBmdW5jdGlvbnMgYXNzb2NpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo0Mi42Nzc3MjQ5MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjkzMDA3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9mcm9tX29ial9zbGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9Mjg1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcXG5tbS9tZW1jb250cm9sLmMtMjg2MC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTA2LVxcdGlmIChzbGFiKVxcbm1tL21lbWNvbnRyb2wuYzoyOTA3OlxcdFxcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XFxubW0vbWVtY29udHJvbC5jLTI5MDgtXFx0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKHZpcnRfdG9fZm9saW8ocCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo0NC4yNDcwMzQwNTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NDg1MzYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTbGFiIENhY2hlIEhvb2sgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBmdW5jdGlvbiwgYW5kIGl0J3MgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB3aXRoaW4gdGhlIG1vZHVsZS4gQnV0IHRoZW4gbXkgbWluZCBqdW1wcyB0byB0aGUgaG9va3MsIGFuZCBJIHNlZSBhIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5IGhlcmUsIEnigJltIHRoaW5raW5nLCB3aHkgYXJlbuKAmXQgdGhlIHNsYWIgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZnJlZSBob29rIGZ1bmN0aW9ucyBzdGF0aWM/ICBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyBtZSBwYXVzZS4gQW5kIHRoZW4gdGhlcmXigJlzIGBhbGxvY19zbGFiX29ial9leHRzYCwgYWxzbyBub3Qgc3RhdGljLiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBnbG9iYWwgaW50ZW50IHdpdGggdGhlaXIgc2NvcGUgdGhhbiB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24gc3VnZ2VzdHMgZm9yIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLiBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgKnByb2JsZW0qLCBidXQgaXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24gZm9yIGhvdyB0aGVzZSBob29rIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIHNsYWIgYWxsb2NhdG9yIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVsbCBjb250ZXh0IGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBhcmUgcmVhbGx5IGludGVuZGVkIHRvIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTQ6NDguNDQxODkwMzYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUxMTYyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz0yNjc9X19rbWVtX2NhY2hlX2FsaWFzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTI5MS0vKipcXG5tbS9zbGFiX2NvbW1vbi5jOjI5MjogKiBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MgLSBDcmVhdGUgYSBrbWVtIGNhY2hlLlxcbm1tL3NsYWJfY29tbW9uLmMtMjkzLSAqIEBuYW1lOiBBIHN0cmluZyB3aGljaCBpcyB1c2VkIGluIC9wcm9jL3NsYWJpbmZvIHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUuXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTMxNy0gKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjMxODpzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXFxubW0vc2xhYl9jb21tb24uYy0zMTktXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZSxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNDA4LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjQwOTpFWFBPUlRfU1lNQk9MKF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyk7XFxubW0vc2xhYl9jb21tb24uYy00MTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE0OjQ4Ljg2NzAxOTc3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc0MTgwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTTFVCIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgIGlzIGV4cG9ydGVkLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHRob3VnaCBpdCBpc24ndCBzdGF0aWMgZWl0aGVyLiBUaGlzIHNlZW1zIGEgbGl0dGxlIHVudXN1YWwuIE5vdywgbGV0IG1lIHRoaW5rLi4uIEFoYSEgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGNhbGxlZCBmcm9tIGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AsIHdoaWNoIGlzIGlubGluZSB3aXRoaW4gYG1tL3NsdWIuY2AuIFJpZ2h0LCB0aGF0IGV4cGxhaW5zIHRoZSBhY2Nlc3MuIEkgbmVlZCB0byBjb25maXJtIHdoZXJlIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBkZWZpbmVkLiBJcyBpdCBpbiBgbW0vc2x1Yi5jYCBvciBwZXJoYXBzIGhpZGluZyBpbiBgbW0vc2xhYl9jb21tb24uY2A/IE9rYXksIEkndmUgY2hlY2tlZC4uLiBpdCdzIGRlZmluaXRlbHkgaW4gYG1tL3NsdWIuY2AuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgKmRlY2xhcmVkKiBpbiBgbW0vc2xhYi5oYC4gSG1tLCB0aGF0J3MgYSBrZXkgZGV0YWlsLiBUaW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIHdpdGhpbiBgbW0vc2x1Yi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTQ6NTMuMTQxMjA1NzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjgxNTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEyOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIxMzMtXFxubW0vc2x1Yi5jOjIxMzQ6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMTM1LVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIyMjM9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNTQtICovXFxubW0vc2x1Yi5jOjIyNTU6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNTYte1xcbi0tXFxubW0vc2x1Yi5jPTIzMDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzA1LVxcbm1tL3NsdWIuYzoyMzA2OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMDctXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzMTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTUtXFxubW0vc2x1Yi5jOjIzMTY6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTIzMjY9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIzMzItXFxubW0vc2x1Yi5jOjIzMzM6XFx0XFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xcbm1tL3NsdWIuYy0yMzM0LVxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLS1cXG5tbS9zbHViLmM9MzM3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9zbHViLmMtMzM3Ny1cXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM3ODpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM3OS1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zNDAwPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMzQ1NS1cXHQgKi9cXG5tbS9zbHViLmM6MzQ1NjpcXHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xcbm1tL3NsdWIuYy0zNDU3LVxcdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE0OjUzLjIyODAyNzE3NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA1MzI3ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBhbGxvY19zbGFiX29ial9leHRzYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCdzIHNsYWIgYWxsb2NhdG9yIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgZXh0ZW5kZWQgb2JqZWN0IGZlYXR1cmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgbGlrZWx5IG5vbi1zdGF0aWMgaWYgYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGVuYWJsZWQuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24uLi4gSSdtIGxvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gbm93LCBhbmQgaXQncyBkZWZpbmVkIGluIGBtbS9zbHViLmNgIGFzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbi5cblxuTm93LCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBJZiBpdCdzICpub3QqIHN0YXRpYywgSSdkIGV4cGVjdCBpdCB0byBiZSB1c2VkIG1vcmUgYnJvYWRseSwgYnV0IHRoZSBjb2RlIHNjYW4gc3VnZ2VzdHMgdGhhdCBpdCdzICpvbmx5KiB1c2VkIHdpdGhpbiBgbW0vc2x1Yi5jYCBpdHNlbGYsIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIG5vdCB0aGUgdXN1YWwgcGF0dGVybi4gVXN1YWxseSwgaWYgYSBmdW5jdGlvbiBpc24ndCBzdGF0aWMgaXQgd2lsbCBiZSB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGZpbGUuXG5cbkFoYSEgYG1tL21lbWNvbnRyb2wuY2AgKmRvZXMqIGNhbGwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgISBFeGNlbGxlbnQsIHRoYXQgYW5zd2VycyBhIGJpdCBvZiB0aGUgcHV6emxlLCBidXQgbGV0J3MgZ28gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGV4YWN0bHkgKmhvdyogdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbnVhbmNlIGlzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo1Ny42MzMzNTgyNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjg3Nzc1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1ODgtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vbWVtY29udHJvbC5jOjM1ODk6XFx0XFx0XFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIHNsYWJfYWxsb2NfZmxhZ3MpKVxcbm1tL21lbWNvbnRyb2wuYy0zNTkwLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNDo1OC4wNDYyNDExNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczODMxODI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgSG9va3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGFzIGEga2V5IGZ1bmN0aW9uLCBzZWVpbmcgYXMgaXQncyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGZ1bmN0aW9ucyBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQuIFdhaXQgYSBzZWNvbmQsIHRob3VnaDsgSSByZWNhbGwgbm93IHRoYXQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIHdoaWNoIGlzIGFjdHVhbGx5IGlubGluZWQgZnJvbSBgbW0vc2x1Yi5jYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0IG9uZS4gTGV0J3MgbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGRlZmluaXRpb24uIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2Agd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIGRpcmVjdGx5IHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjAxLjc4NDU2MjI4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxNDU1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjAxLjg0ODcyMzgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzU2MTM2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkhvb2sgSW52ZXN0aWdhdGlvbioqXG5cblJpZ2h0LCBzbyBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB0aGF0J3MgdXNlZnVsLCB0aGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBtb2RpZmljYXRpb24gb3IgaW50ZXJ2ZW50aW9uLCBsaWtlbHkgZnJvbSBleHRlcm5hbCBtb2R1bGVzIG9yIHBlcmhhcHMgZXZlbiBpbiBhIHN5c3RlbS13aWRlIG9yIGNvcmUgd2F5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIGNhbGxzIHRocm91Z2ggdGhlIGFsbG9jYXRpb24vZnJlZSBwYXRoLiBXaGF0IGFib3V0IHRoZSBjb3VudGVycGFydD8gSSBuZWVkIHRvIGNoZWNrIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYC4gSXMgaXQgc3RhdGljIGFzIHdlbGw/IElzIHRoZXJlIGFueSBzaW1pbGFyIGJlaGF2aW9yIHdpdGggdGhlIGZyZWUgaG9vaz8gQmVjYXVzZSB0aGUgcG9zdC1hbGxvY2F0aW9uIG9uZSBpcyBub24gc3RhdGljIGl0IHdpbGwgaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNTowNS4zODQzNDA5NjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDU5Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2dfc2xhYl9mcmVlX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0zNTM4PWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cXG5tbS9tZW1jb250cm9sLmM6MzYzNTp2b2lkIF9fbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbm1tL21lbWNvbnRyb2wuYy0zNjM2LVxcdFxcdFxcdCAgICB2b2lkICoqcCwgaW50IG9iamVjdHMsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjA1LjQ2OTgwOTA2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE5Mjc1Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIEludGVyYWN0aW9uIHdpdGggU0xVQiBBbGxvY2F0b3IqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIChtZW1jZ3MpIGludGVyYWN0IHdpdGggdGhlIFNMVUIgYWxsb2NhdG9yLiBMZXQgbWUgc2VlLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2DigKYgWXVwLCB0aGF04oCZcyBjb25maXJtZWQsIGl0J3MgZGVmaW5pdGVseSAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIEdvb2QsIHRoYXQgaGVscHMgY2xhcmlmeSBhIHNwZWNpZmljIHBvaW50LiBOb3csIHdoYXQgYWJvdXQgdGhlIG90aGVyIHNpZGUgb2YgdGhpcz8gTGV0IG1lIGNoZWNr4oCmIGFoLCB5ZXMsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhhdCBsb29rcyBpbnRlcmVzdGluZywgYW5kIGl0IGxpdmVzIG92ZXIgaW4gYG1tL3NsdWIuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhhdCBmaWxlIGFuZCB1bmRlcnN0YW5kIGhvdyBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBTTFVCIGNvZGUuIEdvdHRhIGRpdmUgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MDguNjg5MDg3MzkxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgzNDgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjUyMj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUyMzpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxubW0vc2x1Yi5jLTI1MjQte1xcbi0tXFxubW0vc2x1Yi5jPTI1OTA9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yNTk0LVxcbm1tL3NsdWIuYzoyNTk1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbm1tL3NsdWIuYy0yNTk2LXtcXG4tLVxcbm1tL3NsdWIuYz01MDA0PWJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtNTAwOC1cXG5tbS9zbHViLmM6NTAwOTpcXHRyZXR1cm4gbWVtY2dfc2xhYl9wb3N0X2NoYXJnZShvYmpwLCBnZnBmbGFncyk7XFxubW0vc2x1Yi5jLTUwMTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNTowOC43NDg5MjY4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUxMzg0NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIFNsYWIgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZWAgd2l0aGluIGBtbS9zbHViLmNgLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQncyBvcHRpbWl6ZWQgZm9yIHNwZWVkIGFuZCBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgd2l0aGluIHRoYXQgZmlsZS4gQnV0IHRoZW4gSSByZW1lbWJlciBga21lbV9jYWNoZV9jaGFyZ2VgLiBUaGF0J3Mgbm90IHN0YXRpYzsgaXQncyBleHBvcnRlZCwgbWVhbmluZyBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBjYWxsIGl0LiAgUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28uIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGttZW1fY2FjaGVfY2hhcmdlYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGxpZXMsIGFuZCB3aGF0J3MgZHJpdmluZyB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTIuMTAwMzEzODQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY2NTczOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21lbV9jYWNoZV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz01MDAyPUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKTtcXG5tbS9zbHViLmMtNTAwMy1cXG5tbS9zbHViLmM6NTAwNDpib29sIGttZW1fY2FjaGVfY2hhcmdlKHZvaWQgKm9ianAsIGdmcF90IGdmcGZsYWdzKVxcbm1tL3NsdWIuYy01MDA1LXtcXG4tLVxcbm1tL3NsdWIuYy01MDEwLX1cXG5tbS9zbHViLmM6NTAxMTpFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY2hhcmdlKTtcXG5tbS9zbHViLmMtNTAxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTIuNTE2OTc5NDAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjkxODAyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgU2xhYiBBbGxvY2F0b3IgSW50ZXJuYWxzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBzbGFiIGFsbG9jYXRvciBzdHVmZi4gYGttZW1fY2FjaGVfY2hhcmdlYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgYWxsb2NhdGlvbiBjb3N0cywgcmlnaHQ/IEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayBvdXQgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AuIEl0IGxvb2tzIGxpa2UgdGhhdCBvbmUncyB0aGUgaGVhcnQgb2YgaG93IHRoZXNlIGNhY2hlcyBhcmUgYWN0dWFsbHkgbWFkZSwgSSBzZWUgdGhhdCBpdCdzIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSB3b3JraW5nLCBhbmQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTUuNjg2MTYyMjQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQ2NDExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYl9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTI2Nz1fX2ttZW1fY2FjaGVfYWxpYXMoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6MjkyOiAqIF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyAtIENyZWF0ZSBhIGttZW0gY2FjaGUuXFxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMzE3LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy00MDgtfVxcbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTUuNzUwNjMxODA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDE2NTE2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cblJpZ2h0LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIHRvIGNlbnRlciBvbi4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiBjYWNoZSBjcmVhdGlvbiwgbWFraW5nIGl0IGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gQnV0IHdhaXQuLi4gd2hhdCBhYm91dCBgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2A/IFRoYXQncyByaWdodCwgaXQncyBkZWZpbmVkIGlubGluZSwgc28gaXRzIGJlaGF2aW9yIGlzIGludGltYXRlbHkgdGllZCB0byB0aGUgc3Vycm91bmRpbmcgY29kZS4gSW50ZXJlc3RpbmcuLi4gbm93LCBoYW5nIG9uIGEgc2Vjb25kLiBJc24ndCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCdzIHVuZXhwZWN0ZWQsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBpbiBgbW0vc2x1Yi5jYCByaWdodCBhd2F5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTkuMDkyMjg1OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDg1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTI0MDA9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5tbS9zbHViLmM6MjQwMTpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG5tbS9zbHViLmMtMjQwMi1cXHRcXHRcXHQgICAgICAgaW50IG9iamVjdHMpXFxuLS1cXG5tbS9zbHViLmM9MjQyNT1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQyOC1cXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxubW0vc2x1Yi5jOjI0Mjk6XFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xcbm1tL3NsdWIuYy0yNDMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MTkuMTY1Mzc5NzU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDYzMjQ3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWNpcGhlcmluZyB0aGUgRnVuY3Rpb24gRGVjbGFyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgYHN0YXRpYyBub2lubGluZSB2b2lkYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyBjcml0aWNhbCB0aGluZ3MuIEl0J3MgYHN0YXRpY2AsIG1lYW5pbmcgaXRzIHNjb3BlIGlzIHJlc3RyaWN0ZWQgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IOKAkyBpdCdzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhpcyBtb2R1bGUuIFRoZSBgbm9pbmxpbmVgIGF0dHJpYnV0ZSBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbnN0cnVjdGluZyBpdCAqbm90KiB0byBpbmxpbmUgdGhpcyBmdW5jdGlvbidzIGNvZGUgaW50byBhbnkgY2FsbCBzaXRlcy4gVGhpcyBtaWdodCBiZSBkdWUgdG8gc2l6ZSBjb25zdHJhaW50cywgZGVidWdnaW5nIGNvbnNpZGVyYXRpb25zLCBvciBwZXJoYXBzIGJlY2F1c2Ugd2Ugd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB3aGVyZSB0aGUgZnVuY3Rpb24ncyBjb2RlIHJlc2lkZXMgaW4gbWVtb3J5LlxuXG5Ob3csIHRoYXQgbmFtZS4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLi4uIFRoYXQgbmFtaW5nIGNvbnZlbnRpb24gY2xlYXJseSBzdWdnZXN0cyBhIGhvb2sgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHNsYWIgYWxsb2NhdG9yLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgYXQgdGhlIGJlZ2lubmluZyBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYW4gaW50ZXJuYWwgb3IgcHJpdmF0ZSBmdW5jdGlvbi4gVGhlIHByZXNlbmNlIG9mIFwidGFnZ2luZ1wiIGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGhpbnRzIGF0IG1ldGFkYXRhIG9yIGluc3RydW1lbnRhdGlvbi4gVGhlIFwiYWxsb2MgaG9va1wiIHBpZWNlIGlzIHRoZSBtb3N0IG9idmlvdXMgcGFydC4gSXQgc291bmRzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzbGFiIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGhvb2sgZG9lcywgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGFsbG9jYXRpb24gYmVoYXZlcyBhdCBhIGxvd2VyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjAyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjIyLjg3MTcwNzU1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1NjI3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIzNDU9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5tbS9zbHViLmM6MjM0NjpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy0yMzQ3LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yMzkyPWFsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTIzOTUtXFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxcbm1tL3NsdWIuYzoyMzk2OlxcdFxcdF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2socywgb2JqZWN0LCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcbm1tL3NsdWIuYy0yMzk3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MjIuOTUzMjc3MjgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgxODg0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZXZpc2l0aW5nIFNsYWIgQWxsb2NhdG9yIEludGVybmFscyoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGZ1bmN0aW9uIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiBteSBtZW50YWwgbW9kZWwgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLiBDb25zaWRlcmluZyBpdHMgcm9sZSBpbiBvYmplY3QgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gZXh0ZW5kZWQgbWV0YWRhdGEgaXMgaW52b2x2ZWQsIGEgY2xvc2VyIGluc3BlY3Rpb24gaXMgd2FycmFudGVkLiBBbmQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRvIHRha2Ugbm90ZSBvZiB3aHkgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWMgbm9pbmxpbmUgdm9pZGAuIElzIGl0IGZvciBpbmxpbmluZywgb3IgaXMgaXQgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIG9ubHkgd2l0aGluIGEgc3BlY2lmaWMgdHJhbnNsYXRpb24gdW5pdCwgb3IgaXMgdGhlIGludGVudGlvbiB0byBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIG1ha2luZyBhIGNhbGwgYWNyb3NzIGZ1bmN0aW9ucz8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJIHNob3VsZCBlbnN1cmUgdGhhdCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGJlaGF2aW9yIGFyZSB2YWxpZGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTU6MjYuNDQxNDY4NjkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ3ODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEyOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIxMzMtXFxubW0vc2x1Yi5jOjIxMzQ6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMTM1LVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIyMjM9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNTQtICovXFxubW0vc2x1Yi5jOjIyNTU6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNTYte1xcbi0tXFxubW0vc2x1Yi5jPTIzMDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzA1LVxcbm1tL3NsdWIuYzoyMzA2OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMDctXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzMTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTUtXFxubW0vc2x1Yi5jOjIzMTY6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTIzMjY9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIzMzItXFxubW0vc2x1Yi5jOjIzMzM6XFx0XFx0aWYgKGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xcbm1tL3NsdWIuYy0yMzM0LVxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLS1cXG5tbS9zbHViLmM9MzM3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9zbHViLmMtMzM3Ny1cXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM3ODpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM3OS1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zNDAwPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMzQ1NS1cXHQgKi9cXG5tbS9zbHViLmM6MzQ1NjpcXHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xcbm1tL3NsdWIuYy0zNDU3LVxcdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE1OjI2LjUwMTk2MzE1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI5ODk1NjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFNsYWIgT2JqZWN0IEV4dGVuc2lvbiBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBJZiBgQ09ORklHX1NMQUJfT0JKX0VYVGAgaXMgYWN0aXZlLCBpdCdzIGRlZmluZWQgYXMgYSByZWd1bGFyIGBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIG5vdCBhIHN0YXRpYyBvbmUsIHJpZ2h0PyBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgbGluZSAyMTM0IGlzIHRoZSBub24tc3RhdGljIGRlZmluaXRpb24sIGFuZCBsaW5lIDIzMDYgaXMgdGhlIHN0YXRpYyBkdW1teSB2ZXJzaW9uIHVzZWQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGlzYWJsZWQuIFNvLCB0aGF0IG1lYW5zIHRoZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb24gKmlzbid0KiBzdGF0aWMgd2hlbiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQsIG1lYW5pbmcgaXQncyB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtZWFucyBpdCBpc24ndCBzdHJpY3RseSBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXMsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMgYW5kIHRodXMgdmlzaWJsZSwgbWFraW5nIGl0cyB1c2UgYSBiaXQuLi5pbnRlcmVzdGluZy4gSG1tLCBsZXQgbWUganVzdCBjb25maXJtIHdoZXRoZXIgb3Igbm90IGl0IGFjdHVhbGx5IGdldHMgZXhwb3J0ZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjozMC44MDA5MjQwNzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDc1MDA2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjMxLjIwNTY4NjIxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIwMTIwMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcqKlxuXG5SaWdodCwgc28gdGhpcyB0aGluZyBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBhIGdvb2QgaW5pdGlhbCBzaWduIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSG93ZXZlciwgaXQncyAqbm9uLXN0YXRpYyog4oCTIHRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBwb3RlbnRpYWxseSBldmVuIGZyb20gYSBkaWZmZXJlbnQgbW9kdWxlLCBzbyBmdXp6aW5nIGl0IGlzIGRlZmluaXRlbHkgb24gdGhlIHRhYmxlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGVzZSBzb3VuZCBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbnRlcmFjdGluZyB3aXRoIHdoYXRldmVyJ3MgZ29pbmcgb24gaGVyZS4gVGhleSBwcm9iYWJseSBhcmUgaG9va3MgYXNzb2NpYXRlZCB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBhbmQgc2xhYiBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi4gV2UgY2FuIGV4YW1pbmUgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlc2UgYW5kIHNlZSBob3cgdGhleSBhcmUgY2FsbGVkIGFuZCB3aGF0IGFyZ3VtZW50cyBhcmUgcGFzc2VkLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IHRoaXMgbm9uLXN0YXRpYyBmdW5jdGlvbiBjYW4gYmUgcmVhY2hlZCBhbmQgaG93IHdlIG1pZ2h0IG1hbmlwdWxhdGUgaXRzIGlucHV0IGZvciBmdXp6aW5nLiBJdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDAzNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjM0LjgyNTgxMDM1MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNzMwOTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjozNC44ODU4OTAxNjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MTI2Nzg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tRXhwb3J0ZWQsIE5vbi1TdGF0aWMgRnVuY3Rpb24gVXNhZ2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyBzb21ldGhpbmcgdGhhdCdzIG5vdCBleHBvcnRlZCwgYnV0IGl0J3MgKmFsc28qIG5vdCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGEgZnVuY3Rpb24gcG90ZW50aWFsbHkgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBhIG1vZHVsZSwgb3IgcGVyaGFwcyBpbmRpcmVjdGx5IHZpYSBhIGZ1bmN0aW9uIHBvaW50ZXIgb3Igb3RoZXIgbGVzcyBvYnZpb3VzIG1lY2hhbmlzbS4gSXQncyBub3Qgc29tZXRoaW5nIG1lYW50IGZvciBkaXJlY3QgZXh0ZXJuYWwgY29uc3VtcHRpb24sIGJ1dCBpdCAqaXMqIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBvciBwZXJoYXBzLCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3MgZGlnIGluIGEgYml0LlxuXG5UaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhpcyB3aWxsIGJlIHdpdGhpbiB0aGUgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9rZmVuY2UvY29yZS5jYC4gTGV0IG1lIHNlZSB3aGF0IGBfX2tmZW5jZV9mcmVlYCBkb2VzLCBhbmQgd2hhdCBpdCBtaWdodCB0ZWxsIHVzIGFib3V0IGhvdyB0aGlzIG5vbi1zdGF0aWMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBwYXR0ZXJucyBvciBkZXNpZ24gY2hvaWNlcyByZWZsZWN0ZWQgdGhlcmUuIExldCdzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzY3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6MzguMTY3MTYwODI0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTM3MTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2tmZW5jZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tmZW5jZS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz0xMjI3PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTIzNy1cXG5tbS9rZmVuY2UvY29yZS5jOjEyMzg6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6MzguMjQyNTM5MjQzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTgyNzY1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBTbGFiIE9iamVjdCBFeHRlbnNpb24gYW5kIEtGRU5DRSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNvbmNlcm4gd2FzIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiBgX19rZmVuY2VfZnJlZWAsIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS4gTm93LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBga21lbV9jYWNoZV9jaGFyZ2VgIGlzIGFsc28gZXhwb3J0ZWQsIHNvIGl0J3MgcmVsZXZhbnQsIGFuZCBJJ20gc2VlaW5nIG90aGVyIGltcG9ydGFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHNsYWIgb2JqZWN0IGV4dGVuc2lvbnMuXG5cbkxldCdzIHNlZTogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AgYW5kIGBrbWVtX2NhY2hlX2NoYXJnZWAuIEFuZCBvZiBjb3Vyc2UgYF9fa2ZlbmNlX2ZyZWVgLiBXYWl0LCB0aGVyZSdzIGEgbWlub3IgY2hhbmdlIGluIGBfX2tmZW5jZV9mcmVlYCB3aXRoIHRoYXQgYEtGRU5DRV9XQVJOX09OYCByZW1vdmFsLCBidXQgdGhlICpzaWduaWZpY2FudCogbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGFuZCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AuXG5cbk5vdyBJIG5lZWQgdG8gZWxpbWluYXRlIHNvbWUgaXJyZWxldmFudCBwaWVjZXMgYW5kIGZvY3VzIG9uIHRoZSBpbXBvcnRhbnQgb25lcy4gYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAgaXMgYHN0YXRpYyBpbmxpbmVgLCBzbyBub3QgZGlyZWN0bHkgcmVsZXZhbnQuIEFsc28gYHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0YCBpcyBgc3RhdGljIF9faW5pdGAgYW5kIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCBpcyBgc3RhdGljIHZvaWRgLCBzbyBJIHdvbid0IG5lZWQgdG8gZm9jdXMgb24gdGhlbSBhcyBtdWNoLlxuXG5TbywgdGFraW5nIGFsbCB0aGF0IGludG8gY29uc2lkZXJhdGlvbiwgdGhlIG1vc3QgY3JpdGljYWwgc3ltYm9scyB0byB6ZXJvIGluIG9uIGFyZTogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBhbmQgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AuXG5cbkZpbmFsbHksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19NRU1DR2AsIG9idmlvdXNseSwgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCwgYENPTkZJR19TTEFCX09CSl9FWFRgIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IHRoZSBhYm92ZSwgYW5kLCBpbXBvcnRhbnRseSwgYENPTkZJR19LRkVOQ0VgIHNpbmNlIHdlJ3ZlIHNlZW4gaXQgbW9kaWZpZWQuIE5vdyB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjo0Ni4yNjA4MTg0MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMTE1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NMQUJfT0JKX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTEwMD1zdHJ1Y3Qgc2xhYiB7XFxuLS1cXG5tbS9zbGFiLmgtMTE0LVxcdGF0b21pY190IF9fcGFnZV9yZWZjb3VudDtcXG5tbS9zbGFiLmg6MTE1OiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2xhYi5oLTExNi1cXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xcbi0tXFxubW0vc2xhYi5oPTEyNj1TTEFCX01BVENIKG1lbWNnX2RhdGEsIG9ial9leHRzKTtcXG5tbS9zbGFiLmg6MTI3OiNlbGlmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVClcXG5tbS9zbGFiLmgtMTI4LVNMQUJfTUFUQ0goX3VudXNlZF9zbGFiX29ial9leHRzLCBvYmpfZXh0cyk7XFxuLS1cXG5tbS9zbGFiLmg9NjI3PXN0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2xhYi5oLTYzOS1cXG5tbS9zbGFiLmg6NjQwOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2xhYi5oLTY0MS1cXG4tLVxcbm1tL3NsYWIuaD03NzU9aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2xhYi5oLTc3Ny1cXG5tbS9zbGFiLmg6Nzc4OiNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG5tbS9zbGFiLmgtNzc5LVxcbi0tXFxubW0vc2xhYi5oPTc5Mj1zdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2xhYi5oLTc5Ni1cXG5tbS9zbGFiLmg6Nzk3OiNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxubW0vc2xhYi5oLTc5OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6NDYuMzI5MDM3NDY5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjk0MjAyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIGBDT05GSUdfU0xBQl9PQkpfRVhUYCoqXG5cbk9rYXksIHNvIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQncyBkZWZpbml0ZWx5IGFuIGludGVybmFsIGNvbmZpZyBvcHRpb247IEknbSBwcmV0dHkgc3VyZSBpdCdzIG5vdCBzb21ldGhpbmcgeW91J2QgbWFudWFsbHkgZW5hYmxlLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBzZWxlY3RlZCBiYXNlZCBvbiBvdGhlciwgYnJvYWRlciBmZWF0dXJlcy4gUGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgTUVNQ0dgIChtZW1vcnkgY29udHJvbCBncm91cHMpIG9yIG1heWJlIGV2ZW4gYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gdG8gd2hlcmUgdGhpcyB0aGluZyBpcyBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogaXQncyBkZWZpbmVkLiBUaW1lIHRvIGdvIGh1bnRpbmcgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoZSBtb3N0IG9idmlvdXMgcGxhY2VzIHRvIHN0YXJ0IHdvdWxkIGJlIGBpbml0L0tjb25maWdgIGFuZCwgbW9yZSBsaWtlbHksIGBtbS9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucy4gSSdsbCBjaGVjayB0aG9zZSBmaWxlcywgYW5kIGhvcGVmdWxseSwgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgYFNMQUJfT0JKX0VYVGAgaXMgYWxsIGFib3V0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIG9uZSwganVzdCBhIG1hdHRlciBvZiB0cmFjaW5nIHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDg4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTY6NTAuNTk4NDYwNjIyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI4MjAwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTEFCX09CSl9FWFRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDMzPWNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQwLVxcbmluaXQvS2NvbmZpZzoxMDQxOmNvbmZpZyBTTEFCX09CSl9FWFRcXG5pbml0L0tjb25maWctMTA0Mi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjUyLjgyNjY2ODY5N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc2Mzk1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuY292ZXJpbmcgdGhlIEJvb2xlYW4gTGFieXJpbnRoKipcblxuT2theSwgc28gdGhlcmUncyBhIGhpZGRlbiBib29sZWFuIGZsYWcgbHVya2luZyBzb21ld2hlcmUuIE15IGluaXRpYWwgaW5zdGluY3QgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYE1FTUNHYCwgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBhbmQgYEtGRU5DRWAuIFRob3NlIHRocmVlIG9mdGVuIGRhbmNlIHRvZ2V0aGVyIGluIHRoaXMgc3BhY2UuIE5vdywgbGV0J3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMuIEJlZm9yZSB3ZSBkaXZlIGRlZXBlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIERvZXMgaXQgcmVseSBvbiBvdGhlciBjb25maWd1cmF0aW9ucz8gRG9lcyBpdCBoYXZlIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIHN5c3RlbT8gR290dGEgbWFrZSBzdXJlIHdlJ3JlIGNvbnNpZGVyaW5nIHRoZSB3aG9sZSBwaWN0dXJlIGJlZm9yZSBjaGFzaW5nIGEgc3BlY2lmaWMgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMjoxNjo1Ni4xMDMwNjc3NTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjkyOTc0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTEwNDc9Y29uZmlnIENPREVfVEFHR0lOR1xcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA1MC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDUxOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxubGliL0tjb25maWcuZGVidWctMTA1Mi1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA2NC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDY1OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbmxpYi9LY29uZmlnLmRlYnVnLTEwNjYtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA2OS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDcwOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubGliL0tjb25maWcuZGVidWctMTA3MS1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE2OjU4LjEzMjM3MTQ4OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQwNjU2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHByb2plY3QuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSDigJMgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNldHRpbmdzIGFyZSBkZWZpbmVkLiBJJ2xsIHN0YXJ0IHdpdGggYGxpYi9LY29uZmlnLmRlYnVnYC4gSSBzZWVtIHRvIHJlbWVtYmVyIHRoZXJlIHdhcyBhIGNvbmZpZ3VyYXRpb24gSSB3YXMgaW50ZXJlc3RlZCBpbiBhcm91bmQgbGluZSAxMDUxLCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRoZXJlLiBMZXQgbWUgc2VlIHdoYXQgdGhhdCByZXZlYWxzIGFib3V0IHRoZSBzcGVjaWZpY3MgSSdtIGxvb2tpbmcgZm9yLi4uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IHRvIGV4cGVjdCwgYnV0IG5lZWQgdGhlIGhhcmQgZGF0YSB0byBtYWtlIGEgdXNlZnVsIGRldGVybWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MDEuMTczMDMyMDg4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQ1OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBcXFwiTlxcXCIuXFxuMTA0NjpcXHRcXG4xMDQ3OlxcdGNvbmZpZyBDT0RFX1RBR0dJTkdcXG4xMDQ4OlxcdFxcdGJvb2xcXG4xMDQ5OlxcdFxcdHNlbGVjdCBLQUxMU1lNU1xcbjEwNTA6XFx0XFxuMTA1MTpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbjEwNTI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4xMDUzOlxcdFxcdGRlZmF1bHQgblxcbjEwNTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMDU1OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbjEwNTY6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVXFxuMTA1NzpcXHRcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxuMTA1ODpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4xMDU5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDYwOlxcdFxcdGhlbHBcXG4xMDYxOlxcdFxcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxcbjEwNjI6XFx0XFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXFxuMTA2MzpcXHRcXHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxcbjEwNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE3OjAxLjE3MzE4MjQ1OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM0MjY3Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVjaXBoZXJpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIHNlZSB0aGF0IGl0IHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiBhbiBgTU1VYCwgdGhlIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCB0aGUgbmVnYXRpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAuIFRoZXNlIGFyZSBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzOyBwcm9maWxpbmcgb2Z0ZW4gbmVlZHMgYSBtYXR1cmUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBhbmQgYWNjZXNzIHRvIHRoZSBwcm9jZXNzIGZpbGVzeXN0ZW0gZm9yIGludHJvc3BlY3Rpb24uIFRoZSBleGNsdXNpb24gb2YgYERFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAgc3VnZ2VzdHMgdGhhdCBhIGRpZmZlcmVudCwgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QsIGRlYnVnIG1lY2hhbmlzbSBpcyBhdCBwbGF5IHdoZW4gd2UncmUgcHJvZmlsaW5nLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBTTEFCX09CSl9FWFRgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gYFNMQUJfT0JKX0VYVGAgaXMgbGlrZWx5IHNlbGVjdGVkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBtZXRhZGF0YSBvciBleHRlbmRlZCBvYmplY3Qgc3VwcG9ydCBuZWVkZWQgZm9yIHRoZSBwcm9maWxpbmcuIEl0IHByb3ZpZGVzIGV4dGVuZGVkIGRhdGEgdG8gZWFjaCBzbGFiIG9iamVjdC4gSSB3b3VsZCBuZWVkIHRvIGRvdWJsZS1jaGVjaywgYnV0IHRoYXQncyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk15IG5leHQgdGhvdWdodCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBkcmlsbCBkb3duLCBpcyBhYm91dCBgTUVNQ0dgLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBtZW1vcnkgY2dyb3VwcyAoTUVNQ0cpIHBsYXkgYSByb2xlIGhlcmUuIE1lbW9yeSBjZ3JvdXBzIG9mZmVyIG1vcmUgZ3JhbnVsYXIgcmVzb3VyY2UgdHJhY2tpbmcsIHdoaWNoIG1pZ2h0IGJlIGNyaXRpY2FsIGZvciBhIG1vcmUgYWNjdXJhdGUgYW5kIHVzZWZ1bCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlLiBEb2VzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCB3b3JrIHdlbGwgd2l0aCBtZW1vcnkgY2dyb3Vwcywgb3IgYXJlIHRoZXJlIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBldmVuIGJldHRlciwgZG9lcyBpdCBsZXZlcmFnZSB0aGVtIGluIHNvbWUgd2F5PyBUaGlzIGlzIGFuIGltcG9ydGFudCBxdWVzdGlvbiB0byBhZGRyZXNzLCBhcyBpbnRlZ3JhdGluZyB3aXRoIE1FTUNHIHdvdWxkIG1ha2UgdGhlIHByb2ZpbGluZyBtdWNoIG1vcmUgdmFsdWFibGUgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHdvdWxkIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQwMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MDUuMzA3NDU0NjM0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc0NTUxMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Mi1cXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3NC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgxLVxcbmluaXQvS2NvbmZpZzoxMDgyOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODMtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODgtXFxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTAtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTUtXFxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwOTctXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MDcuMDgyMDE0ODk4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjk1MTM2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgZXNwZWNpYWxseSBpZiBpdCdzIGEgY29yZSBvcHRpb24sIGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCBzb3VyY2UsIEknbSBnb2luZyB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLiBTcGVjaWZpY2FsbHksIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgYXJvdW5kIGxpbmUgMTA3My4gSXQncyBhIGJyb2FkIHN0YXJ0aW5nIHBvaW50LCBidXQgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyBhcmUgb2Z0ZW4gZ3JvdXBlZCB0b2dldGhlciBzb21ld2hhdCBsb2dpY2FsbHksIGFuZCB0aGF0IGxpbmUgbnVtYmVyIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBwbGFjZSB0byBiZWdpbi4gVGltZSB0byBwdWxsIHVwIHRoZSBmaWxlIGFuZCB0YWtlIGEgbG9vay4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgc3ludGF4LCBhbmQgdGhlbiBleHRyYXBvbGF0ZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGl0IGRlZmluZXMgYW5kIGhvdyBpdCBtYXkgYmUgYWZmZWN0aW5nIHRoZSBrZXJuZWwncyBiZWhhdmlvdXIgaW4gdGhlIHNwZWNpZmljIGFyZWEgSSdtIGludGVyZXN0ZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MTAuNzExNTMxNTc0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHRcXG4xMDcxOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzI6XFx0XFxuMTA3MzpcXHRjb25maWcgTUVNQ0dcXG4xMDc0OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwNzU6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwNzY6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDc3OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDc4OlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwNzk6XFx0XFx0aGVscFxcbjEwODA6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4MTpcXHRcXG4xMDgyOlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4MzpcXHRcXHRib29sXFxuMTA4NDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA4NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA4NjpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA4NzpcXHRcXHRkZWZhdWx0IHlcXG4xMDg4OlxcdFxcbjEwODk6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAyOjE3OjEwLjcxMjAwNjAwNFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM4Nzk4NDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgYFNMQUJfT0JKX0VYVGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGl0J3MgZ29pbmcgdG8gcmVxdWlyZSB0aGF0IHdlIGVuYWJsZSBgTUVNQ0dgLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGFuZCBgS0ZFTkNFYC4gVGhpcyBpcyBjcnVjaWFsIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHRvdWNoZXMgY29yZSBzbGFiIGJlaGF2aW9yLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgaGVyZS4gSSd2ZSBpZGVudGlmaWVkOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgYW5kIGBrbWVtX2NhY2hlX2NoYXJnZWAuIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGNoYW5nZSB0byBgX19rZmVuY2VfZnJlZWAgc2VlbXMgbWlub3LigJRqdXN0IHJlbW92aW5nIGEgYEtGRU5DRV9XQVJOX09OYCwgc28gSSB3aWxsIGRpc2NvdW50IHRoYXQgc3ltYm9sLlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCBhZGRpbmcgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQncyBpbmxpbmUsIHNvIGl0J3Mgbm90IGEgcmVsZXZhbnQgc3ltYm9sIHRvIGZvY3VzIG9uLiBCdXQgSSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIGBrbWVtX2NhY2hlX2NoYXJnZWAuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IG15IGZvY3VzIHN5bWJvbHMuIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLCBpbiBgbW0vc2xhYl9jb21tb24uY2AsIGxvb2tzIHJpZ2h0LiBPa2F5LCBtb3Zpbmcgb24uIGBhbGxvY19zbGFiX29ial9leHRzYCBsb29rcyBjb3JyZWN0LiBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2Agc2VlbXMgcmlnaHQuIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBsb29rcyBnb29kLiBBbmQsIHllcywgYGttZW1fY2FjaGVfY2hhcmdlYCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBpbmNsdWRlZC5cblxuQmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGl0IGltcGFjdHMgKCBgTUVNQ0dgLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBLRkVOQ0VgKSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgaXMgY2hhbmdpbmcgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBhbmQgYWNjZXNzZWQuIEl0IGxvb2tzIGxpa2UgYFNMQUJfTUFZX0FDQ09VTlRgIGlzIGludHJvZHVjZWQgYW5kIHRoZSBgc2xhYm9ial9leHRgIGxheW91dCBpcyBjaGFuZ2VkIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIG9yIGEgdW5pb24sIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi4gR2l2ZW4gdGhlc2UgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcywgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlc2UgY2hhbmdlcyB0byBsb29rIGZvciBhbnkgbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhY2NvdW50aW5nIGVycm9ycy5cblxuSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0b29sIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1OTksIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDI6MTc6MjEuMDk5OTkzOTYzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzMDk2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgICBcImttZW1fY2FjaGVfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGNoYW5nZXMgaG93IGBzbGFib2JqX2V4dGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhY2Nlc3NlZCwgYW5kIG1hbmFnZWQsIHBhcnRpY3VsYXJseSB3aGVuIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQuIEl0IGludHJvZHVjZXMgYFNMQUJfTUFZX0FDQ09VTlRgIGFuZCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgYHNsYWJvYmpfZXh0YC4gVGhlc2UgYXJlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFjY291bnRpbmcgZXJyb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[1] Phase: Succeeded StartedAt: 2026-07-28 02:17:32 +0000 UTC FinishedAt: 2026-07-28 02:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 02:17:32 +0000 UTC FinishedAt: 2026-07-28 02:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2] Phase: Succeeded StartedAt: 2026-07-28 02:17:32 +0000 UTC FinishedAt: 2026-07-28 06:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 02:17:32 +0000 UTC FinishedAt: 2026-07-28 06:48:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 02:17:32 +0000 UTC FinishedAt: 2026-07-28 02:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 02:17:32 +0000 UTC FinishedAt: 2026-07-28 02:18:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9hmrb/series-workflow9hmrb-convert-artifact-1290160815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 02:18:29 +0000 UTC FinishedAt: 2026-07-28 03:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 02:18:29 +0000 UTC FinishedAt: 2026-07-28 03:06:40 +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:*ca94a58e-c851-4a1e-a71d-3ffd56c30902,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-workflow9hmrb/series-workflow9hmrb-convert-artifact-1290160815/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": "341733d4-fc79-475b-83a8-c370567a3f1b", "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-workflow9hmrb/series-workflow9hmrb-build-action-4011053173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 02:18:29 +0000 UTC FinishedAt: 2026-07-28 03:06:30 +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:*ca94a58e-c851-4a1e-a71d-3ffd56c30902,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-workflow9hmrb/series-workflow9hmrb-convert-artifact-1290160815/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": "341733d4-fc79-475b-83a8-c370567a3f1b", "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-workflow9hmrb/series-workflow9hmrb-build-action-4011053173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 03:06:40 +0000 UTC FinishedAt: 2026-07-28 03:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 03:06:40 +0000 UTC FinishedAt: 2026-07-28 03:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 03:06:40 +0000 UTC FinishedAt: 2026-07-28 03:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 03:06:40 +0000 UTC FinishedAt: 2026-07-28 03:06:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9hmrb/series-workflow9hmrb-convert-artifact-1232448766/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 03:07:02 +0000 UTC FinishedAt: 2026-07-28 03:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 03:07:02 +0000 UTC FinishedAt: 2026-07-28 03:08:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*341733d4-fc79-475b-83a8-c370567a3f1b,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-workflow9hmrb/series-workflow9hmrb-build-action-4011053173/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-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 03:09:04 +0000 UTC FinishedAt: 2026-07-28 03:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 03:09:04 +0000 UTC FinishedAt: 2026-07-28 03:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 03:09:04 +0000 UTC FinishedAt: 2026-07-28 03:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 03:09:04 +0000 UTC FinishedAt: 2026-07-28 03:43:16 +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:*ca94a58e-c851-4a1e-a71d-3ffd56c30902,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-workflow9hmrb/series-workflow9hmrb-convert-artifact-1232448766/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": "babf6f76-bf8b-41b8-9ddf-eba22c6e9fd3", "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-workflow9hmrb/series-workflow9hmrb-build-action-32274770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 03:09:04 +0000 UTC FinishedAt: 2026-07-28 03:43:06 +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:*ca94a58e-c851-4a1e-a71d-3ffd56c30902,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-workflow9hmrb/series-workflow9hmrb-convert-artifact-1232448766/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": "babf6f76-bf8b-41b8-9ddf-eba22c6e9fd3", "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-workflow9hmrb/series-workflow9hmrb-build-action-32274770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 03:43:16 +0000 UTC FinishedAt: 2026-07-28 03:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 03:43:16 +0000 UTC FinishedAt: 2026-07-28 03:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 03:43:16 +0000 UTC FinishedAt: 2026-07-28 03:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 03:43:16 +0000 UTC FinishedAt: 2026-07-28 03:45:11 +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:*babf6f76-bf8b-41b8-9ddf-eba22c6e9fd3,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-workflow9hmrb/series-workflow9hmrb-build-action-32274770/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-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 06:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 06:48:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*341733d4-fc79-475b-83a8-c370567a3f1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*babf6f76-bf8b-41b8-9ddf-eba22c6e9fd3,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-workflow9hmrb/series-workflow9hmrb-build-action-4011053173/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-workflow9hmrb/series-workflow9hmrb-build-action-32274770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 03:45:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 03:45:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9hmrb/series-workflow9hmrb-convert-artifact-4226704387/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 03:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 03:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 03:45:21 +0000 UTC FinishedAt: 2026-07-28 03:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 03:45:31 +0000 UTC FinishedAt: 2026-07-28 06:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hmrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kmem_cache_create_args","kmem_cache_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5ff172f6c94d282d83cb88bdfec5f647ad9c6105","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEM_ALLOC_PROFILING","KFENCE"],"series_id":"2f019ae5-f129-460e-bfb8-eba5db2aed39","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 03:45:31 +0000 UTC FinishedAt: 2026-07-28 06:48:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*341733d4-fc79-475b-83a8-c370567a3f1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*babf6f76-bf8b-41b8-9ddf-eba22c6e9fd3,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-workflow9hmrb/series-workflow9hmrb-build-action-4011053173/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-workflow9hmrb/series-workflow9hmrb-build-action-32274770/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-workflow9hmrb/series-workflow9hmrb-convert-artifact-4226704387/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,}