Name: series-workflowdqqcg Phase: Succeeded StartedAt: 2026-08-03 17:46:58 +0000 UTC FinishedAt: 2026-08-03 19:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[0] Phase: Succeeded StartedAt: 2026-08-03 17:46:58 +0000 UTC FinishedAt: 2026-08-03 18:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 17:46:58 +0000 UTC FinishedAt: 2026-08-03 18:11:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "SHMEM" ], "series_id": "35bdd49d-8ce0-4089-86da-2142dbfc5ba1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_unused_huge_scan", "shmem_unused_huge_count", "shmem_evict_inode", "shmem_fill_super" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7c2htZW1fZmlsbF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIyOTllNWJlZjQ2ZTliMDdiMDI5MmZjYWM0ZTBkODI5ODA0ODFjYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU4OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCA1ZmVlY2Y1ZDkwMzhkLi4zNmIyNDlmMDAyYTlhIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTE3MSwxOSAmIzQzOzE3MSw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX2ZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBUaGUgc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cdTAwM2VtZW1jZy4gRHJpdmluZyB0aGVtXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXG4tICogdGhlIGdsb2JhbCBwYXRoIChrc3dhcGQgb3Igcm9vdCBkaXJlY3QgcmVjbGFpbSkgcmVnYXJkbGVzcy4gUmVzdHJpY3QgdGhlbVxuLSAqIHRvIHRoYXQgcGF0aC5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbi19XG4tXG4gLypcbiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3RcbiAgKiBkcm9wIHRoZSBsYXN0IGFjdGl2ZSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyYmxvY2sgZnJvbSB3aXRoaW4gdGhlIHNocmlua2VyLlxuQEAgLTIxMyw3ICYjNDM7MjAwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjYgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4mIzQzO1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXG4gXHRcdGZzX29iamVjdHMgPSBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XG4gXG4gXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcbkBAIC0yNzQsOCAmIzQzOzI2MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0XHRyZXR1cm4gMDtcbiBcdHNtcF9ybWIoKTtcbiBcbi1cdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuJiM0MztcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxuIFx0XHR0b3RhbF9vYmplY3RzID0gc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xuIFxuIFx0dG90YWxfb2JqZWN0cyAmIzQzOz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSwgc2MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19wYXJzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gXG4gLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi9cbiBcbkBAIC01NCw2ICYjNDM7NTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8ge1xuIFx0c3RydWN0IGRxdW90IF9fcmN1XHQqaV9kcXVvdFtNQVhRVU9UQVNdO1xuICNlbmRpZlxuIFx0c3RydWN0IGlub2RlXHRcdHZmc19pbm9kZTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cFx0KnNocmlua2xpc3RfbWVtY2c7XG4mIzQzO1x0aW50XHRcdFx0c2hyaW5rbGlzdF9uaWQ7XG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gI2RlZmluZSBTSE1FTV9GTF9VU0VSX1ZJU0lCTEVcdFx0KEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKVxuQEAgLTgzLDkgJiM0Mzs4OSw5IEBAIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHtcbiBcdGlub190IG5leHRfaW5vO1x0XHQgICAgLyogVGhlIG5leHQgcGVyLXNiIGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdGlub190IF9fcGVyY3B1ICppbm9fYmF0Y2g7ICAvKiBUaGUgbmV4dCBwZXItY3B1IGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXG4tXHRzcGlubG9ja190IHNocmlua2xpc3RfbG9jazsgICAvKiBQcm90ZWN0cyBzaHJpbmtsaXN0ICovXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua2xpc3Q7ICAvKiBMaXN0IG9mIHNoaW5rYWJsZSBpbm9kZXMgKi9cbi1cdHVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovXG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqL1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi9cbiBcdHN0cnVjdCBzaW1wbGVfeGF0dHJfY2FjaGUgeGFfY2FjaGU7XG4gfTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNzRkYzNkOTAwMDY3YS4uNzA0MzUzODUyYWUyNiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC03MjQsNTEgJiM0Mzs3MjQsMjM3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSlcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4tXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbiYjNDM7c3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4ge1xuLVx0TElTVF9IRUFEKGxpc3QpLCAqcG9zLCAqbmV4dDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZztcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWNnO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4mIzQzO3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIGdmcCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuJiM0MztzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0ICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMLCAqb2xkX21lbWNnID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgZ2ZwKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1lbWNnKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbiYjNDM7XHRcdC8qIGlzb2xhdGVkIG9uIHNjYW4gbGlzdCwgbGV0IHNocmluayBoYW5kbGUgaXQgKi9cbiYjNDM7XHRcdGlmIChpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKSlcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gbmlkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4mIzQzO1x0XHRcdCAgICAgaW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnKTtcbiYjNDM7XHRcdG9sZF9tZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBtZW1jZztcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuJiM0MztcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbiYjNDM7XHRtZW1jZyA9IE5VTEw7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG9sZF9tZW1jZyk7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4mIzQzO1x0XHRsaXN0X2xydV9kZWwoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCxcbiYjNDM7XHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuJiM0MztcdFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0c3RydWN0IHNocmlua19jb250cm9sICpzYztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuJiM0MztcdFx0XHRcdFx0XHQgdm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHR1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy1cdTAwM2Vucl90b19zY2FuIDogMTI4O1xuLVx0dW5zaWduZWQgbG9uZyBzcGxpdCA9IDAsIGZyZWVkID0gMDtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4gXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpXG4tXHRcdHJldHVybiBTSFJJTktfU1RPUDtcbiYjNDM7XHRpbmZvID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCkge1xuLVx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB0cnlsb2NrIHRvIGF2b2lkIEFCQkEgZGVhZGxvY2s6IGFkZC9kZWwgcGF0aCB0YWtlcyBpbmZvLVx1MDAzZWxvY2tcbiYjNDM7XHQgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spKVxuJiM0MztcdFx0cmV0dXJuIExSVV9TS0lQO1xuIFxuLVx0XHQvKiBwaW4gdGhlIGlub2RlICovXG4tXHRcdGlub2RlID0gaWdyYWIoXHUwMDI2aW5mby1cdTAwM2V2ZnNfaW5vZGUpO1xuJiM0MztcdC8qIHBpbiB0aGUgaW5vZGUgKi9cbiYjNDM7XHRpbm9kZSA9IGlncmFiKFx1MDAyNmluZm8tXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHQvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovXG4mIzQzO1x0aWYgKCFpbm9kZSkge1xuJiM0MztcdFx0bGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pO1xuJiM0MztcdFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbiYjNDM7XHR9XG4gXG4tXHRcdC8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi9cbi1cdFx0aWYgKCFpbm9kZSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRnb3RvIG5leHQ7XG4tXHRcdH1cbiYjNDM7XHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2c2Nhbi1cdTAwM2VsaXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2bGlzdCk7XG4tbmV4dDpcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuLS07XG4tXHRcdGlmICghLS1iYXRjaClcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuJiM0MztcdGJvb2wgbWF0Y2g7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdFxuJiM0MztcdCAqIHNjLVx1MDAzZW1lbWNnLiBTa2lwIHRoZSBmb2xpbyBtZW1jZyBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbiYjNDM7XHQgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKVxuJiM0MztcdCAqIDIuIGdsb2JhbCBzaHJpbmtlciByZWNsYWltXG4mIzQzO1x0ICogMy4gcm9vdCBtZW1jZyByZWNsYWltXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFzYyB8fCAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy1cdTAwM2VuaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0bWF0Y2ggPSBtZW1jZyA9PSBzYy1cdTAwM2VtZW1jZztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XG4mIzQzO1x0aWYgKElTX0VSUihtZW1jZykpIHtcbiYjNDM7XHRcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcdTAwMjZsaXN0KSB7XG4tXHRcdHBnb2ZmX3QgbmV4dCwgZW5kO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi9cbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzO1x0bGlzdF9scnVfYWRkKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSBuaWQ7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4mIzQzO1x0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiBzY2FuO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3BsaXQgPSAwLCBmcmVlZCA9IDA7XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjYW4ubGlzdCk7XG4mIzQzO1x0c2Nhbi5zYyA9IHNjO1xuJiM0MztcdGlmIChzYylcbiYjNDM7XHRcdGxpc3RfbHJ1X3Nocmlua193YWxrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyxcbiYjNDM7XHRcdFx0XHQgICAgIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsIFx1MDAyNnNjYW4pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxpc3RfbHJ1X3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNnNjYW4sIDEyOCk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNnNjYW4ubGlzdCkge1xuJiM0MztcdFx0cGdvZmZfdCBmb2xpb19lbmQsIGVuZDtcbiBcdFx0bG9mZl90IGlfc2l6ZTtcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4gXHRcdGlub2RlID0gXHUwMDI2aW5mby1cdTAwM2V2ZnNfaW5vZGU7XG4gXG4tXHRcdGlmIChucl90b19mcmVlIFx1MDAyNlx1MDAyNiBmcmVlZCBcdTAwM2U9IG5yX3RvX2ZyZWUpXG4tXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4tXG4gXHRcdGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdFx0Zm9saW8gPSBmaWxlbWFwX2dldF9lbnRyeShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlfc2l6ZSAvIFBBR0VfU0laRSk7XG4gXHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKVxuQEAgLTc4MSwxMyAmIzQzOzk2NywxOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBnYWluIGZyb20gc3BsaXR0aW5nICovXG4tXHRcdG5leHQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuIFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xuLVx0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gbmV4dCkge1xuJiM0MztcdFx0aWYgKGVuZCBcdTAwM2M9IGZvbGlvLVx1MDAzZWluZGV4IHx8IGVuZCBcdTAwM2U9IGZvbGlvX2VuZCkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSlcbiYjNDM7XHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbiYjNDM7XHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBNb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgaWYgd2UgZmFpbGVkXG4gXHRcdCAqIHRvIGxvY2sgdGhlIHBhZ2UgYXQgdGhpcyB0aW1lLlxuQEAgLTc5NSwzNSAmIzQzOzk4NywzMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0ICogV2FpdGluZyBmb3IgdGhlIGxvY2sgbWF5IGxlYWQgdG8gZGVhZGxvY2sgaW4gdGhlXG4gXHRcdCAqIHJlY2xhaW0gcGF0aC5cbiBcdFx0ICovXG4tXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiYjNDM7XHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRnb3RvIG1vdmVfYmFjaztcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRcdC8qIElmIHNwbGl0IGZhaWxlZCBtb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgKi9cbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG1vdmVfYmFjaztcbiBcbi1cdFx0ZnJlZWQgJiM0Mzs9IG5leHQgLSBlbmQ7XG4mIzQzO1x0XHRmcmVlZCAmIzQzOz0gZm9saW9fZW5kIC0gZW5kO1xuIFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIGRyb3A6XG4tXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbiYjNDM7XHRcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuIFx0XHRnb3RvIHB1dDtcbiBtb3ZlX2JhY2s6XG4tXHRcdC8qXG4tXHRcdCAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgZWl0aGVyIG9uIHRoZSBnbG9iYWwgbGlzdCBvciBkZWxldGVkXG4tXHRcdCAqIGZyb20gYW55IGxvY2FsIGxpc3QgYmVmb3JlIGlwdXQoKSBzaW5jZSBpdCBjb3VsZCBiZSBkZWxldGVkXG4tXHRcdCAqIGluIGFub3RoZXIgdGhyZWFkIG9uY2Ugd2UgcHV0IHRoZSBpbm9kZSAodGhlbiB0aGUgbG9jYWwgbGlzdFxuLVx0XHQgKiBpcyBjb3JydXB0ZWQpLlxuLVx0XHQgKi9cbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0XHRsaXN0X21vdmUoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbiYjNDM7JiM0Mzs7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICYjNDM7MTAyMyw3IEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0aWYgKCFSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKSlcbiYjNDM7XHRpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2MpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4gXHRyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApO1xuQEAgLTg0NywyMSAmIzQzOzEwMzQsMjEgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0Lypcbi1cdCAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxuLVx0ICogaG9ub3VyIHNjLVx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXG4tXHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2Zcbi1cdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxuLVx0ICovXG4tXHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKTtcbiYjNDM7XHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbiB7XG5AQCAtMTQxNywxNCAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXHRcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xuLVx0XHRcdH1cbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0fVxuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpKSB7XG4gXHRcdFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cbiBcdFx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZpbmZvLVx1MDAzZXN0b3BfZXZpY3Rpb24sXG5AQCAtMjUzNSwyNyAmIzQzOzI3MTUsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcbiBhbGxvY2VkOlxuIFx0YWxsb2NlZCA9IHRydWU7XG4tXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4tXHQgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSBcdTAwM2Ncbi1cdFx0XHRcdFx0Zm9saW9fbmV4dF9pbmRleChmb2xpbykpIHtcbi1cdFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG4tXHRcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdC8qXG4tXHRcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xuLVx0XHQgKiAtXHUwMDNlc2hyaW5rX2xpc3QgaW4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKClcbi1cdFx0ICovXG4tXHRcdGlmIChsaXN0X2VtcHR5X2NhcmVmdWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KSkge1xuLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbiYjNDM7JiM0Mzs7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHR9XG4gXG4gXHRpZiAoc2dwID09IFNHUF9XUklURSlcbiBcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xuQEAgLTI1ODUsNiAmIzQzOzI3NDQsMjAgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRcdGVycm9yID0gLUVJTlZBTDtcbiBcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUXVldWUgdGhlIGlub2RlIG9uIHRoZSBzaHJpbmsgbGlzdCBvbmx5IGFmdGVyIGFsbCBjaGVja3MgdGhhdCBtaWdodFxuJiM0MztcdCAqIHJlbW92ZSB0aGUgZm9saW8gaGF2ZSBwYXNzZWQuIE90aGVyd2lzZSB0aGUgaW5vZGUgY291bGQgYmUgbGVmdCBvblxuJiM0MztcdCAqIHRoZSBzaHJpbmtlciBsaXN0IHdpdGggYSBzdGFsZSBmb2xpby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYWxsb2NlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxuJiM0MztcdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfYWRkKGlub2RlLCBmb2xpbywgZ2ZwKTtcbiYjNDM7XHR9XG4gb3V0OlxuIFx0KmZvbGlvcCA9IGZvbGlvO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzA2MSw2ICYjNDM7MzIzNCwxMCBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpfX3NobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChpbmZvLVx1MDAzZWZzZmxhZ3MpXG4gXHRcdHNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby1cdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSAtMTtcbiYjNDM7I2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXN3YXBsaXN0KTtcbiBcdGNhY2hlX25vX2FjbChpbm9kZSk7XG4gXHRpZiAoc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC00OTI3LDYgJiM0Mzs1MTA0LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gI2VuZGlmXG4gXHRmcmVlX3BlcmNwdShzYmluZm8tXHUwMDNlaW5vX2JhdGNoKTtcbiBcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzKTtcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MzsjZW5kaWZcbiBcdG1wb2xfcHV0KHNiaW5mby1cdTAwM2VtcG9sKTtcbiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG4gXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcdTAwMjZzYmluZm8tXHUwMDNleGFfY2FjaGUpO1xuQEAgLTUwMjAsOCAmIzQzOzUyMDAsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc3RhdF9sb2NrKTtcbiBcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpXG4gXHRcdGdvdG8gZmFpbGVkO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuJiM0MzsjZW5kaWZcbiBcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19ibG9ja3NpemUgPSBQQUdFX1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7c2htZW1fZmlsbF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIyOTllNWJlZjQ2ZTliMDdiMDI5MmZjYWM0ZTBkODI5ODA0ODFjYjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU4OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWZlZWNmNWQ5MDM4ZC4uMzZiMjQ5ZjAwMmE5YSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0xNzEsMTkgJiM0MzsxNzEsNiBAQCBzdGF0aWMgdm9pZCBzdXBlcl93YWtlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFnKQogCXdha2VfdXBfdmFyKCZhbXA7c2ItJmd0O3NfZmxhZ3MpOwogfQogCi0vKgotICogVGhlIHNfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpCi0gKiBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlIGFuZCBpZ25vcmUgc2MtJmd0O21lbWNnLiBEcml2aW5nIHRoZW0KLSAqIGZyb20gcGVyLW1lbWNnIHNocmlua19zbGFiX21lbWNnKCkgaW52b2NhdGlvbnMgb25seSBidXJucyBDUFUgd2Fsa2luZwotICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uCi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtCi0gKiB0byB0aGF0IHBhdGguCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCi17Ci0JcmV0dXJuICFzYy0mZ3Q7bWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLSZndDttZW1jZyk7Ci19Ci0KIC8qCiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3QKICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuCkBAIC0yMTMsNyAmIzQzOzIwMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJaWYgKCFzdXBlcl90cnlsb2NrX3NoYXJlZChzYikpCiAJCXJldHVybiBTSFJJTktfU1RPUDsKIAotCWlmIChzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOyBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cykKIAkJZnNfb2JqZWN0cyA9IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpOwogCiAJaW5vZGVzID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KCZhbXA7c2ItJmd0O3NfaW5vZGVfbHJ1LCBzYyk7CkBAIC0yNzQsOCAmIzQzOzI2MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAogCQlyZXR1cm4gMDsKIAlzbXBfcm1iKCk7CiAKLQlpZiAoc2ItJmd0O3Nfb3AgJmFtcDsmYW1wOyBzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOwotCSAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKQogCQl0b3RhbF9vYmplY3RzID0gc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7CiAKIAl0b3RhbF9vYmplY3RzICYjNDM7PSBsaXN0X2xydV9zaHJpbmtfY291bnQoJmFtcDtzYi0mZ3Q7c19kZW50cnlfbHJ1LCBzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mc19wYXJzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyZmF1bHRmZF9rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogCiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqLwogCkBAIC01NCw2ICYjNDM7NTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8gewogCXN0cnVjdCBkcXVvdCBfX3JjdQkqaV9kcXVvdFtNQVhRVU9UQVNdOwogI2VuZGlmCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cAkqc2hyaW5rbGlzdF9tZW1jZzsKJiM0MzsJaW50CQkJc2hyaW5rbGlzdF9uaWQ7CiYjNDM7I2VuZGlmCiB9OwogCiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRQkJKEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKQpAQCAtODMsOSAmIzQzOzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8gewogCWlub190IG5leHRfaW5vOwkJICAgIC8qIFRoZSBuZXh0IHBlci1zYiBpbm9kZSBudW1iZXIgdG8gdXNlICovCiAJaW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqLwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovCi0Jc3BpbmxvY2tfdCBzaHJpbmtsaXN0X2xvY2s7ICAgLyogUHJvdGVjdHMgc2hyaW5rbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovCiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqLwomIzQzOyNlbmRpZgogCXN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi8KIAlzdHJ1Y3Qgc2ltcGxlX3hhdHRyX2NhY2hlIHhhX2NhY2hlOwogfTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDc0ZGMzZDkwMDA2N2EuLjcwNDM1Mzg1MmFlMjYgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtNzI0LDUxICYjNDM7NzI0LDIzNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqc2htZW1fZm9ybWF0X2h1Z2UoaW50IGh1Z2UpCiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCi0JCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKJiM0MztzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbykKIHsKLQlMSVNUX0hFQUQobGlzdCksICpwb3MsICpuZXh0OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CiYjNDM7CXJldHVybiBpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9PSAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZzsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICAgIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIGdmcCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG1lbWNnOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICAgIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIGdmcCk7CiYjNDM7CWlmIChJU19FUlIobWVtY2cpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCkpIHsKJiM0MzsJCS8qIGlzb2xhdGVkIG9uIHNjYW4gbGlzdCwgbGV0IHNocmluayBoYW5kbGUgaXQgKi8KJiM0MzsJCWlmIChpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKSkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCWlmIChpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9PSBuaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPT0gbWVtY2cpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CQlsaXN0X2xydV9kZWwoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwKJiM0MzsJCQkgICAgIGluZm8tJmd0O3Nocmlua2xpc3RfbmlkLCBpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnKTsKJiM0MzsJCW9sZF9tZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnOwomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9IG5pZDsKJiM0MzsJbGlzdF9scnVfYWRkKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsIG5pZCwgbWVtY2cpOwomIzQzOwltZW1jZyA9IE5VTEw7CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwltZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7CiYjNDM7CQlsaXN0X2xydV9kZWwoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwKJiM0MzsJCQkgICAgIGluZm8tJmd0O3Nocmlua2xpc3RfbmlkLCBpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnKTsKJiM0MzsJCW1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sCiYjNDM7CQkJCQkJIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSwKJiM0MzsJCQkJCQkgdm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87Ci0Jc3RydWN0IGZvbGlvICpmb2xpbzsKLQl1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy0mZ3Q7bnJfdG9fc2NhbiA6IDEyODsKLQl1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMOwogCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpKQotCQlyZXR1cm4gU0hSSU5LX1NUT1A7CiYjNDM7CWluZm8gPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTsKIAotCXNwaW5fbG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCkgewotCQlpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRyeWxvY2sgdG8gYXZvaWQgQUJCQSBkZWFkbG9jazogYWRkL2RlbCBwYXRoIHRha2VzIGluZm8tJmd0O2xvY2sKJiM0MzsJICogYmVmb3JlIHRoZSBsaXN0X2xydSBidWNrZXQgbG9jaywgd2hpbGUgaGVyZSB0aGUgb3JkZXIgaXMgcmV2ZXJzZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNwaW5fdHJ5bG9jaygmYW1wO2luZm8tJmd0O2xvY2spKQomIzQzOwkJcmV0dXJuIExSVV9TS0lQOwogCi0JCS8qIHBpbiB0aGUgaW5vZGUgKi8KLQkJaW5vZGUgPSBpZ3JhYigmYW1wO2luZm8tJmd0O3Zmc19pbm9kZSk7CiYjNDM7CS8qIHBpbiB0aGUgaW5vZGUgKi8KJiM0MzsJaW5vZGUgPSBpZ3JhYigmYW1wO2luZm8tJmd0O3Zmc19pbm9kZSk7CiYjNDM7CS8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi8KJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJbGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pOwomIzQzOwkJbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJCXJldHVybiBMUlVfUkVNT1ZFRDsKJiM0MzsJfQogCi0JCS8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi8KLQkJaWYgKCFpbm9kZSkgewotCQkJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwotCQkJZ290byBuZXh0OwotCQl9CiYjNDM7CWxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTsKJiM0MzsJbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwlzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbyk7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO3NjYW4tJmd0O2xpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKLQkJbGlzdF9tb3ZlKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtsaXN0KTsKLW5leHQ6Ci0JCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4tLTsKLQkJaWYgKCEtLWJhdGNoKQotCQkJYnJlYWs7CiYjNDM7CXJldHVybiBMUlVfUkVNT1ZFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMOwomIzQzOwlib29sIG1hdGNoOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IG5vbi1yb290IG1lbWNnIHJlY2xhaW0gbmVlZHMgdG8gbWF0Y2ggdGhlIGZvbGlvIGNoYXJnZSBhZ2FpbnN0CiYjNDM7CSAqIHNjLSZndDttZW1jZy4gU2tpcCB0aGUgZm9saW8gbWVtY2cgY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CiYjNDM7CSAqIDEuIHNobWVtIHF1b3RhIHJlY2xhaW0gKHNjID09IE5VTEwpCiYjNDM7CSAqIDIuIGdsb2JhbCBzaHJpbmtlciByZWNsYWltCiYjNDM7CSAqIDMuIHJvb3QgbWVtY2cgcmVjbGFpbQomIzQzOwkgKi8KJiM0MzsJaWYgKCFzYyB8fCAhc2MtJmd0O21lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy0mZ3Q7bWVtY2cpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChmb2xpb19uaWQoZm9saW8pICE9IHNjLSZndDtuaWQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiYjNDM7CW1hdGNoID0gbWVtY2cgPT0gc2MtJmd0O21lbWNnOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTsKJiM0MzsKJiM0MzsJbWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7CiYjNDM7CWlmIChJU19FUlIobWVtY2cpKSB7CiYjNDM7CQlzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTsKJiM0MzsJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmYW1wO2xpc3QpIHsKLQkJcGdvZmZfdCBuZXh0LCBlbmQ7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwkvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovCiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsJbGlzdF9scnVfYWRkKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsIG5pZCwgbWVtY2cpOwomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbmlkID0gbmlkOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywKJiM0MzsJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwOwomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3NjYW4ubGlzdCk7CiYjNDM7CXNjYW4uc2MgPSBzYzsKJiM0MzsJaWYgKHNjKQomIzQzOwkJbGlzdF9scnVfc2hyaW5rX3dhbGsoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNjLAomIzQzOwkJCQkgICAgIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsICZhbXA7c2Nhbik7CiYjNDM7CWVsc2UKJiM0MzsJCWxpc3RfbHJ1X3dhbGsoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsCiYjNDM7CQkJICAgICAgJmFtcDtzY2FuLCAxMjgpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmYW1wO3NjYW4ubGlzdCkgewomIzQzOwkJcGdvZmZfdCBmb2xpb19lbmQsIGVuZDsKIAkJbG9mZl90IGlfc2l6ZTsKIAkJaW50IHJldDsKIAogCQlpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTsKIAkJaW5vZGUgPSAmYW1wO2luZm8tJmd0O3Zmc19pbm9kZTsKIAotCQlpZiAobnJfdG9fZnJlZSAmYW1wOyZhbXA7IGZyZWVkICZndDs9IG5yX3RvX2ZyZWUpCi0JCQlnb3RvIG1vdmVfYmFjazsKLQogCQlpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJCWZvbGlvID0gZmlsZW1hcF9nZXRfZW50cnkoaW5vZGUtJmd0O2lfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTsKIAkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpCkBAIC03ODEsMTMgJiM0Mzs5NjcsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCiAJCX0KIAogCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBnYWluIGZyb20gc3BsaXR0aW5nICovCi0JCW5leHQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTsKJiM0MzsJCWZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pOwogCQllbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpOwotCQlpZiAoZW5kICZsdDs9IGZvbGlvLSZndDtpbmRleCB8fCBlbmQgJmd0Oz0gbmV4dCkgewomIzQzOwkJaWYgKGVuZCAmbHQ7PSBmb2xpby0mZ3Q7aW5kZXggfHwgZW5kICZndDs9IGZvbGlvX2VuZCkgewogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCiYjNDM7CQlpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkKJiM0MzsJCQlnb3RvIG1vdmVfYmFjazsKJiM0MzsKJiM0MzsJCWlmIChucl90b19mcmVlICZhbXA7JmFtcDsgZnJlZWQgJmd0Oz0gbnJfdG9fZnJlZSkKJiM0MzsJCQlnb3RvIG1vdmVfYmFjazsKJiM0MzsKIAkJLyoKIAkJICogTW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0IGlmIHdlIGZhaWxlZAogCQkgKiB0byBsb2NrIHRoZSBwYWdlIGF0IHRoaXMgdGltZS4KQEAgLTc5NSwzNSAmIzQzOzk4NywzMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywKIAkJICogV2FpdGluZyBmb3IgdGhlIGxvY2sgbWF5IGxlYWQgdG8gZGVhZGxvY2sgaW4gdGhlCiAJCSAqIHJlY2xhaW0gcGF0aC4KIAkJICovCi0JCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKLQkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKQomIzQzOwkJCWdvdG8gbW92ZV9iYWNrOwomIzQzOwomIzQzOwkJaWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwogCQkJZ290byBtb3ZlX2JhY2s7CiAJCX0KIAogCQlyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7CiAKIAkJLyogSWYgc3BsaXQgZmFpbGVkIG1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCAqLwogCQlpZiAocmV0KQogCQkJZ290byBtb3ZlX2JhY2s7CiAKLQkJZnJlZWQgJiM0Mzs9IG5leHQgLSBlbmQ7CiYjNDM7CQlmcmVlZCAmIzQzOz0gZm9saW9fZW5kIC0gZW5kOwogCQlzcGxpdCYjNDM7JiM0Mzs7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogZHJvcDoKLQkJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOwkJc2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7CiAJCWdvdG8gcHV0OwogbW92ZV9iYWNrOgotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIGVpdGhlciBvbiB0aGUgZ2xvYmFsIGxpc3Qgb3IgZGVsZXRlZAotCQkgKiBmcm9tIGFueSBsb2NhbCBsaXN0IGJlZm9yZSBpcHV0KCkgc2luY2UgaXQgY291bGQgYmUgZGVsZXRlZAotCQkgKiBpbiBhbm90aGVyIHRocmVhZCBvbmNlIHdlIHB1dCB0aGUgaW5vZGUgKHRoZW4gdGhlIGxvY2FsIGxpc3QKLQkJICogaXMgY29ycnVwdGVkKS4KLQkJICovCi0JCXNwaW5fbG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQkJbGlzdF9tb3ZlKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpOwotCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuJiM0MzsmIzQzOzsKLQkJc3Bpbl91bmxvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7CiYjNDM7CQlzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogcHV0OgogCQlpcHV0KGlub2RlKTsKIAl9CkBAIC04MzYsNyAmIzQzOzEwMjMsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiB7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTsKIAotCWlmICghUkVBRF9PTkNFKHNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4pKQomIzQzOwlpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgc2MpKQogCQlyZXR1cm4gU0hSSU5LX1NUT1A7CiAKIAlyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApOwpAQCAtODQ3LDIxICYjNDM7MTAzNCwyMSBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogewogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7CiAKLQkvKgotCSAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdAotCSAqIGhvbm91ciBzYy0mZ3Q7bWVtY2csIHNvIGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiB0aGUgZ2xvYmFsIChrc3dhcGQgb3IKLQkgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2YKLQkgKiBzaHJpbmtfc2xhYl9tZW1jZygpIHRvIGF2b2lkIHF1ZXVlaW5nIGR1cGxpY2F0ZSBnbG9iYWwgd29yay4KLQkgKi8KLQlpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLSZndDtzaHJpbmtsaXN0X2xlbik7CiYjNDM7CXJldHVybiBsaXN0X2xydV9zaHJpbmtfY291bnQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNjKTsKIH0KICNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KIAogI2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWQogCiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLAogCQlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpCiB7CkBAIC0xNDE3LDE0ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWlub2RlLSZndDtpX3NpemUgPSAwOwogCQltYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLSZndDtpX21hcHBpbmcpOwogCQlzaG1lbV90cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7Ci0JCWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7Ci0JCQlzcGluX2xvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KSkgewotCQkJCWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuLS07Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQkJfQomIzQzOwkJc2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbXA7aW5mby0mZ3Q7c3dhcGxpc3QpKSB7CiAJCQkvKiBXYWl0IHdoaWxlIHNobWVtX3VudXNlKCkgaXMgc2Nhbm5pbmcgdGhpcyBpbm9kZS4uLiAqLwogCQkJd2FpdF92YXJfZXZlbnQoJmFtcDtpbmZvLSZndDtzdG9wX2V2aWN0aW9uLApAQCAtMjUzNSwyNyAmIzQzOzI3MTUsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAogYWxsb2NlZDoKIAlhbGxvY2VkID0gdHJ1ZTsKLQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgJmFtcDsmYW1wOwotCSAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpICZsdDsKLQkJCQkJZm9saW9fbmV4dF9pbmRleChmb2xpbykpIHsKLQkJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKLQkJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKLQkJLyoKLQkJICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdAotCQkgKiB0byBzaHJpbmsgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgotCQkgKi8KLQkJc3Bpbl9sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCQkvKgotCQkgKiBfY2FyZWZ1bCB0byBkZWZlbmQgYWdhaW5zdCB1bmxvY2tlZCBhY2Nlc3MgdG8KLQkJICogLSZndDtzaHJpbmtfbGlzdCBpbiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoKQotCQkgKi8KLQkJaWYgKGxpc3RfZW1wdHlfY2FyZWZ1bCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwKLQkJCQkgICAgICAmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCk7Ci0JCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuJiM0MzsmIzQzOzsKLQkJfQotCQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQl9CiAKIAlpZiAoc2dwID09IFNHUF9XUklURSkKIAkJZm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pOwpAQCAtMjU4NSw2ICYjNDM7Mjc0NCwyMCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9jazsKIAl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFF1ZXVlIHRoZSBpbm9kZSBvbiB0aGUgc2hyaW5rIGxpc3Qgb25seSBhZnRlciBhbGwgY2hlY2tzIHRoYXQgbWlnaHQKJiM0MzsJICogcmVtb3ZlIHRoZSBmb2xpbyBoYXZlIHBhc3NlZC4gT3RoZXJ3aXNlIHRoZSBpbm9kZSBjb3VsZCBiZSBsZWZ0IG9uCiYjNDM7CSAqIHRoZSBzaHJpbmtlciBsaXN0IHdpdGggYSBzdGFsZSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChhbGxvY2VkICZhbXA7JmFtcDsgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSAmbHQ7IGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdAomIzQzOwkJICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KJiM0MzsJCSAqLwomIzQzOwkJc2htZW1fdW51c2VkX2h1Z2VfYWRkKGlub2RlLCBmb2xpbywgZ2ZwKTsKJiM0MzsJfQogb3V0OgogCSpmb2xpb3AgPSBmb2xpbzsKIAlyZXR1cm4gMDsKQEAgLTMwNjEsNiAmIzQzOzMyMzQsMTAgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKGluZm8tJmd0O2ZzZmxhZ3MpCiAJCXNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby0mZ3Q7ZnNmbGFncywgTlVMTCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBOVUxMOwomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9IC0xOwomIzQzOyNlbmRpZgogCUlOSVRfTElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7c3dhcGxpc3QpOwogCWNhY2hlX25vX2FjbChpbm9kZSk7CiAJaWYgKHNiaW5mby0mZ3Q7bm9zd2FwKQpAQCAtNDkyNyw2ICYjNDM7NTEwNCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogI2VuZGlmCiAJZnJlZV9wZXJjcHUoc2JpbmZvLSZndDtpbm9fYmF0Y2gpOwogCXBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koJmFtcDtzYmluZm8tJmd0O3VzZWRfYmxvY2tzKTsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CWxpc3RfbHJ1X2Rlc3Ryb3koJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOyNlbmRpZgogCW1wb2xfcHV0KHNiaW5mby0mZ3Q7bXBvbCk7CiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSCiAJc2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoJmFtcDtzYmluZm8tJmd0O3hhX2NhY2hlKTsKQEAgLTUwMjAsOCAmIzQzOzUyMDAsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtzYmluZm8tJmd0O3N0YXRfbG9jayk7CiAJaWYgKHBlcmNwdV9jb3VudGVyX2luaXQoJmFtcDtzYmluZm8tJmd0O3VzZWRfYmxvY2tzLCAwLCBHRlBfS0VSTkVMKSkKIAkJZ290byBmYWlsZWQ7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsJaWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNiLSZndDtzX3NocmluaykpCiYjNDM7CQlnb3RvIGZhaWxlZDsKJiM0MzsjZW5kaWYKIAogCXNiLSZndDtzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYi0mZ3Q7c19ibG9ja3NpemUgPSBQQUdFX1NJWkU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFNobWVtIEh1Z2UgUGFnZSBTaHJpbmtlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNobWVtYCAoc3BlY2lmaWNhbGx5IHRtcGZzKSBkZWFscyB3aXRoIHVudXNlZCBodWdlIHBhZ2VzLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgZnJvbSBhIGdsb2JhbCBsaXN0IGZvciB0aGUgc2hyaW5rZXIgdG8gYSBwZXItbWVtY2cgYGxpc3RfbHJ1YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgaW1wcm92ZWQgbWVtb3J5IGFjY291bnRpbmcgZm9yIHNoYXJlZCBtZW1vcnkgc3lzdGVtcy4gVGhlIHJlbW92YWwgb2YgYHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGVgIGZyb20gYGZzL3N1cGVyLmNgIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyBhIHJlbGF4YXRpb24gb2YgdGhlIHJlc3RyaWN0aW9uIG9uIGBucl9jYWNoZWRfb2JqZWN0c2AgdG8gdGhlIHJvb3QgbWVtY2csIHdoaWNoIGlzIG5vdyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBgbGlzdF9scnVgIGRlc2lnbi4gVGhpcyBwb2ludHMgdG8gcG90ZW50aWFsbHkgbW9yZSBncmFudWxhciBjb250cm9sIGFuZCBhIG1vdmUgdG93YXJkcyBtb3JlIGFjY3VyYXRlIHRyYWNraW5nIGFjcm9zcyBtZW1jZ3MuCgpUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSByZXNpZGVzIGluIHRoZSBgbW0vc2htZW0uY2AgbW9kaWZpY2F0aW9uczogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgc3dpdGNoIHRvIGBsaXN0X2xydV9zaHJpbmtfd2Fsa2AgYW5kIGBsaXN0X2xydV93YWxrYCBpcyB0aGUga2V5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgc2hyaW5rZXIgb3BlcmF0ZXMuIFdlJiMzOTt2ZSBnb3QgYSBzbGV3IG9mIG5ldyBmdW5jdGlvbnMgaGVyZSB0byBtYW5hZ2UgdGhpczogYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCwgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBtYW5hZ2luZyB0aGUgZW50cmllcyB3aXRoaW4gdGhlIGBsaXN0X2xydWAuIFRoZSBmYWN0IHRoYXQgYHNobWVtX3NiX2luZm9gIG5vdyB1c2VzIGEgYHN0cnVjdCBsaXN0X2xydSBzaHJpbmtsaXN0YCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdGAsIGFuZCB0aGF0IGBzaG1lbV9pbm9kZV9pbmZvYCBoYXMgYHNocmlua2xpc3RfbWVtY2dgIGFuZCBgc2hyaW5rbGlzdF9uaWRgLCBjb25maXJtcyB0aGlzIG1lbWNnLWF3YXJlIGFwcHJvYWNoLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgY29yZSBrZXJuZWwgbW9kaWZpY2F0aW9uIHRvIGBtbS9zaG1lbS5jYCBhbmQgdGhhdCB0bXBmcyBpcyB1YmlxdWl0b3VzLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGltcGFjdGZ1bC4gSXQmIzM5O3MgaW4gYSBjcml0aWNhbCBwYXRoIGFuZCByZXF1aXJlcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgYW5kIG1vZGlmaWVkOgoqICAgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYAoqICAgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YAoqICAgYHNobWVtX3VudXNlZF9odWdlX2FkZGAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgCiogICBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAKKiAgIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYAoqICAgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgCiogICBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgKG1vZGlmaWVkKQoqICAgYHNobWVtX2V2aWN0X2lub2RlYCAobW9kaWZpZWQpCiogICBgc2htZW1fZmlsbF9zdXBlcmAgKG1vZGlmaWVkKQoqICAgYHNobWVtX3B1dF9zdXBlcmAgKG1vZGlmaWVkKQoKV2FpdCwgaG9sZCBvbi4uLiBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCwgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBhcmUgc3RhdGljLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSBiZWluZyB1c2VkLiBBaCwgZ290IGl0IC0gdGhleSBhcmUgYmVpbmcgYXNzaWduZWQgdG8gYHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0c2AgYW5kIGBzYi0mZ3Q7c19vcC0mZ3Q7ZnJlZV9jYWNoZWRfb2JqZWN0c2Agd2l0aGluIGBzaG1lbV9maWxsX3N1cGVyYC4gU28sIGBzaG1lbV9maWxsX3N1cGVyYCBhbmQgaW5kaXJlY3RseSB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzaG1lbV9zb3BzYCBpbiBgbW0vc2htZW0uY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gYXNzaWdubWVudCBhbmQgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9zb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgbWVtb3J5IGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IG15IGJlYXJpbmdzLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIHRoaXM/IFJpZ2h0LCBJIHNob3VsZCBzdGFydCB3aXRoIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZXJlc3QuIExldCBtZSBjaGVjayB0aGUga2VybmVsIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB3b3JrIHRvIGJlIGRvbmUgb24gdGhlIHNoYXJlZCBtZW1vcnkuIE15IHNlYXJjaCB0ZXJtIHdpbGwgYmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBUaGlzIGZ1bmN0aW9uIG5hbWUsIG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gaXQsIG1pZ2h0IGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBwcm9ibGVtcyBvciBvcHRpbWl6YXRpb25zIHJlZ2FyZGluZyB1bnVzZWQgaHVnZSBwYWdlcyB3aXRoaW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gSG9wZWZ1bGx5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBzb21lIGltcG9ydGFudCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9zaG1lbS5jLTgyOS1cbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcbm1tL3NobWVtLmMtODMxLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbm1tL3NobWVtLmM9ODM1PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuLS1cbm1tL3NobWVtLmMtODM4LXtcbm1tL3NobWVtLmM6ODM5Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XG5tbS9zaG1lbS5jLTg0MC1cdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuLS1cbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuLS1cbm1tL3NobWVtLmMtOTMzLXtcbm1tL3NobWVtLmM6OTM0Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2Nhbjtcbm1tL3NobWVtLmMtOTM1LVx0c3RydWN0IGlub2RlICppbm9kZTtcbi0tXG5tbS9zaG1lbS5jLTEwMjAtXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxubW0vc2htZW0uYy0xMDIyLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3NobWVtLmM9NTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTQyNi1cdC5ucl9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcbm1tL3NobWVtLmM6NTQyNzpcdC5mcmVlX2NhY2hlZF9vYmplY3RzXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXG5tbS9zaG1lbS5jLTU0MjgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzaG1lbSBGaWxlc3lzdGVtJiMzOTtzIENhY2hlZCBPYmplY3QgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGxpbmtlZCB0byBgZnJlZV9jYWNoZWRfb2JqZWN0c2Agd2l0aGluIHRoZSBgc2htZW1fb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgYXJlIGludm9rZWQgdGhyb3VnaCB0aGUgYHNiLSZndDtzX29wYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB2aWEgYG5yX2NhY2hlZF9vYmplY3RzYCBhbmQgYGZyZWVfY2FjaGVkX29iamVjdHNgLiBOb3csIHdoZXJlIGRvIHRoZXNlIGVudHJ5IHBvaW50cyBsaXZlPyBBaCwgdGhhdCYjMzk7cyByaWdodCwgYHN1cGVyX2NhY2hlX3NjYW5gIGFuZCBgc3VwZXJfY2FjaGVfY291bnRgIGluIGBmcy9zdXBlci5jYC4KCldhaXQgYSBtaW51dGUsIGBzdXBlcl9jYWNoZV9zY2FuYCBhbmQgYHN1cGVyX2NhY2hlX2NvdW50YC4uLiB0aG9zZSBhcmUgdGhlIHNocmlua2VyIGNhbGxiYWNrcyBmb3IgdGhlIHN1cGVyIGJsb2NrIHNocmlua2VyLCBhcmVuJiMzOTt0IHRoZXk/IFRoYXQgbWVhbnMgdGhlIGZpbGVzeXN0ZW0gc2hyaW5rZXIgbWVjaGFuaXNtIGlzIGtleSBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbiBgZnMvc3VwZXIuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBodWdlIHBhZ2UgY2FjaGluZyBpbiBzaG1lbSBpcyBtYW5hZ2VkIGFuZCBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhhdCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1cGVyX2NhY2hlX3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9MTU0PXN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4tLVxuZnMvc3VwZXIuYy0xODAtICovXG5mcy9zdXBlci5jOjE4MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuZnMvc3VwZXIuYy0xODItXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbmZzL3N1cGVyLmM9MjM4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbmZzL3N1cGVyLmMtMjUwLVx0ICogbGlzdF9scnVfc2hyaW5rX2NvdW50KCkgb3Igc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cygpLiBDb3VudHMgY2FuXG5mcy9zdXBlci5jOjI1MTpcdCAqIGNoYW5nZSBiZXR3ZWVuIHN1cGVyX2NhY2hlX2NvdW50IGFuZCBzdXBlcl9jYWNoZV9zY2FuLCBzbyB3ZSByZWFsbHlcbmZzL3N1cGVyLmMtMjUyLVx0ICogZG9uJiMzOTt0IG5lZWQgbG9ja3MgaGVyZS5cbi0tXG5mcy9zdXBlci5jPTMyMz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMzkxLVxuZnMvc3VwZXIuYzozOTI6XHRzLVx1MDAzZXNfc2hyaW5rLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHN1cGVyX2NhY2hlX3NjYW47XG5mcy9zdXBlci5jLTM5My1cdHMtXHUwMDNlc19zaHJpbmstXHUwMDNlY291bnRfb2JqZWN0cyA9IHN1cGVyX2NhY2hlX2NvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDc0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTaG1lbSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGlzLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBzdXBlcl9jYWNoZV9zY2FuYCBhbmQgYHN1cGVyX2NhY2hlX2NvdW50YC4gVGhlc2UgYXJlIHByZXR0eSBnZW5lcmljLCBzbyB0aGF0IGRvZXNuJiMzOTt0IHRlbGwgdGhlIHdob2xlIHN0b3J5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIHRvIGJlIGhhcHBlbmluZyB3aXRoaW4gYG1tL3NobWVtLmNgLiBJJiMzOTttIHNwZWNpZmljYWxseSBzZWVpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIG1lbnRpb25lZCwgd2hpY2ggc3VnZ2VzdHMgdGhlIGFkanVzdG1lbnRzIGFyZSBmb2N1c2VkIGludGVybmFsbHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgbW9kdWxlLiBJIG5lZWQgdG8gYmUgc3VyZSwgdGhvdWdoLiBJcyB0aGlzIHRoZSBvbmx5IHBsYWNlPwoKSSBoYXZlIHRvIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGltcGFjdGVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gQWgsIEkgc2VlIHRoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIGlzIGFsc28gY2FsbGVkIG91dC4gSG1tLCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdOKAmXMgc3RhdGljLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgY2hhbmdlcyAqcmVhbGx5KiBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2dldF9mb2xpb19nZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MjIyMj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMjUyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxubW0vc2htZW0uYzoyMjUzOiAqIHVzdWFsIHN3YXBpbiBvZiBzaG1lbV9nZXRfZm9saW9fZ2ZwKCksIG9yIGJ5IHRoZSBsZXNzIGNvbW1vbiBzd2Fwb2ZmIG9mXG5tbS9zaG1lbS5jLTIyNTQtICogc2htZW1fdW51c2VfaW5vZGUoKSksIGl0IG1heSBoYXZlIGJlZW4gcmVhZCBpbiBlYXJsaWVyIGZyb20gc3dhcCwgaW5cbi0tXG5tbS9zaG1lbS5jPTI0MzM9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1OTgtLypcbm1tL3NobWVtLmM6MjU5OTogKiBzaG1lbV9nZXRfZm9saW9fZ2ZwIC0gZmluZCBwYWdlIGluIGNhY2hlLCBvciBnZXQgZnJvbSBzd2FwLCBvciBhbGxvY2F0ZVxubW0vc2htZW0uYy0yNjAwLSAqXG4tLVxubW0vc2htZW0uYy0yNjA2LSAqL1xubW0vc2htZW0uYzoyNjA3OnN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxubW0vc2htZW0uYy0yNjA4LVx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLFxuLS1cbm1tL3NobWVtLmM9MjgwMz1pbnQgc2htZW1fZ2V0X2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsXG4tLVxubW0vc2htZW0uYy0yODA1LXtcbm1tL3NobWVtLmM6MjgwNjpcdHJldHVybiBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgd3JpdGVfZW5kLCBmb2xpb3AsIHNncCxcbm1tL3NobWVtLmMtMjgwNy1cdFx0XHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVx1MDAzZWlfbWFwcGluZyksIE5VTEwsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9Mjg4Mj1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9zaG1lbS5jLTI5MDAtXHRXQVJOX09OX09OQ0Uodm1mLVx1MDAzZXBhZ2UgIT0gTlVMTCk7XG5tbS9zaG1lbS5jOjI5MDE6XHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXHUwMDNlcGdvZmYsIDAsIFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsXG5tbS9zaG1lbS5jLTI5MDItXHRcdFx0XHQgIGdmcCwgdm1mLCBcdTAwMjZyZXQpO1xuLS1cbm1tL3NobWVtLmM9NjEzMT1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNjEzOC1cbm1tL3NobWVtLmM6NjEzOTpcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvX2dmcChpbm9kZSwgaW5kZXgsIGlfc2l6ZV9yZWFkKGlub2RlKSxcbm1tL3NobWVtLmMtNjE0MC1cdFx0XHRcdCAgICBcdTAwMjZmb2xpbywgU0dQX0NBQ0hFLCBnZnAsIE5VTEwsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgc2htZW0gRnVuY3Rpb24gVmlzaWJpbGl0eSBhbmQgQ2FsbCBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYHNobWVtYCBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZXMgdG8gdXNlIGFzIGVudHJ5IHBvaW50cy4gYHNobWVtX2dldF9mb2xpb2AgYW5kIGBzaG1lbV9yZWFkX2ZvbGlvX2dmcGAgYXJlIHN0cmFpZ2h0Zm9yd2FyZCwgdGhleSYjMzk7cmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyB0aGVtIGVhc3kgdG8gdGFyZ2V0LiBgc2htZW1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCB2aWEgdGhlIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAsIHNvIGl0ICptaWdodCogYmUgYWNjZXNzaWJsZSwgYnV0IGxlc3MgaWRlYWwuIGBzaG1lbV9ldmljdF9pbm9kZWAsIGBzaG1lbV9maWxsX3N1cGVyYCwgYW5kIGBzaG1lbV9wdXRfc3VwZXJgIGFyZSBhbHNvIHN0YXRpYywgc28gbGVzcyBpbnRlcmVzdGluZyBmcm9tIGEgdGFyZ2V0aW5nIHBlcnNwZWN0aXZlLgoKVGhlIHRyaWNreSBvbmUgaXMgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyBiZWNhdXNlIGl0IG1pZ2h0IGJlIGlubGluZWQgYW5kIG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sLiBCdXQsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIHRoZSBmdW5jdGlvbiBwb2ludGVyIGBzaG1lbV9vcHMuZnJlZV9jYWNoZWRfb2JqZWN0c2AuIFRoYXQgbWVhbnMgaXQgKm11c3QqIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYnV0IHRoaXMgb25lIGlzIG5vdCBpbmxpbmVkLCBzaW5jZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBTbywgaXQgc2hvdWxkIGJlIHRhcmdldGFibGUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBub24tc3RhdGljIG9uZXM6IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy4KCkJ1dCB3YWl0LCBob3cgaXMgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gICphY3R1YWxseSogY2FsbGVkPyBJdCYjMzk7cyBwYXJ0IG9mIHRoZSBzaHJpbmtlciwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZS4gQ2FuIHdlIHRyaWdnZXIgaXQgd2l0aCBgZHJvcF9jYWNoZXNgPyBZZXMsIGBlY2hvIDMgJmd0OyAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNgIGNhbGxzIGBkcm9wX3NsYWJgLCB3aGljaCBjYWxscyBgc2hyaW5rX3NsYWJgLiBgc2hyaW5rX3NsYWJgIHRoZW4gY2FsbHMgYHN1cGVyX2NhY2hlX3NjYW5gLCB3aGljaCBmaW5hbGx5IGNhbGxzIGBzYi0mZ3Q7c19vcC0mZ3Q7ZnJlZV9jYWNoZWRfb2JqZWN0c2AsIHdoaWNoIGlzIGluZGVlZCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAuIEV4Y2VsbGVudC4gVGhhdCBnaXZlcyBtZSBhIHBhdGggdG8gdHJpZ2dlciBpdCBpbmRpcmVjdGx5LgoKT2theSwgbmV4dCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHdob2xlIHNlY3Rpb24gb2YgY29kZSBpcyB3cmFwcGVkIGluIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL3NobWVtLmNgIGFuZCBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYC4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCwgYW5kIGtub3dpbmcgdGhlc2Ugb3B0aW9ucyBtaWdodCBsaW1pdCB0aGUgc2NvcGUgb2Ygd2hhdCBJIGNhbiBkbywgYnV0IGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2htZW1fZnMuaD0zNT1zdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTU4LVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjU5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC02MC1cdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2hyaW5rbGlzdF9tZW1jZztcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9Nzc9c3RydWN0IHNobWVtX3NiX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC05MS1cdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6OTI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTkzLVx0c3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3Q7IC8qIExpc3Qgb2Ygc2hyaW5rYWJsZSBpbm9kZXMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBObyBxdWVzdGlvbiBhYm91dCBpdC4gQW5kLCBJIHNlZSwgd2UmIzM5O3JlIGFsc28gbWFraW5nIHVzZSBvZiBgQ09ORklHX01FTUNHYCwgYXMgaXRzIHVzYWdlIHBvcHMgdXAgaW4gdGhlIGBtbS9zaG1lbS5jYCBmaWxlLiBHb3QgaXQuIFRoaXMgbWFrZXMgc2Vuc2UgaW4gY29udGV4dC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NzM4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbi0tXG5tbS9zaG1lbS5jLTc0Ni1cbm1tL3NobWVtLmM6NzQ3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NobWVtLmMtNzQ4LXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IGlmIGBDT05GSUdfU0hNRU1gIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGhlcmUuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgYW5kIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCBpZiBuZWNlc3NhcnkuIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCwgcmlnaHQ/CgpUaGVuLCBhaCB5ZXMsIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19NTVVgLiBJIHNob3VsZCBoYXZlIGtub3duIHRoYXQgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYnV0IGEgcXVpY2sgcmV2aWV3IGlzIGFsd2F5cyBnb29kIHByYWN0aWNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMxLVxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzMtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1NS1cbm1tL0tjb25maWc6ODU2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjItXG5tbS9LY29uZmlnOjg2MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2NC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzEtXG5tbS9LY29uZmlnOjg3MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4OC1cbm1tL0tjb25maWc6ODg5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkwLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTgtXG5tbS9LY29uZmlnOjg5OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDYtXG5tbS9LY29uZmlnOjkwNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwOC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE0LVxubW0vS2NvbmZpZzo5MTU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMzLVxubW0vS2NvbmZpZzo5MzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0Mi1cbm1tL0tjb25maWc6OTQzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0NC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1MC1cbm1tL0tjb25maWc6OTUxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTgtXG5tbS9LY29uZmlnOjk1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOgoKKipJbnZlc3RpZ2F0aW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZGVuY2llcy4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhpbmdzIGJhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IHJlbGllcyBvbiBpdCwgd2hhdCBpdCBlbmFibGVzLCBhbmQgd2hhdCBtaWdodCBicmVhayBpZiBJIHdlcmUgdG8gY2hhbmdlIG9yIGRpc2FibGUgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgbm90IGp1c3QgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRoZSByaXBwbGUgZWZmZWN0cyDigJMgYW55dGhpbmcgZG93bnN0cmVhbSB0aGF0IG1pZ2h0IGxldmVyYWdlIHRoZSBhZHZhbnRhZ2VzIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcywgb3IgdGhhdCBjb3VsZCBiZSBuZWdhdGl2ZWx5IGFmZmVjdGVkIGJ5IGl0cyBhYnNlbmNlIG9yIG1vZGlmaWNhdGlvbnMuIFBlcmhhcHMgSSYjMzk7bGwgbmVlZCB0byBzdGFydCBieSBsb29raW5nIGF0IHN5c3RlbSBjb25maWd1cmF0aW9ucywga2VybmVsIG1vZHVsZXMsIG9yIGFwcGxpY2F0aW9uLWxldmVsIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhlIHN1cmZhY2UgYW5kIGRldGVybWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIE5VTUEsIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuIEkmIzM5O2xsIGtlZXAgYW4gb3BlbiBtaW5kLCBiZWNhdXNlIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xubW0vS2NvbmZpZzoxNDpcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxubW0vS2NvbmZpZy0xNS1cdGRlZmF1bHQgeVxuLS1cbm1tL0tjb25maWc9MjI9Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG5tbS9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBTV0FQXG5tbS9LY29uZmlnLTI1LVx0c2VsZWN0IENSWVBUT1xuLS1cbm1tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG5tbS9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy0zOC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQ1PWNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG5tbS9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy00OC1cdGRlZmF1bHQgblxuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG5tbS9LY29uZmlnLTYwLVx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgY29tcHJlc3NvclwmIzM0O1xubW0vS2NvbmZpZzo2MTpcdGRlcGVuZHMgb24gWlNXQVBcbm1tL0tjb25maWctNjItXHRkZWZhdWx0IFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbi0tXG5tbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG5tbS9LY29uZmlnOjExNjogICAgICAgZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy0xMTctICAgICAgIGRlZmF1bHQgXCYjMzQ7ZGVmbGF0ZVwmIzM0OyBpZiBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxuLS1cbm1tL0tjb25maWc9MTI4PW1lbnUgXCYjMzQ7WnNtYWxsb2MgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbm1tL0tjb25maWc6MTI5Olx0ZGVwZW5kcyBvbiBaU01BTExPQ1xubW0vS2NvbmZpZy0xMzAtXG4tLVxubW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxubW0vS2NvbmZpZy0xNjktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE3MDpcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcdTAwMjZcdTAwMjYgIVRJTllfUkNVXG5tbS9LY29uZmlnOjE3MTpcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG5tbS9LY29uZmlnLTE3Mi1cbm1tL0tjb25maWc9MTczPWNvbmZpZyBTTFVCX1RJTllcbm1tL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xubW0vS2NvbmZpZzoxNzU6XHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgIUNPTVBJTEVfVEVTVFxubW0vS2NvbmZpZy0xNzYtXHRzZWxlY3QgU0xBQl9NRVJHRV9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZz0yMDA9Y29uZmlnIFNMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9LY29uZmlnLTIwMS1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHNsYWIgZnJlZWxpc3RcJiMzNDtcbm1tL0tjb25maWc6MjAyOlx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTIwMy1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTIwOD1jb25maWcgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O0hhcmRlbiBzbGFiIGZyZWVsaXN0IG1ldGFkYXRhXCYjMzQ7XG5tbS9LY29uZmlnOjIxMDpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMTEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0yMTc9Y29uZmlnIFNMQUJfQlVDS0VUU1xubW0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1N1cHBvcnQgYWxsb2NhdGlvbiBmcm9tIHNlcGFyYXRlIGttYWxsb2MgYnVja2V0c1wmIzM0O1xubW0vS2NvbmZpZzoyMTk6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjIwLVx0ZGVmYXVsdCBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG4tLVxubW0vS2NvbmZpZz0yMzQ9Y29uZmlnIFNMVUJfU1RBVFNcbi0tXG5tbS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3NcJiMzNDtcbm1tL0tjb25maWc6MjM3Olx0ZGVwZW5kcyBvbiBTWVNGUyBcdTAwMjZcdTAwMjYgIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMzgtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0yNDc9Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFU1xubW0vS2NvbmZpZzoyNDg6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtQYXJ0aXRpb25lZCBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTI2Mz1jaG9pY2Vcbm1tL0tjb25maWctMjY0LVx0cHJvbXB0IFwmIzM0O1BhcnRpdGlvbmVkIHNsYWIgY2FjaGUgbW9kZVwmIzM0O1xubW0vS2NvbmZpZzoyNjU6XHRkZXBlbmRzIG9uIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFU1xubW0vS2NvbmZpZy0yNjYtXHRkZWZhdWx0IEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEIGlmIENDX0hBU19BTExPQ19UT0tFTlxuLS1cbm1tL0tjb25maWc9MjgzPWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9UWVBFRFxubW0vS2NvbmZpZy0yODQtXHRib29sIFwmIzM0O1R5cGUgYmFzZWQgc2xhYiBjYWNoZSBzZWxlY3Rpb24gZm9yIG5vcm1hbCBrbWFsbG9jXCYjMzQ7XG5tbS9LY29uZmlnOjI4NTpcdGRlcGVuZHMgb24gQ0NfSEFTX0FMTE9DX1RPS0VOXG5tbS9LY29uZmlnLTI4Ni1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTM1ND1jb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVEXG5tbS9LY29uZmlnLTM1NS1cdGJvb2wgXCYjMzQ7QWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWRcJiMzNDtcbm1tL0tjb25maWc6MzU2Olx0ZGVwZW5kcyBvbiBFWFBFUlQgXHUwMDI2XHUwMDI2ICFNTVVcbm1tL0tjb25maWctMzU3LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZz0zNzY9Y29uZmlnIFNFTEVDVF9NRU1PUllfTU9ERUxcbm1tL0tjb25maWctMzc3LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzozNzg6XHRkZXBlbmRzIG9uIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTFxubW0vS2NvbmZpZy0zNzktXG5tbS9LY29uZmlnPTM4MD1jaG9pY2Vcbm1tL0tjb25maWctMzgxLVx0cHJvbXB0IFwmIzM0O01lbW9yeSBtb2RlbFwmIzM0O1xubW0vS2NvbmZpZzozODI6XHRkZXBlbmRzIG9uIFNFTEVDVF9NRU1PUllfTU9ERUxcbm1tL0tjb25maWctMzgzLVx0ZGVmYXVsdCBTUEFSU0VNRU1fTUFOVUFMIGlmIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFRcbi0tXG5tbS9LY29uZmlnPTM5MT1jb25maWcgRkxBVE1FTV9NQU5VQUxcbm1tL0tjb25maWctMzkyLVx0Ym9vbCBcJiMzNDtGbGF0IE1lbW9yeVwmIzM0O1xubW0vS2NvbmZpZzozOTM6XHRkZXBlbmRzIG9uICFBUkNIX1NQQVJTRU1FTV9FTkFCTEUgfHwgQVJDSF9GTEFUTUVNX0VOQUJMRVxubW0vS2NvbmZpZy0zOTQtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz00MDY9Y29uZmlnIFNQQVJTRU1FTV9NQU5VQUxcbm1tL0tjb25maWctNDA3LVx0Ym9vbCBcJiMzNDtTcGFyc2UgTWVtb3J5XCYjMzQ7XG5tbS9LY29uZmlnOjQwODpcdGRlcGVuZHMgb24gQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG5tbS9LY29uZmlnLTQwOS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQyMT1jb25maWcgU1BBUlNFTUVNXG5tbS9LY29uZmlnLTQyMi1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NDIzOlx0ZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgXHUwMDI2XHUwMDI2IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSkgfHwgU1BBUlNFTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MjQtXG5tbS9LY29uZmlnPTQyNT1jb25maWcgRkxBVE1FTVxubW0vS2NvbmZpZy00MjYtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjQyNzpcdGRlcGVuZHMgb24gIVNQQVJTRU1FTSB8fCBGTEFUTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MjgtXG4tLVxubW0vS2NvbmZpZz00NDc9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXG5tbS9LY29uZmlnLTQ0OC1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NDQ5Olx0ZGVwZW5kcyBvbiBTUEFSU0VNRU0gXHUwMDI2XHUwMDI2ICFTUEFSU0VNRU1fU1RBVElDXG5tbS9LY29uZmlnLTQ1MC1cbi0tXG5tbS9LY29uZmlnPTQ1ND1jb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU1LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo0NTY6XHRkZXBlbmRzIG9uIFNQQVJTRU1FTSBcdTAwMjZcdTAwMjYgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXG5tbS9LY29uZmlnLTQ1Ny1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQ4MD1jb25maWcgSEFWRV9HVVBfRkFTVFxubW0vS2NvbmZpZzo0ODE6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy00ODItXHRib29sXG4tLVxubW0vS2NvbmZpZz01MDQ9Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG5tbS9LY29uZmlnLTUwNS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NTA2Olx0ZGVwZW5kcyBvbiAhREVWTUVNIHx8IFNUUklDVF9ERVZNRU1cbm1tL0tjb25maWctNTA3LVxuLS1cbm1tL0tjb25maWc9NTEyPW1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUxNC1cdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnOjUxNTpcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWc6NTE2Olx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZzo1MTc6XHRkZXBlbmRzIG9uIDY0QklUXG5tbS9LY29uZmlnLTUxOC1cdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG4tLVxubW0vS2NvbmZpZz01ODQ9Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXG5tbS9LY29uZmlnLTU4NS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NTg2Olx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxubW0vS2NvbmZpZy01ODctXG4tLVxubW0vS2NvbmZpZz01OTA9Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXG4tLVxubW0vS2NvbmZpZy01OTYtIyBEZWZhdWx0IHRvIDQgZm9yIHdpZGVyIHRlc3RpbmcsIHRob3VnaCA4IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUuXG5tbS9LY29uZmlnOjU5NzojIEFSTSYjMzk7cyBhZGp1c3RfcHRlICh1bnVzZWQgaWYgVklQVCkgZGVwZW5kcyBvbiBtbS13aWRlIHBhZ2VfdGFibGVfbG9jay5cbm1tL0tjb25maWctNTk4LSMgUEEtUklTQyA3eHh4JiMzOTtzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxuLS1cbm1tL0tjb25maWc9NjA0PWNvbmZpZyBTUExJVF9QVEVfUFRMT0NLU1xubW0vS2NvbmZpZy02MDUtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjYwNjpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjYwNzpcdGRlcGVuZHMgb24gU01QXG5tbS9LY29uZmlnOjYwODpcdGRlcGVuZHMgb24gTlJfQ1BVUyBcdTAwM2U9IDRcbm1tL0tjb25maWc6NjA5Olx0ZGVwZW5kcyBvbiAhQVJNIHx8IENQVV9DQUNIRV9WSVBUXG5tbS9LY29uZmlnOjYxMDpcdGRlcGVuZHMgb24gIVBBUklTQyB8fCBQQTIwXG5tbS9LY29uZmlnOjYxMTpcdGRlcGVuZHMgb24gIVNQQVJDMzJcbm1tL0tjb25maWc6NjEyOlx0ZGVwZW5kcyBvbiAhVU1MXG5tbS9LY29uZmlnLTYxMy1cbi0tXG5tbS9LY29uZmlnPTYxNz1jb25maWcgU1BMSVRfUE1EX1BUTE9DS1Ncbm1tL0tjb25maWctNjE4LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo2MTk6XHRkZXBlbmRzIG9uIFNQTElUX1BURV9QVExPQ0tTIFx1MDAyNlx1MDAyNiBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLXG5tbS9LY29uZmlnLTYyMC1cbi0tXG5tbS9LY29uZmlnPTYyOD1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTYzMC1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2MzE6XHRkZXBlbmRzIG9uIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgQkFMTE9PTlxubW0vS2NvbmZpZy02MzItXHRoZWxwXG4tLVxubW0vS2NvbmZpZz02NDA9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY0My1cdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWc6NjQ0Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNjQ1LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NjU1PWNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcbm1tL0tjb25maWctNjU2LVx0aW50XG5tbS9LY29uZmlnOjY1NzpcdGRlcGVuZHMgb24gQ09NUEFDVElPTlxubW0vS2NvbmZpZy02NTgtXHRkZWZhdWx0IDAgaWYgUFJFRU1QVF9SVFxuLS1cbm1tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjczLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjY3NDpcdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnLTY3NS1cdHNlbGVjdCBNSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnPTY4Mj1jb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4My1cdGJvb2xcbm1tL0tjb25maWc6Njg0Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNjg1LVxuLS1cbm1tL0tjb25maWc9NzI2PWNvbmZpZyBLU01cbm1tL0tjb25maWctNzI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcJiMzNDtcbm1tL0tjb25maWc6NzI4Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNzI5LVx0c2VsZWN0IFhYSEFTSFxuLS1cbm1tL0tjb25maWc9NzQxPWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcbm1tL0tjb25maWctNzQyLVx0aW50IFwmIzM0O0xvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cJiMzNDtcbm1tL0tjb25maWc6NzQzOlx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNzQ0LVx0ZGVmYXVsdCA0MDk2XG4tLVxubW0vS2NvbmZpZz03NjM9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnOjc2NDpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjc2NTpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTc3ND1jb25maWcgSFdQT0lTT05fSU5KRUNUXG5tbS9LY29uZmlnLTc3NS1cdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG5tbS9LY29uZmlnOjc3NjpcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubW0vS2NvbmZpZy03NzctXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1Jcbi0tXG5tbS9LY29uZmlnPTc3OT1jb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xubW0vS2NvbmZpZy03ODAtXHRpbnQgXCYjMzQ7VHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXCYjMzQ7XG5tbS9LY29uZmlnOjc4MTpcdGRlcGVuZHMgb24gIU1NVVxubW0vS2NvbmZpZy03ODItXHRkZWZhdWx0IDFcbi0tXG5tbS9LY29uZmlnPTgxMz1jb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL0tjb25maWctODE0LVx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xubW0vS2NvbmZpZzo4MTU6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgxNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTgzMj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xubW0vS2NvbmZpZzo4MzQ6XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbm1tL0tjb25maWctODM1LVx0c2VsZWN0IENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnPTk2OD1jb25maWcgVEhQX1NXQVBcbm1tL0tjb25maWctOTY5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo5NzA6XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXHUwMDI2XHUwMDI2IFNXQVAgXHUwMDI2XHUwMDI2IDY0QklUXG5tbS9LY29uZmlnLTk3MS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwMTQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVBcbm1tL0tjb25maWctMTAxNS1cdGRlZl9ib29sIG5cbm1tL0tjb25maWc6MTAxNjpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctMTAxNy1cbm1tL0tjb25maWc9MTAxOD1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG5tbS9LY29uZmlnLTEwMTktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjEwMjA6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy0xMDIxLVxubW0vS2NvbmZpZz0xMDIyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbm1tL0tjb25maWctMTAyMy1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyNDpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vS2NvbmZpZy0xMDI1LVxuLS1cbm1tL0tjb25maWc9MTAzNj1jb25maWcgTkVFRF9QRVJfQ1BVX0tNXG5tbS9LY29uZmlnOjEwMzc6XHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxubW0vS2NvbmZpZy0xMDM4LVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9MTA1Mz1jb25maWcgQ01BXG5tbS9LY29uZmlnLTEwNTQtXHRib29sIFwmIzM0O0NvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclwmIzM0O1xubW0vS2NvbmZpZzoxMDU1Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctMTA1Ni1cdHNlbGVjdCBNSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnPTEwNjg9Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwNjktXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xubW0vS2NvbmZpZzoxMDcwOlx0ZGVwZW5kcyBvbiBDTUEgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5tbS9LY29uZmlnLTEwNzEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDc0PWNvbmZpZyBDTUFfU1lTRlNcbm1tL0tjb25maWctMTA3NS1cdGJvb2wgXCYjMzQ7Q01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG5tbS9LY29uZmlnOjEwNzY6XHRkZXBlbmRzIG9uIENNQSBcdTAwMjZcdTAwMjYgU1lTRlNcbm1tL0tjb25maWctMTA3Ny1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwODE9Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDgyLVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xubW0vS2NvbmZpZzoxMDgzOlx0ZGVwZW5kcyBvbiBDTUFcbm1tL0tjb25maWctMTA4NC1cdGRlZmF1bHQgMjAgaWYgTlVNQVxuLS1cbm1tL0tjb25maWc9MTEyOD1jb25maWcgTUVNX1NPRlRfRElSVFlcbm1tL0tjb25maWctMTEyOS1cdGJvb2wgXCYjMzQ7VHJhY2sgbWVtb3J5IGNoYW5nZXNcJiMzNDtcbm1tL0tjb25maWc6MTEzMDpcdGRlcGVuZHMgb24gQ0hFQ0tQT0lOVF9SRVNUT1JFIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfU09GVF9ESVJUWSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubW0vS2NvbmZpZy0xMTMxLVx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4tLVxubW0vS2NvbmZpZz0xMTQzPWNvbmZpZyBTVEFDS19NQVhfREVGQVVMVF9TSVpFX01CXG4tLVxubW0vS2NvbmZpZy0xMTQ2LVx0cmFuZ2UgOCAyMDQ4XG5tbS9LY29uZmlnOjExNDc6XHRkZXBlbmRzIG9uIFNUQUNLX0dST1dTVVAgXHUwMDI2XHUwMDI2ICghNjRCSVQgfHwgQ09NUEFUKVxubW0vS2NvbmZpZy0xMTQ4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTE1NT1jb25maWcgREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVFxubW0vS2NvbmZpZy0xMTU2LVx0Ym9vbCBcJiMzNDtEZWZlciBpbml0aWFsaXNhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8ga3RocmVhZHNcJiMzNDtcbm1tL0tjb25maWc6MTE1NzpcdGRlcGVuZHMgb24gU1BBUlNFTUVNXG5tbS9LY29uZmlnOjExNTg6XHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cbm1tL0tjb25maWc6MTE1OTpcdGRlcGVuZHMgb24gNjRCSVRcbm1tL0tjb25maWc6MTE2MDpcdGRlcGVuZHMgb24gIUtNU0FOXG5tbS9LY29uZmlnLTExNjEtXHRzZWxlY3QgUEFEQVRBXG4tLVxubW0vS2NvbmZpZz0xMTc5PWNvbmZpZyBJRExFX1BBR0VfVFJBQ0tJTkdcbm1tL0tjb25maWctMTE4MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGlkbGUgcGFnZSB0cmFja2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxMTgxOlx0ZGVwZW5kcyBvbiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnLTExODItXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbi0tXG5tbS9LY29uZmlnPTEyMTc9Y29uZmlnIFpPTkVfRE1BMzJcbm1tL0tjb25maWctMTIxOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEzMiB6b25lXCYjMzQ7IGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxubW0vS2NvbmZpZzoxMjE5Olx0ZGVwZW5kcyBvbiAhWDg2XzMyXG5tbS9LY29uZmlnLTEyMjAtXHRkZWZhdWx0IHkgaWYgQVJNNjRcbi0tXG5tbS9LY29uZmlnPTEyMjI9Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjMtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbm1tL0tjb25maWc6MTIyNDpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy0xMjI1LVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuLS1cbm1tL0tjb25maWc9MTI0ND1jb25maWcgSE1NX01JUlJPUlxubW0vS2NvbmZpZy0xMjQ1LVx0Ym9vbFxubW0vS2NvbmZpZzoxMjQ2Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctMTI0Ny1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5tbS9LY29uZmlnPTEyNTI9Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTMtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xubW0vS2NvbmZpZzoxMjU0Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjU1LVx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWc9MTI5MT1jb25maWcgR1VQX1RFU1Rcbm1tL0tjb25maWctMTI5Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0c1wmIzM0O1xubW0vS2NvbmZpZzoxMjkzOlx0ZGVwZW5kcyBvbiBERUJVR19GU1xubW0vS2NvbmZpZy0xMjk0LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTMxMT1jb21tZW50IFwmIzM0O0dVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZFwmIzM0O1xubW0vS2NvbmZpZzoxMzEyOlx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXHUwMDI2XHUwMDI2ICFERUJVR19GU1xubW0vS2NvbmZpZy0xMzEzLVxuLS1cbm1tL0tjb25maWc9MTMxNz1jb25maWcgRE1BUE9PTF9URVNUXG5tbS9LY29uZmlnLTEzMTgtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgYSBtb2R1bGUgdG8gcnVuIHRpbWUgdGVzdHMgb24gZG1hX3Bvb2xcJiMzNDtcbm1tL0tjb25maWc6MTMxOTpcdGRlcGVuZHMgb24gSEFTX0RNQVxubW0vS2NvbmZpZy0xMzIwLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTM0MT1jb25maWcgU0VDUkVUTUVNXG4tLVxubW0vS2NvbmZpZy0xMzQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtZmRfc2VjcmV0KCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG5tbS9LY29uZmlnOjEzNDQ6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQXG5tbS9LY29uZmlnLTEzNDUtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMzUwPWNvbmZpZyBBTk9OX1ZNQV9OQU1FXG5tbS9LY29uZmlnLTEzNTEtXHRib29sIFwmIzM0O0Fub255bW91cyBWTUEgbmFtZSBzdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjEzNTI6XHRkZXBlbmRzIG9uIFBST0NfRlMgXHUwMDI2XHUwMDI2IEFEVklTRV9TWVNDQUxMUyBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnLTEzNTMtXG4tLVxubW0vS2NvbmZpZz0xMzc0PWNvbmZpZyBVU0VSRkFVTFRGRF9SV1Bcbm1tL0tjb25maWctMTM3NS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTM3NjpcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG5tbS9LY29uZmlnLTEzNzctXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMzgzPW1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM4NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbm1tL0tjb25maWc6MTM4NTpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTEzODYtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMzkwPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTItXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6MTM5MzpcdGRlcGVuZHMgb24gVVNFUkZBVUxURkQgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxubW0vS2NvbmZpZy0xMzk0LVxuLS1cbm1tL0tjb25maWc9MTQwMT1jb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDAyLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG5tbS9LY29uZmlnOjE0MDM6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy0xNDA0LVx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG5tbS9LY29uZmlnOjE0MDU6XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctMTQwNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0MTA9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDExLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xubW0vS2NvbmZpZzoxNDEyOlx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MTMtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDE2PWNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxNDE4Olx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MTktXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDI1PWNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI2LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDI3Olx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbm1tL0tjb25maWctMTQyOC0jIH1cbi0tXG5tbS9LY29uZmlnPTE0MzM9Y29uZmlnIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDM1Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbm1tL0tjb25maWctMTQzNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0NDI9Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG5tbS9LY29uZmlnLTE0NDMtXHRib29sXG5tbS9LY29uZmlnOjE0NDQ6XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG5tbS9LY29uZmlnLTE0NDUtXG4tLVxubW0vS2NvbmZpZz0xNDU1PWNvbmZpZyBOVU1BX0VNVVxubW0vS2NvbmZpZy0xNDU2LVx0Ym9vbCBcJiMzNDtOVU1BIGVtdWxhdGlvblwmIzM0O1xubW0vS2NvbmZpZzoxNDU3Olx0ZGVwZW5kcyBvbiBOVU1BX01FTUJMS1Ncbm1tL0tjb25maWc6MTQ1ODpcdGRlcGVuZHMgb24gWDg2IHx8IEdFTkVSSUNfQVJDSF9OVU1BXG5tbS9LY29uZmlnLTE0NTktXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDczPWNvbmZpZyBQVF9SRUNMQUlNXG5tbS9LY29uZmlnLTE0NzQtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE0NzU6XHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxubW0vS2NvbmZpZy0xNDc2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTQ5Mj1jb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG5tbS9LY29uZmlnLTE0OTMtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGhlIGxhenkgTU1VIG1vZGVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vS2NvbmZpZzoxNDk0Olx0ZGVwZW5kcyBvbiBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5tbS9LY29uZmlnOjE0OTU6XHRkZXBlbmRzIG9uIEtVTklUXG5tbS9LY29uZmlnLTE0OTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBUSFAgYW5kIE1FTUNHIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGNvbmZpZ3VyZWQuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0cyBhdmFpbGFiaWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBib3RoIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCB0aGUgYWJzZW5jZSBvZiBgUFJFRU1QVF9SVGAuIFRoZXJlZm9yZSwgd2hlbiBkb2N1bWVudGluZyB0aGVzZSwgSSBzaG91bGQganVzdCBsaXN0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AuIFdhaXQgYSBtaW51dGUsIHdoZXJlIGlzIGBNRU1DR2AgZGVmaW5lZD8gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2AuIEkgc2hvdWxkIGdvIGNoZWNrIHRoYXQgZmlsZSB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODMtXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNi1cbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDgtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIEZ1bmN0aW9uIFNlbGVjdGlvbiBmb3IgdG1wZnMvc2htZW0gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBiZXN0IGZvY3VzIGZ1bmN0aW9ucyBmb3IgdGhpcyB0bXBmcy9zaG1lbSBjaGFuZ2UsIGNvbnNpZGVyaW5nIGBNRU1DR2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRmlyc3QsIEkgcnVsZWQgb3V0IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIHF1aWNrbHksIGRlc3BpdGUgdGhlaXIgQVBJIGVudHJ5IHBvaW50IHN0YXR1cy4gIGBzaG1lbV9nZXRfZm9saW9gIGlzIGEgaG90IHBhdGg7IGl0JiMzOTtzIGNhbGxlZCB2ZXJ5IGZyZXF1ZW50bHkgd2hpY2ggY291bGQgc2tldyB0aGUgcmVzdWx0cywgd2hpY2ggaXMgdW5kZXNpcmFibGUuIFdlIHdhbnQgYSBtb3JlIHRhcmdldGVkIHRlc3QuCgpUaGVuLCBJIGxvb2tlZCBhdCBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCwgYnV0IGl0JiMzOTtzIHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgZnVuY3Rpb25zLCBidXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgb25seSBhIHByb2JsZW0gaWYgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIE5PVCBpbmxpbmVkLCB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBhbmQgKmNhbiogYmUgdXNlZC4gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIHN0YXRpYywgYnV0IGlzIGFzc2lnbmVkIHRvIGBzaG1lbV9vcHMuZnJlZV9jYWNoZWRfb2JqZWN0c2AsIHNvIGl04oCZcyBsaWtlbHkgbm90IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIG1ha2VzIGl0IHByb21pc2luZy4gQW5kIHllcywgaXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpZWQgbG9naWMmIzM5O3MgZW50cnkgcG9pbnQgaXMgZXhhY3RseSBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBhIHN0cm9uZyBjb250ZW5kZXIuIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuCgpJIHJldmlld2VkIHRoZSBvdGhlciBmdW5jdGlvbnMsIGJ1dCBmb3VuZCB0aGF0IGBzaG1lbV9ldmljdF9pbm9kZWAsIGFuZCBgc2htZW1fZmlsbF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBidXQgY2FsbGVkIGluZGlyZWN0bHkgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGRhdGEgc3RydWN0dXJlcy4gU28sIHRoZXNlIGFyZSBhbHNvIG5vdCBpbmxpbmVkLgoKVGhlIGJlc3QgZm9jdXMgZnVuY3Rpb25zLCBJJiMzOTt2ZSBjb25jbHVkZWQsIGFyZSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIFRoZXkmIzM5O3JlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHNocmlua2VyIGxvZ2ljIG1vZGlmaWNhdGlvbnMuCgpGaW5hbGx5LCBJIGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBzaG1lbV9nZXRfZm9saW9gIGFzIGl0IGlzIGFuIGVudHJ5IHBvaW50LCBhbmQgdGhlIGFsbG9jYXRpb24gcGF0aCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hyaW5rbGlzdDoKYGBgYwoJaWYgKGFsbG9jZWQgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7CgkgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSAmbHQ7IGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7CgkJLyoKCQkgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0CgkJICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KCQkgKi8KCQlzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApOwoJfQpgYGAKSG93ZXZlciwgdGhlIGFsbG9jYXRpb24gb2YgZm9saW9zIHRvIHRoZSBzaHJpbmtsaXN0IG9ubHkgb2NjdXJzIGZvciBodWdlIGZvbGlvcyBvbiB0bXBmcywgc28gaXQmIzM5O3Mgbm90IGEgZ2VuZXJhbCBob3QgcGF0aC4gVGhlIGZ1bmN0aW9uIGBzaG1lbV9nZXRfZm9saW9gIGl0c2VsZiwgaG93ZXZlciwgaXMgY2FsbGVkIG9uIEFMTCBwYWdlIGZhdWx0cy4gV2hpbGUgYHNobWVtX2dldF9mb2xpb2Agd291bGQgaGl0IHRoYXQgYWxsb2NhdGlvbiBwYXRoIGFuZCBiZSByZWxldmFudCwgaXQmIzM5O3MgYSB2ZXJ5IGhvdCBwYXRoLCBzbyBJJiMzOTtsbCBzdGljayB3aXRoIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBmb3Igbm93LCB0byBlbnN1cmUgc3BlY2lmaWNpdHkuIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgc2htZW1fZXZpY3RfaW5vZGVgIGFzIGl0IGNhbGxzIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLiBJIGp1c3QgY2hlY2tlZCB0aGF0IEkgc3BlbGxlZCBhbGwgdGhlIGZ1bmN0aW9uIG5hbWVzIGNvcnJlY3RseS4uLiBZZXMsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBpdCBpcy4KClRoZSBwYXRjaCBhbHNvIHNwZWNpZmllcyB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTUNHYCBhcmUgdXNlZCwgYnV0IGBDT05GSUdfU0hNRU1gIGlzIHVzdWFsbHkgZW5hYmxlZCBzbyBubyBuZWVkIHRvIHZlcmlmeSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5NDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsaXphdGlvbiBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFNITUVNYCBpcyBhIHByZXR0eSBzcGVjaWZpYyB0ZXJtIHRoYXQgc2hvdWxkIHlpZWxkIHJlbGV2YW50IHJlc3VsdHMgaWYgSSB1c2UgaXQgYXMgYSBzZWFyY2ggdGVybS4gTXkgYWltIGlzIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgaG93IHNoYXJlZCBtZW1vcnkgaXMgY29uZmlndXJlZCwgY29udHJvbGxlZCBhbmQgc3VwcG9ydGVkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBzeW1ib2xzIGFyZSBzbyB0aGF0IEkgY2FuIHRoZW4gdHJhY2UgdGhlaXIgZGVwZW5kZW5jeSB0cmVlcywgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgc2V0dGluZ3MuIExldCYjMzk7cyBzZWUgd2hhdCBgaW5pdC9LY29uZmlnYCByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTSE1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkzMT1jb25maWcgRVZFTlRGRFxuLS1cbmluaXQvS2NvbmZpZy0xOTM5LVxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIFNITUVNXG5pbml0L0tjb25maWctMTk0MS1cdGJvb2wgXCYjMzQ7VXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2hhcmVkIE1lbW9yeSBIdWdlIFBhZ2UgU2hyaW5rZXIgUGF0Y2gqKgoKT2theSwgc28gYFNITUVNYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYWNjb3JkaW5nIHRvIGBpbml0L0tjb25maWdgLCB3aGljaCBpcyBnb29kIG5ld3MuIEFuZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgYWxsIGJlaW5nIGVuYWJsZWQgdG9vLCB0aGluZ3MgYXJlIGxvb2tpbmcgcHJvbWlzaW5nLgoKTGV0JiMzOTtzIGRpdmUgYmFjayBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG1vdmluZyB0aGUgc2hyaW5rZXIgZnJvbSBhIGdsb2JhbCBsaXN0IHRvIGEgcGVyLW1lbWNnIGBsaXN0X2xydWAuIFRoZSB3YXkgaXQgdXNlcyBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCBpcyBjaGFuZ2luZyB0byB1c2UgYGxpc3RfbHJ1X3Nocmlua193YWxrYCBhbmQgYGxpc3RfbHJ1X3dhbGtgLiBUaGVyZSYjMzk7cyBhIHdob2xlIHN1aXRlIG9mIG5ldyBmdW5jdGlvbnMgYWRkZWQ6IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIHdoaWNoIGFyZSBhbGwgcGFydCBvZiB0aGF0IG5ldyBgbGlzdF9scnVgIGJhc2VkIHNocmlua2VyIGltcGxlbWVudGF0aW9uLgoKSXQgYWxzbyBhcHBlYXJzIHRoYXQgYHNobWVtX3NiX2luZm9gIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgc3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3RgIGluc3RlYWQgb2YgdGhlIG9sZCBgc3RydWN0IGxpc3RfaGVhZCBzaHJpbmtsaXN0YC4gU2ltaWxhcmx5LCBgc2htZW1faW5vZGVfaW5mb2AgaXMgbm93IGluY2x1ZGluZyBgc2hyaW5rbGlzdF9tZW1jZ2AgYW5kIGBzaHJpbmtsaXN0X25pZGAuCgpUaGUgbG9naWMgKmxvb2tzKiBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgcmVhY2hhYmxlLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2V2aWN0X2lub2RlYCwgYW5kIGBzaG1lbV9maWxsX3N1cGVyYC4gSGFuZyBvbiBhIHNlY29uZC4uLiBgc2htZW1fZXZpY3RfaW5vZGVgIGFuZCBgc2htZW1fZmlsbF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBidXQgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLiBJbnRlcmVzdGluZy4gQXJlIHRoZXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zPyBZZXMsIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBub24tc3RhdGljLiBCdXQsIEkgdGhpbmsgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBpbmNsdWRlIHdpbGwgYmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIHNpbmNlIHRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBtb2RpZmllZCBzaHJpbmtlciBsb2dpYy4KCk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgaXNuJiMzOTt0IGRlZmluZWQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9zaG1lbS5jLTgyOS1cbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcbm1tL3NobWVtLmMtODMxLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbm1tL3NobWVtLmM9ODM1PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuLS1cbm1tL3NobWVtLmMtODM4LXtcbm1tL3NobWVtLmM6ODM5Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XG5tbS9zaG1lbS5jLTg0MC1cdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuLS1cbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuLS1cbm1tL3NobWVtLmMtOTMzLXtcbm1tL3NobWVtLmM6OTM0Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2Nhbjtcbm1tL3NobWVtLmMtOTM1LVx0c3RydWN0IGlub2RlICppbm9kZTtcbi0tXG5tbS9zaG1lbS5jLTEwMjAtXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxubW0vc2htZW0uYy0xMDIyLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3NobWVtLmM9NTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTQyNi1cdC5ucl9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcbm1tL3NobWVtLmM6NTQyNzpcdC5mcmVlX2NhY2hlZF9vYmplY3RzXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXG5tbS9zaG1lbS5jLTU0MjgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIHRoZSBDb21waWxhdGlvbiBDb250ZXh0KioKCkhtbSwgc28gSSYjMzk7dmUgc3BvdHRlZCBhIGNydWNpYWwgZGV0YWlsIGhlcmU6IHRoYXQgYCNlbmRpZmAgcmlnaHQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQgdG8gYGZyZWVfY2FjaGVkX29iamVjdHNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKmFmdGVyKiB0aGUgYXNzaWdubWVudCBpcyBpbXBvcnRhbnQsIGFzIGl0IHN1Z2dlc3RzIHRoZSBkZWZpbml0aW9uIG9yIGFzc2lnbm1lbnQgbWlnaHQgb25seSBiZSBwcmVzZW50IHVuZGVyIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHBpcXVlZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiBwbGF5LiBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBjaGVjayBwcmVjaXNlbHkgd2hpY2ggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBzdXJyb3VuZCB0aGUgZGVmaW5pdGlvbiBvZiBgc2htZW1fb3BzYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgc2VlbXMgdG8gY29udHJvbCB3aGV0aGVyIGBmcmVlX2NhY2hlZF9vYmplY3RzYCBpcyBhc3NpZ25lZCB0byBhIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZSBgI2lmZGVmYHMgYXJlIHRoZSBrZXkuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgcmV2ZWFsIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0yNTQ9c3RhdGljIHZvaWQgc2htZW1faW5vZGVfdW5hY2N0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHBhZ2VzKVxuLS1cbm1tL3NobWVtLmMtMjY2LVxubW0vc2htZW0uYzoyNjc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcztcbm1tL3NobWVtLmMtMjY4LXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHM7XG4tLVxubW0vc2htZW0uYz01MTI1PXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy01MjEyLVx0c2ItXHUwMDNlc19tYWdpYyA9IFRNUEZTX01BR0lDO1xubW0vc2htZW0uYzo1MjEzOlx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnNobWVtX29wcztcbm1tL3NobWVtLmMtNTIxNC1cdHNiLVx1MDAzZXNfdGltZV9ncmFuID0gMTtcbi0tXG5tbS9zaG1lbS5jPTU0MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5tbS9zaG1lbS5jLTU0MTAtXG5tbS9zaG1lbS5jOjU0MTE6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbm1tL3NobWVtLmMtNTQxMi1cdC5hbGxvY19pbm9kZVx0PSBzaG1lbV9hbGxvY19pbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBtbS9zaG1lbS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NDExLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoYXQgcG9pbnQgaW4gdGhlIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgYXJlYSB0byBiZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBwZXJoYXBzIHNvbWUgc29ydCBvZiBtZXRhZGF0YSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zIOKAkyBjb3VsZCBiZSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBiZWluZyB1c2VkLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSBjYWNoZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IHJldmVhbHMuIEkgYW50aWNpcGF0ZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgd2lsbCBwcm92aWRlIHRoZSBrZXkgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDExOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbjU0MTI6XHRcdC5hbGxvY19pbm9kZVx0PSBzaG1lbV9hbGxvY19pbm9kZSxcbjU0MTM6XHRcdC5mcmVlX2lub2RlXHQ9IHNobWVtX2ZyZWVfaW5fY29yZV9pbm9kZSxcbjU0MTQ6XHRcdC5kZXN0cm95X2lub2RlXHQ9IHNobWVtX2Rlc3Ryb3lfaW5vZGUsXG41NDE1Olx0I2lmZGVmIENPTkZJR19UTVBGU1xuNTQxNjpcdFx0LnN0YXRmc1x0XHQ9IHNobWVtX3N0YXRmcyxcbjU0MTc6XHRcdC5zaG93X29wdGlvbnNcdD0gc2htZW1fc2hvd19vcHRpb25zLFxuNTQxODpcdCNlbmRpZlxuNTQxOTpcdCNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbjU0MjA6XHRcdC5nZXRfZHF1b3RzXHQ9IHNobWVtX2dldF9kcXVvdHMsXG41NDIxOlx0I2VuZGlmXG41NDIyOlx0XHQuZXZpY3RfaW5vZGVcdD0gc2htZW1fZXZpY3RfaW5vZGUsXG41NDIzOlx0XHQuZHJvcF9pbm9kZVx0PSBpbm9kZV9qdXN0X2Ryb3AsXG41NDI0Olx0XHQucHV0X3N1cGVyXHQ9IHNobWVtX3B1dF9zdXBlcixcbjU0MjU6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG41NDI2Olx0XHQubnJfY2FjaGVkX29iamVjdHNcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXG41NDI3Olx0XHQuZnJlZV9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9zY2FuLFxuNTQyODpcdCNlbmRpZlxuNTQyOTpcdH07XG41NDMwOlx0XG41NDMxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHMgPSB7XG41NDMyOlx0XHQuZmF1bHRcdFx0PSBzaG1lbV9mYXVsdCxcbjU0MzM6XHRcdC5tYXBfcGFnZXNcdD0gZmlsZW1hcF9tYXBfcGFnZXMsXG41NDM0Olx0I2lmZGVmIENPTkZJR19OVU1BXG41NDM1Olx0XHQuc2V0X3BvbGljeSAgICAgPSBzaG1lbV9zZXRfcG9saWN5LFxuNTQzNjpcdFx0LmdldF9wb2xpY3kgICAgID0gc2htZW1fZ2V0X3BvbGljeSxcbjU0Mzc6XHQjZW5kaWZcbjU0Mzg6XHQjaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXG41NDM5Olx0XHQudWZmZF9vcHNcdD0gXHUwMDI2c2htZW1fdWZmZF9vcHMsXG41NDQwOlx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVucGFja2luZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBhbmQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLi4uIEkgc2VlIHRoZXkmIzM5O3JlIG9ubHkgKmFjdHVhbGx5KiBhc3NpZ25lZCBhIHZhbHVlIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXMgZXhwZWN0ZWQuIFRoZXkmIzM5O3JlIHBhcnQgb2YgdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZSBtYWNoaW5lcnksIHNvIHRoYXQgbWFrZXMgc2Vuc2UuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhleSBldmVuICpkZWZpbmVkKiB3aGVuIFRIUCBpcyAqZGlzYWJsZWQqPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlbiYjMzk7dCBzb21laG93IHBvbGx1dGluZyB0aGUgbmFtZXNwYWNlIHdoZW4gdGhleSBzaG91bGRuJiMzOTt0IGJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYCNpZmRlZmAgY29uZGl0aW9ucyBhcm91bmQgdGhlaXIgZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGJlaGF2aW5nIGFzIGl0IHNob3VsZCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYSBxdWljayBjaGVjayBzaG91bGQgc2V0dGxlIGl0LiBHb3R0YSBiZSBjYXJlZnVsIHdpdGggdGhlc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdH1cbjEwMzE6XHRcbjEwMzI6XHRzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuMTAzMzpcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuMTAzNDpcdHtcbjEwMzU6XHRcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XG4xMDM2Olx0XG4xMDM3Olx0XHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyk7XG4xMDM4Olx0fVxuMTAzOTpcdCNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbjEwNDA6XHRcbjEwNDE6XHQjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXG4xMDQyOlx0XG4xMDQzOlx0c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4xMDQ0Olx0XHRcdFx0XHQgIGdmcF90IGdmcClcbjEwNDU6XHR7XG4xMDQ2Olx0fVxuMTA0NzpcdFxuMTA0ODpcdHN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMTA0OTpcdHtcbjEwNTA6XHR9XG4xMDUxOlx0XG4xMDUyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4xMDUzOlx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbjEwNTQ6XHR7XG4xMDU1Olx0XHRyZXR1cm4gMDtcbjEwNTY6XHR9XG4xMDU3Olx0XG4xMDU4Olx0c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4xMDU5Olx0XHRcdFx0XHRcdCAgICAgIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIdWdlcGFnZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGl0JiMzOTtzIGJlY29tZSBjbGVhcjogaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKmRpc2FibGVkKiwgdGhlc2UgZWxlbWVudHMsIHdoYXRldmVyIHRoZXkgYXJlLCBhcmVuJiMzOTt0IGV2ZW4gZGVmaW5lZC4gVGhhdCBtZWFucyB0aGVpciB2ZXJ5IGV4aXN0ZW5jZSBoaW5nZXMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gTm8gYW1iaWd1aXR5IHRoZXJlLiBJdCBkZWZpbml0aXZlbHkgZXN0YWJsaXNoZXMgdGhhdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhIG1hbmRhdG9yeSBwcmVyZXF1aXNpdGUuCgpOb3csIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgQ09ORklHX01FTUNHYCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZXBhZ2UgY29uZmlndXJhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vc2htZW0uY2AgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZztcbiA3NDE6XHRcbiA3NDI6XHRcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XG4gNzQzOlx0XG4gNzQ0Olx0XHRyZXR1cm4gbWVtY2c7XG4gNzQ1Olx0fVxuIDc0NjpcdFxuIDc0NzpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbiA3NDg6XHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuIDc0OTpcdHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIDc1MDpcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4gNzUxOlx0e1xuIDc1MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDc1MzpcdFx0aW50IHJldDtcbiA3NTQ6XHRcbiA3NTU6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gNzU2Olx0XHRpZiAoIW1lbWNnKVxuIDc1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA3NTg6XHRcbiA3NTk6XHRcdHJldCA9IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgZ2ZwKTtcbiA3NjA6XHRcdGlmIChyZXQpIHtcbiA3NjE6XHRcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIDc2MjpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDc2MzpcdFx0fVxuIDc2NDpcdFxuIDc2NTpcdFx0cmV0dXJuIG1lbWNnO1xuIDc2NjpcdH1cbiA3Njc6XHQjZWxzZVxuIDc2ODpcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4gNzY5Olx0c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDg1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBUZXN0aW5nIE1lbWNnLVNwZWNpZmljIFNocmlua2VyIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG5ldyBzaHJpbmtlciBpcyBkZXNpZ25lZCB0byB3b3JrIG9uIGEgcGVyLW1lbWNnIGJhc2lzLiBUaGF0IG1lYW5zIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsIGZvciB0ZXN0aW5nIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgYmVjYXVzZSwgaWYgaXQmIzM5O3MgZGlzYWJsZWQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgcmV0dXJuIE5VTEwgYW5kIHRoZSBjb2RlIHdpbGwgZmFsbCBiYWNrIHRvIGEgZ2xvYmFsIG9wZXJhdGlvbi4gIFdlIHdvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIHZhbGlkYXRlIHRoZSBwZXItbWVtY2cgYmVoYXZpb3IgYXQgYWxsIHdpdGhvdXQgYENPTkZJR19NRU1DR2AgZW5hYmxlZC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlIG5lZWQgYW55dGhpbmcgKmVsc2UqLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDT05GSUdfVE1QRlNgLCBidXQgdGhhdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBDT05GSUdfU0hNRU1gIGlzIHJlcXVpcmVkLiBJIGtub3cgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGRlZmluZWQgaW4gYG1tL3NobWVtLmNgLgoKQWhhISBOb3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgbW0vc2htZW0uY2AgZXZlbiAqY29tcGlsZWQqIGlmIGBDT05GSUdfU0hNRU1gIGlzIGRpc2FibGVkPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG1tL3NobWVtLmNgIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGJpdC4gSWYgaXQmIzM5O3Mgbm90IGNvbXBpbGVkIHdpdGhvdXQgYENPTkZJR19TSE1FTWAsIHRoZW4gdGhhdCYjMzk7cyBhbm90aGVyIHByZXJlcXVpc2l0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01My1cdFx0XHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxubW0vTWFrZWZpbGU6NTQ6XHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxubW0vTWFrZWZpbGUtNTUtXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbi0tXG5tbS9NYWtlZmlsZT0xNDY9b2JqLSQoQ09ORklHX0VYRUNNRU0pICYjNDM7PSBleGVjbWVtLm9cbm1tL01ha2VmaWxlOjE0NzpvYmotJChDT05GSUdfVE1QRlNfUVVPVEEpICYjNDM7PSBzaG1lbV9xdW90YS5vXG5tbS9NYWtlZmlsZS0xNDgtb2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgJiM0Mzs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBzaG1lbS5vYCoqCgpPa2F5LCBzbyBgc2htZW0ub2AgaXMgY29uc2lzdGVudGx5IGJlaW5nIGNvbXBpbGVkLCBkZWNsYXJlZCBhcyBgb2JqLXlgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLiBCdXQgaG9sZCBvbiwgc29tZXRoaW5nIHNlZW1zIG9mZi4gRXZlbiB3aGVuIGBDT05GSUdfU0hNRU1gIGlzICpkaXNhYmxlZCosIEkmIzM5O20gc2VlaW5nIGBtbS9zaG1lbS5jYCBzdGlsbCBiZWluZyBjb21waWxlZC4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHdoeS4KClRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgbW0vc2htZW0uY2AuIEkgbmVlZCB0byBzZWFyY2ggdGhpcyBmaWxlIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBDT05GSUdfU0hNRU1gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBzb21lIG90aGVyIG1lY2hhbmlzbSB0byBleHBsYWluIHdoeSB0aGUgc2htZW0gZmlsZSBpcyBiZWluZyBpbmNsdWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9NTg5Nj1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01ODk5LVxubW0vc2htZW0uYzo1OTAwOiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTkwMS1cbi0tXG5tbS9zaG1lbS5jPTU5Njk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU5NzYtXG5tbS9zaG1lbS5jOjU5Nzc6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01OTc4LVxuLS1cbm1tL3NobWVtLmM9NjEzMT1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNjEzMy17XG5tbS9zaG1lbS5jOjYxMzQ6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy02MTM1LVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUTVBGUy9TSE1FTSBTaHJpbmtlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBDT05GSUdfU0hNRU1gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bGwgdG1wZnMgaW1wbGVtZW50YXRpb24g4oCTIGEgdGlueSBzaG1lbSBpbXBsZW1lbnRhdGlvbiBnZXRzIHVzZWQgb3RoZXJ3aXNlLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIGZvY3VzIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBzZWUsIHdlJiMzOTt2ZSBnb3QgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTUNHYCwgYW5kIGBTSE1FTWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gU3l6a2FsbGVyIHdpbGwgbGlrZWx5IGhhbmRsZSBlbmFibGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTYCBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIGdpdmVuIHRoZSBgbW0vS2NvbmZpZ2Agc3RydWN0dXJlLgoKTm93LCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4uLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2dldF9mb2xpb2AsIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgLiBCdXQsIHNpbmNlIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSB1bmNoYW5nZWQsIHRoZSByZWFsIGltcGFjdCBzZWVtcyB0byBiZSBvbiBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAuIEkga25vdyB0aGlzIGlzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgd2FudCB0byBhdm9pZC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIg4oCTIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGUgc2hyaW5rZXIgbG9naWMgYXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGEgdmFsaWQgc3ltYm9sIGluIGBtbS9zaG1lbS5jYC4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBpdCBhbiBpZGVhbCB0YXJnZXQuIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAgaXMgYWxzbyByZWxldmFudC4KCkxvb2tpbmcgZnVydGhlciwgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgaXMgY2FsbGVkIGJ5IHRoZXNlLCBzbyBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgaXMgdGhlIHdheSB0byBnby4KCk5leHQsIEkgbm90ZWQgdGhhdCBgc2htZW1fZXZpY3RfaW5vZGVgIGlzIG1vZGlmaWVkIHRvIGNhbGwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGFuZCBpdCYjMzk7cyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdGhyb3VnaCBgc2htZW1fb3BzLmV2aWN0X2lub2RlYC4gVGhhdCBtYWtlcyBpdCBhbm90aGVyIGV4Y2VsbGVudCBmb2N1cyBmdW5jdGlvbiBhcyBpdCBpcyBub3QgaW5saW5lZC4KCkZpbmFsbHksIGBzaG1lbV9maWxsX3N1cGVyYCBpcyBtb2RpZmllZCB0byBpbml0aWFsaXplIHRoZSBgbGlzdF9scnVgLCBhbmQsIGxpa2UgYHNobWVtX2V2aWN0X2lub2RlYCwgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gSSYjMzk7bGwgYWRkIHRoaXMgdG8gdGhlIGxpc3QuCgpTbywgaGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6CiogICBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAKKiAgIGBzaG1lbV9ldmljdF9pbm9kZWAKKiAgIGBzaG1lbV9maWxsX3N1cGVyYAoKQW5kIHRoZSBjb25maWd1cmF0aW9uczoKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBNRU1DR2AKKiAgIGBTSE1FTWAKCkkmIzM5O3ZlIHZlcmlmaWVkIHRoZSBkZXBlbmRlbmNpZXM6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgbmVlZHMgYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUYCwgd2hpY2ggaXMgZmluZSwgc3l6a2FsbGVyIHdpbGwgZW5hYmxlIHRoYXQgaWYgaXQgY2FuLiBgTUVNQ0dgIGFuZCBgU0hNRU1gIGhhdmUgbm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBpbnRlZ3JhdGluZyBhIHBlci1tZW1jZyBgbGlzdF9scnVgIGludG8gdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIuIEl0IGFmZmVjdHMgc2hyaW5rZXIgZW50cnkgcG9pbnRzLCBpbm9kZSBldmljdGlvbiwgYW5kIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gZnV6eiwgZXNwZWNpYWxseSB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBtYWtlIHN1cmUgc3l6a2FsbGVyIHRhcmdldHMgdGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NTA9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTUtXG5tbS9LY29uZmlnOjg1NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODU3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBUTVBGUyBhbmQgSHVnZSBQYWdlcyBmb3IgT3B0aW1hbCBNZW1vcnkgTWFuYWdlbWVudCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBjb25zY2lvdXMgZGVjaXNpb24gcG9pbnQgaGVyZS4gSXQmIzM5O3MgYSBjaG9pY2U6IGRvIHdlIGxldmVyYWdlIGh1Z2UgcGFnZXMgZm9yIG91ciB0ZW1wb3JhcnkgZmlsZSBzeXN0ZW1zPyBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQganVtcHMgdG8gbWluZCBpcywgKmNhbiogd2UsIGFuZCBpZiBzbywgKmhvdyogZG8gd2UgZG8gaXQ/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGB0bXBmc2AgYW5kIGh1Z2UgcGFnZXMuIFRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQuCgpOb3csIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIG1vc3QgcmVsZXZhbnQgaGVyZT8gRG8gd2UgbmVlZCB0byBmb3JjZSB0aGlzIGJlaGF2aW91ciBhY3Jvc3MgdGhlIGJvYXJkLCBvciBjYW4gd2UgZG8gdGhpcyBtb3JlIHN1cmdpY2FsbHk/IExldCYjMzk7cyBxdWlja2x5IHJlZnJlc2guIERvIHdlIGdvIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU2AgdG8gZ3VhcmFudGVlIHRoYXQgdG1wZnMgZ2V0cyB0byB1c2UgaHVnZSBwYWdlcywgb3IgZG8gd2UgdXNlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNgIHRvIGZvY3VzIG9uIHRoZSBzaGFyZWQgbWVtb3J5IHNpZGUgb2YgdGhpbmdzPyBCb3RoIG9wdGlvbnMgaGF2ZSB0aGVpciBpbXBsaWNhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgd29ya2xvYWQgYW5kIGhvdyBgdG1wZnNgIGlzIHVzZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gTmVlZCB0byBjb25zaWRlciB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5OC1cbm1tL0tjb25maWc6ODk5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxMjIKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgQXBwcm9hY2ggdG8gU3l6a2FsbGVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIFN5emthbGxlciYjMzk7cyBwcm9iYWJseSBnb2luZyB0byBlbmFibGUgdGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgc29vbiwgd2hpY2ggaXMgZmluZSwgYnV0IEkgdGhpbmsgSSYjMzk7bGwganVzdCBnbyBhaGVhZCBhbmQgZXhwbGljaXRseSBzcGVjaWZ5IHdoYXQgSSBuZWVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcm91bmQgb2YgdGVzdGluZy4gSXQmIzM5O2xsIGdpdmUgbWUgbW9yZSBjb250cm9sIGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIHRob3NlIGRlZmF1bHRzLCBldmVuIGlmIGl0IGlzIGEgYml0IG1vcmUgd29yayB1cGZyb250LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBmb2N1cyBvbiBzZXR0aW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGJlY2F1c2UgdGhhdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyBJIGhhdmUgaW4gbWluZC4gSSYjMzk7bGwgYWxzbyBicmluZyBpbiBgTUVNQ0dgIGZvciBpc29sYXRpbmcgdGhlIHJlc291cmNlcyBiZWluZyB1c2VkLCBhbmQgYFNITUVNYCB3aGljaCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O2xsIG5lZWQgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0IGNhc2UuCgpPbmNlIHRob3NlIGFyZSBzZXQgdXAsIEkmIzM5O2xsIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGRvIHdoYXQgSSBleHBlY3QgYW5kIGdldCB0aGUgcmVzdWx0cyB0cmFja2luZyBpbiB0aGUgd2F5IHRoYXQgSSB0aGluayBpcyBiZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2NvdW50JiMzNDssCiAgICAmIzM0O3NobWVtX2V2aWN0X2lub2RlJiMzNDssCiAgICAmIzM0O3NobWVtX2ZpbGxfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIgdG8gdXNlIGEgcGVyLW1lbWNnIGxpc3RfbHJ1IGluc3RlYWQgb2YgYSBnbG9iYWwgbGlzdC4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHNocmlua2VyIGVudHJ5IHBvaW50cyAoc2htZW1fdW51c2VkX2h1Z2Vfc2Nhbiwgc2htZW1fdW51c2VkX2h1Z2VfY291bnQpLCBpbm9kZSBldmljdGlvbiAoc2htZW1fZXZpY3RfaW5vZGUpLCBhbmQgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiAoc2htZW1fZmlsbF9zdXBlcikuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgd2hlbiB0bXBmcyBpcyB1c2VkIHdpdGggdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhbmQgbWVtb3J5IGNncm91cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2NhbiYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzaG1lbV9ldmljdF9pbm9kZSYjMzQ7LAogICAgJiMzNDtzaG1lbV9maWxsX3N1cGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0bXBmcy9zaG1lbSB1bnVzZWQgaHVnZSBwYWdlIHNocmlua2VyIHRvIHVzZSBhIHBlci1tZW1jZyBsaXN0X2xydSBpbnN0ZWFkIG9mIGEgZ2xvYmFsIGxpc3QuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzaHJpbmtlciBlbnRyeSBwb2ludHMgKHNobWVtX3VudXNlZF9odWdlX3NjYW4sIHNobWVtX3VudXNlZF9odWdlX2NvdW50KSwgaW5vZGUgZXZpY3Rpb24gKHNobWVtX2V2aWN0X2lub2RlKSwgYW5kIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24gKHNobWVtX2ZpbGxfc3VwZXIpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdoZW4gdG1wZnMgaXMgdXNlZCB3aXRoIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYW5kIG1lbW9yeSBjZ3JvdXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTQuNzE1ODYwMTU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1OTE0MDYyNTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fZXZpY3RfaW5vZGVcIixcbiAgICBcInNobWVtX2ZpbGxfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTQuNzE1ODY4Njk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjc1OTM2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMjk5ZTViZWY0NmU5YjA3YjAyOTJmY2FjNGUwZDgyOTgwNDgxY2I3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTc6NTg6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCA1ZmVlY2Y1ZDkwMzhkLi4zNmIyNDlmMDAyYTlhIDEwMDY0NFxcbi0tLSBhL2ZzL3N1cGVyLmNcXG4rKysgYi9mcy9zdXBlci5jXFxuQEAgLTE3MSwxOSArMTcxLDYgQEAgc3RhdGljIHZvaWQgc3VwZXJfd2FrZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZylcXG4gXFx0d2FrZV91cF92YXIoXFx1MDAyNnNiLVxcdTAwM2VzX2ZsYWdzKTtcXG4gfVxcbiBcXG4tLypcXG4tICogVGhlIHNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpXFxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cXHUwMDNlbWVtY2cuIERyaXZpbmcgdGhlbVxcbi0gKiBmcm9tIHBlci1tZW1jZyBzaHJpbmtfc2xhYl9tZW1jZygpIGludm9jYXRpb25zIG9ubHkgYnVybnMgQ1BVIHdhbGtpbmdcXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXFxuLSAqIHRoZSBnbG9iYWwgcGF0aCAoa3N3YXBkIG9yIHJvb3QgZGlyZWN0IHJlY2xhaW0pIHJlZ2FyZGxlc3MuIFJlc3RyaWN0IHRoZW1cXG4tICogdG8gdGhhdCBwYXRoLlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSBib29sIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4te1xcbi1cXHRyZXR1cm4gIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKTtcXG4tfVxcbi1cXG4gLypcXG4gICogT25lIHRoaW5nIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBvZiB3aXRoIGEgcGVyLXNiIHNocmlua2VyIGlzIHRoYXQgd2UgZG9uJ3RcXG4gICogZHJvcCB0aGUgbGFzdCBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoZSBzdXBlcmJsb2NrIGZyb20gd2l0aGluIHRoZSBzaHJpbmtlci5cXG5AQCAtMjEzLDcgKzIwMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuIFxcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxcbiBcXHRcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuIFxcbi1cXHRpZiAoc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFxcdTAwMjZcXHUwMDI2IHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxcbitcXHRpZiAoc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxcbiBcXHRcXHRmc19vYmplY3RzID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XFxuIFxcbiBcXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xydSwgc2MpO1xcbkBAIC0yNzQsOCArMjYxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRzbXBfcm1iKCk7XFxuIFxcbi1cXHRpZiAoc2ItXFx1MDAzZXNfb3AgXFx1MDAyNlxcdTAwMjYgc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcXG4rXFx0aWYgKHNiLVxcdTAwM2VzX29wIFxcdTAwMjZcXHUwMDI2IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcXG4gXFx0XFx0dG90YWxfb2JqZWN0cyA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xcbiBcXG4gXFx0dG90YWxfb2JqZWN0cyArPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXFx1MDAyNnNiLVxcdTAwM2VzX2RlbnRyeV9scnUsIHNjKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXFxuaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiBcXG4gLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi9cXG4gXFxuQEAgLTU0LDYgKzU1LDExIEBAIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvIHtcXG4gXFx0c3RydWN0IGRxdW90IF9fcmN1XFx0KmlfZHF1b3RbTUFYUVVPVEFTXTtcXG4gI2VuZGlmXFxuIFxcdHN0cnVjdCBpbm9kZVxcdFxcdHZmc19pbm9kZTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHQqc2hyaW5rbGlzdF9tZW1jZztcXG4rXFx0aW50XFx0XFx0XFx0c2hyaW5rbGlzdF9uaWQ7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gI2RlZmluZSBTSE1FTV9GTF9VU0VSX1ZJU0lCTEVcXHRcXHQoRlNfRkxfVVNFUl9WSVNJQkxFIHwgRlNfQ0FTRUZPTERfRkwpXFxuQEAgLTgzLDkgKzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8ge1xcbiBcXHRpbm9fdCBuZXh0X2lubztcXHRcXHQgICAgLyogVGhlIG5leHQgcGVyLXNiIGlub2RlIG51bWJlciB0byB1c2UgKi9cXG4gXFx0aW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xcbiBcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sOyAgICAgLyogZGVmYXVsdCBtZW1vcnkgcG9saWN5IGZvciBtYXBwaW5ncyAqL1xcbi1cXHRzcGlubG9ja190IHNocmlua2xpc3RfbG9jazsgICAvKiBQcm90ZWN0cyBzaHJpbmtsaXN0ICovXFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIHNocmlua2xpc3RfbGVuOyAvKiBMZW5ndGggb2Ygc2hyaW5rbGlzdCAqL1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHN0cnVjdCBsaXN0X2xydSBzaHJpbmtsaXN0OyAvKiBMaXN0IG9mIHNocmlua2FibGUgaW5vZGVzICovXFxuKyNlbmRpZlxcbiBcXHRzdHJ1Y3Qgc2htZW1fcXVvdGFfbGltaXRzIHFsaW1pdHM7IC8qIERlZmF1bHQgcXVvdGEgbGltaXRzICovXFxuIFxcdHN0cnVjdCBzaW1wbGVfeGF0dHJfY2FjaGUgeGFfY2FjaGU7XFxuIH07XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNzRkYzNkOTAwMDY3YS4uNzA0MzUzODUyYWUyNiAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC03MjQsNTEgKzcyNCwyMzcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnNobWVtX2Zvcm1hdF9odWdlKGludCBodWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuLVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXFxuIHtcXG4tXFx0TElTVF9IRUFEKGxpc3QpLCAqcG9zLCAqbmV4dDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFxuK1xcdHJldHVybiBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCA9PSAtMTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxcbit7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWVtY2c7XFxuK31cXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4rc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgZ2ZwKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBtZW1jZztcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XFxuK1xcbitcXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xcbitcXHRpZiAoSVNfRVJSKG1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbitcXHRcXHQvKiBpc29sYXRlZCBvbiBzY2FuIGxpc3QsIGxldCBzaHJpbmsgaGFuZGxlIGl0ICovXFxuK1xcdFxcdGlmIChpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKSlcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gbmlkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID09IG1lbWNnKVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdFxcdGxpc3RfbHJ1X2RlbChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCxcXG4rXFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyk7XFxuK1xcdFxcdG9sZF9tZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XFxuK1xcdH1cXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBtZW1jZztcXG4rXFx0aW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSBuaWQ7XFxuK1xcdGxpc3RfbHJ1X2FkZChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgbmlkLCBtZW1jZyk7XFxuK1xcdG1lbWNnID0gTlVMTDtcXG4rdW5sb2NrOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG9sZF9tZW1jZyk7XFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4rXFx0XFx0bGlzdF9scnVfZGVsKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LFxcbitcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnKTtcXG4rXFx0XFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rfVxcbitcXG4rc3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4ge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2M7XFxuK307XFxuK1xcbitzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiAqc2NhbiA9IGFyZztcXG4gXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmF0Y2ggPSBzYyA/IHNjLVxcdTAwM2Vucl90b19zY2FuIDogMTI4O1xcbi1cXHR1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbiBcXG4tXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpXFxuLVxcdFxcdHJldHVybiBTSFJJTktfU1RPUDtcXG4rXFx0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpIHtcXG4tXFx0XFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB0cnlsb2NrIHRvIGF2b2lkIEFCQkEgZGVhZGxvY2s6IGFkZC9kZWwgcGF0aCB0YWtlcyBpbmZvLVxcdTAwM2Vsb2NrXFxuK1xcdCAqIGJlZm9yZSB0aGUgbGlzdF9scnUgYnVja2V0IGxvY2ssIHdoaWxlIGhlcmUgdGhlIG9yZGVyIGlzIHJldmVyc2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFzcGluX3RyeWxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spKVxcbitcXHRcXHRyZXR1cm4gTFJVX1NLSVA7XFxuIFxcbi1cXHRcXHQvKiBwaW4gdGhlIGlub2RlICovXFxuLVxcdFxcdGlub2RlID0gaWdyYWIoXFx1MDAyNmluZm8tXFx1MDAzZXZmc19pbm9kZSk7XFxuK1xcdC8qIHBpbiB0aGUgaW5vZGUgKi9cXG4rXFx0aW5vZGUgPSBpZ3JhYihcXHUwMDI2aW5mby1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xcbitcXHRpZiAoIWlub2RlKSB7XFxuK1xcdFxcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcXG4rXFx0XFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFx0XFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbitcXHR9XFxuIFxcbi1cXHRcXHQvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovXFxuLVxcdFxcdGlmICghaW5vZGUpIHtcXG4tXFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdFxcdGdvdG8gbmV4dDtcXG4tXFx0XFx0fVxcbitcXHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XFxuK1xcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcXG4rXFx0c2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKGluZm8pO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2c2Nhbi1cXHUwMDNlbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXG4tXFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2bGlzdCk7XFxuLW5leHQ6XFxuLVxcdFxcdHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcXG4tXFx0XFx0aWYgKCEtLWJhdGNoKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbitcXHRib29sIG1hdGNoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdFxcbitcXHQgKiBzYy1cXHUwMDNlbWVtY2cuIFNraXAgdGhlIGZvbGlvIG1lbWNnIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOlxcbitcXHQgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKVxcbitcXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxcbitcXHQgKiAzLiByb290IG1lbWNnIHJlY2xhaW1cXG4rXFx0ICovXFxuK1xcdGlmICghc2MgfHwgIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy1cXHUwMDNlbmlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbitcXHRtYXRjaCA9IG1lbWNnID09IHNjLVxcdTAwM2VtZW1jZztcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuIG1hdGNoO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbitcXG4rXFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XFxuK1xcdGlmIChJU19FUlIobWVtY2cpKSB7XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFxcdTAwMjZsaXN0KSB7XFxuLVxcdFxcdHBnb2ZmX3QgbmV4dCwgZW5kO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHQvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovXFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRsaXN0X2xydV9hZGQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbitcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3BsaXQgPSAwLCBmcmVlZCA9IDA7XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2Nhbi5saXN0KTtcXG4rXFx0c2Nhbi5zYyA9IHNjO1xcbitcXHRpZiAoc2MpXFxuK1xcdFxcdGxpc3RfbHJ1X3Nocmlua193YWxrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjLFxcbitcXHRcXHRcXHRcXHQgICAgIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsIFxcdTAwMjZzY2FuKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsaXN0X2xydV93YWxrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZzY2FuLCAxMjgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXFx1MDAyNnNjYW4ubGlzdCkge1xcbitcXHRcXHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xcbiBcXHRcXHRsb2ZmX3QgaV9zaXplO1xcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XFxuIFxcdFxcdGlub2RlID0gXFx1MDAyNmluZm8tXFx1MDAzZXZmc19pbm9kZTtcXG4gXFxuLVxcdFxcdGlmIChucl90b19mcmVlIFxcdTAwMjZcXHUwMDI2IGZyZWVkIFxcdTAwM2U9IG5yX3RvX2ZyZWUpXFxuLVxcdFxcdFxcdGdvdG8gbW92ZV9iYWNrO1xcbi1cXG4gXFx0XFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiBcXHRcXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGlfc2l6ZSAvIFBBR0VfU0laRSk7XFxuIFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKVxcbkBAIC03ODEsMTMgKzk2NywxOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqL1xcbi1cXHRcXHRuZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xcbiBcXHRcXHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xcbi1cXHRcXHRpZiAoZW5kIFxcdTAwM2M9IGZvbGlvLVxcdTAwM2VpbmRleCB8fCBlbmQgXFx1MDAzZT0gbmV4dCkge1xcbitcXHRcXHRpZiAoZW5kIFxcdTAwM2M9IGZvbGlvLVxcdTAwM2VpbmRleCB8fCBlbmQgXFx1MDAzZT0gZm9saW9fZW5kKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpXFxuK1xcdFxcdFxcdGdvdG8gbW92ZV9iYWNrO1xcbitcXG4rXFx0XFx0aWYgKG5yX3RvX2ZyZWUgXFx1MDAyNlxcdTAwMjYgZnJlZWQgXFx1MDAzZT0gbnJfdG9fZnJlZSlcXG4rXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBNb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgaWYgd2UgZmFpbGVkXFxuIFxcdFxcdCAqIHRvIGxvY2sgdGhlIHBhZ2UgYXQgdGhpcyB0aW1lLlxcbkBAIC03OTUsMzUgKzk4NywzMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcXG4gXFx0XFx0ICogV2FpdGluZyBmb3IgdGhlIGxvY2sgbWF5IGxlYWQgdG8gZGVhZGxvY2sgaW4gdGhlXFxuIFxcdFxcdCAqIHJlY2xhaW0gcGF0aC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4rXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuK1xcbitcXHRcXHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xcbitcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRcXHRnb3RvIG1vdmVfYmFjaztcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXG4gXFx0XFx0LyogSWYgc3BsaXQgZmFpbGVkIG1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCAqL1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG1vdmVfYmFjaztcXG4gXFxuLVxcdFxcdGZyZWVkICs9IG5leHQgLSBlbmQ7XFxuK1xcdFxcdGZyZWVkICs9IGZvbGlvX2VuZCAtIGVuZDtcXG4gXFx0XFx0c3BsaXQrKztcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gZHJvcDpcXG4tXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xcbiBcXHRcXHRnb3RvIHB1dDtcXG4gbW92ZV9iYWNrOlxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIGVpdGhlciBvbiB0aGUgZ2xvYmFsIGxpc3Qgb3IgZGVsZXRlZFxcbi1cXHRcXHQgKiBmcm9tIGFueSBsb2NhbCBsaXN0IGJlZm9yZSBpcHV0KCkgc2luY2UgaXQgY291bGQgYmUgZGVsZXRlZFxcbi1cXHRcXHQgKiBpbiBhbm90aGVyIHRocmVhZCBvbmNlIHdlIHB1dCB0aGUgaW5vZGUgKHRoZW4gdGhlIGxvY2FsIGxpc3RcXG4tXFx0XFx0ICogaXMgY29ycnVwdGVkKS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xcbi1cXHRcXHRsaXN0X21vdmUoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi1cXHRcXHRzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuKys7XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gcHV0OlxcbiBcXHRcXHRpcHV0KGlub2RlKTtcXG4gXFx0fVxcbkBAIC04MzYsNyArMTAyMyw3IEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xcbiBcXG4tXFx0aWYgKCFSRUFEX09OQ0Uoc2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbikpXFxuK1xcdGlmICghbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjKSlcXG4gXFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbiBcXG4gXFx0cmV0dXJuIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzYmluZm8sIHNjLCAwKTtcXG5AQCAtODQ3LDIxICsxMDM0LDIxIEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIHtcXG4gXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxcbi1cXHQgKiBob25vdXIgc2MtXFx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXFxuLVxcdCAqIHJvb3QgZGlyZWN0IHJlY2xhaW0pIHNocmluayBwYXRoLiBTa2lwIHRoZSBwZXItbWVtY2cgaXRlcmF0aW9ucyBvZlxcbi1cXHQgKiBzaHJpbmtfc2xhYl9tZW1jZygpIHRvIGF2b2lkIHF1ZXVlaW5nIGR1cGxpY2F0ZSBnbG9iYWwgd29yay5cXG4tXFx0ICovXFxuLVxcdGlmICghbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzYykpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIFJFQURfT05DRShzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuKTtcXG4rXFx0cmV0dXJuIGxpc3RfbHJ1X3Nocmlua19jb3VudChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYyk7XFxuIH1cXG4gI2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4gI2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWVxcbiBcXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuIHtcXG5AQCAtMTQxNywxNCArMTYwNCw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSAwO1xcbiBcXHRcXHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXHRcXHRzaG1lbV90cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7XFxuLVxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4tXFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdFxcdFxcdHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2RlbChpbm9kZSk7XFxuIFxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc3dhcGxpc3QpKSB7XFxuIFxcdFxcdFxcdC8qIFdhaXQgd2hpbGUgc2htZW1fdW51c2UoKSBpcyBzY2FubmluZyB0aGlzIGlub2RlLi4uICovXFxuIFxcdFxcdFxcdHdhaXRfdmFyX2V2ZW50KFxcdTAwMjZpbmZvLVxcdTAwM2VzdG9wX2V2aWN0aW9uLFxcbkBAIC0yNTM1LDI3ICsyNzE1LDYgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIFxcbiBhbGxvY2VkOlxcbiBcXHRhbGxvY2VkID0gdHJ1ZTtcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpIFxcdTAwM2NcXG4tXFx0XFx0XFx0XFx0XFx0Zm9saW9fbmV4dF9pbmRleChmb2xpbykpIHtcXG4tXFx0XFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxcbi1cXHRcXHQgKiB0byBzaHJpbmsgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xcbi1cXHRcXHQgKiAtXFx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobGlzdF9lbXB0eV9jYXJlZnVsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbi1cXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LFxcbi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KTtcXG4tXFx0XFx0XFx0c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbisrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdH1cXG4gXFxuIFxcdGlmIChzZ3AgPT0gU0dQX1dSSVRFKVxcbiBcXHRcXHRmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XFxuQEAgLTI1ODUsNiArMjc0NCwyMCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogUXVldWUgdGhlIGlub2RlIG9uIHRoZSBzaHJpbmsgbGlzdCBvbmx5IGFmdGVyIGFsbCBjaGVja3MgdGhhdCBtaWdodFxcbitcXHQgKiByZW1vdmUgdGhlIGZvbGlvIGhhdmUgcGFzc2VkLiBPdGhlcndpc2UgdGhlIGlub2RlIGNvdWxkIGJlIGxlZnQgb25cXG4rXFx0ICogdGhlIHNocmlua2VyIGxpc3Qgd2l0aCBhIHN0YWxlIGZvbGlvLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFsbG9jZWQgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXFx1MDAzYyBmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XFxuK1xcdFxcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApO1xcbitcXHR9XFxuIG91dDpcXG4gXFx0KmZvbGlvcCA9IGZvbGlvO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzA2MSw2ICszMjM0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlZnNmbGFncylcXG4gXFx0XFx0c2htZW1fc2V0X2lub2RlX2ZsYWdzKGlub2RlLCBpbmZvLVxcdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xcbisjZW5kaWZcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXN3YXBsaXN0KTtcXG4gXFx0Y2FjaGVfbm9fYWNsKGlub2RlKTtcXG4gXFx0aWYgKHNiaW5mby1cXHUwMDNlbm9zd2FwKVxcbkBAIC00OTI3LDYgKzUxMDQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gI2VuZGlmXFxuIFxcdGZyZWVfcGVyY3B1KHNiaW5mby1cXHUwMDNlaW5vX2JhdGNoKTtcXG4gXFx0cGVyY3B1X2NvdW50ZXJfZGVzdHJveShcXHUwMDI2c2JpbmZvLVxcdTAwM2V1c2VkX2Jsb2Nrcyk7XFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KTtcXG4rI2VuZGlmXFxuIFxcdG1wb2xfcHV0KHNiaW5mby1cXHUwMDNlbXBvbCk7XFxuICNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG4gXFx0c2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoXFx1MDAyNnNiaW5mby1cXHUwMDNleGFfY2FjaGUpO1xcbkBAIC01MDIwLDggKzUyMDAsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZzYmluZm8tXFx1MDAzZXN0YXRfbG9jayk7XFxuIFxcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFxcdTAwMjZzYmluZm8tXFx1MDAzZXVzZWRfYmxvY2tzLCAwLCBHRlBfS0VSTkVMKSlcXG4gXFx0XFx0Z290byBmYWlsZWQ7XFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYi1cXHUwMDNlc19zaHJpbmspKVxcbitcXHRcXHRnb3RvIGZhaWxlZDtcXG4rI2VuZGlmXFxuIFxcbiBcXHRzYi1cXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuIFxcdHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSA9IFBBR0VfU0laRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTUuMDQ0NjE3OTkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzY1NTg1MjkzNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fZXZpY3RfaW5vZGVcIixcbiAgICBcInNobWVtX2ZpbGxfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjI5OWU1YmVmNDZlOWIwN2IwMjkyZmNhYzRlMGQ4Mjk4MDQ4MWNiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6NTg6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uMzZiMjQ5ZjAwMmE5YSAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xNzEsMTkgKzE3MSw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX2ZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBUaGUgc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cdTAwM2VtZW1jZy4gRHJpdmluZyB0aGVtXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXG4tICogdGhlIGdsb2JhbCBwYXRoIChrc3dhcGQgb3Igcm9vdCBkaXJlY3QgcmVjbGFpbSkgcmVnYXJkbGVzcy4gUmVzdHJpY3QgdGhlbVxuLSAqIHRvIHRoYXQgcGF0aC5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbi19XG4tXG4gLypcbiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24ndFxuICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuXG5AQCAtMjEzLDcgKzIwMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRpZiAoIXN1cGVyX3RyeWxvY2tfc2hhcmVkKHNiKSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMgXHUwMDI2XHUwMDI2IHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuK1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXG4gXHRcdGZzX29iamVjdHMgPSBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XG4gXG4gXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcbkBAIC0yNzQsOCArMjYxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRcdHJldHVybiAwO1xuIFx0c21wX3JtYigpO1xuIFxuLVx0aWYgKHNiLVx1MDAzZXNfb3AgXHUwMDI2XHUwMDI2IHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMgXHUwMDI2XHUwMDI2XG4tXHQgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4rXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcbiBcdFx0dG90YWxfb2JqZWN0cyA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoc2IsIHNjKTtcbiBcbiBcdHRvdGFsX29iamVjdHMgKz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSwgc2MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdF9scnUuaFx1MDAzZVxuIFxuIC8qIGlub2RlIGluLWtlcm5lbCBkYXRhICovXG4gXG5AQCAtNTQsNiArNTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8ge1xuIFx0c3RydWN0IGRxdW90IF9fcmN1XHQqaV9kcXVvdFtNQVhRVU9UQVNdO1xuICNlbmRpZlxuIFx0c3RydWN0IGlub2RlXHRcdHZmc19pbm9kZTtcbitcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzdHJ1Y3QgbWVtX2Nncm91cFx0KnNocmlua2xpc3RfbWVtY2c7XG4rXHRpbnRcdFx0XHRzaHJpbmtsaXN0X25pZDtcbisjZW5kaWZcbiB9O1xuIFxuICNkZWZpbmUgU0hNRU1fRkxfVVNFUl9WSVNJQkxFXHRcdChGU19GTF9VU0VSX1ZJU0lCTEUgfCBGU19DQVNFRk9MRF9GTClcbkBAIC04Myw5ICs4OSw5IEBAIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHtcbiBcdGlub190IG5leHRfaW5vO1x0XHQgICAgLyogVGhlIG5leHQgcGVyLXNiIGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdGlub190IF9fcGVyY3B1ICppbm9fYmF0Y2g7ICAvKiBUaGUgbmV4dCBwZXItY3B1IGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXG4tXHRzcGlubG9ja190IHNocmlua2xpc3RfbG9jazsgICAvKiBQcm90ZWN0cyBzaHJpbmtsaXN0ICovXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua2xpc3Q7ICAvKiBMaXN0IG9mIHNoaW5rYWJsZSBpbm9kZXMgKi9cbi1cdHVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0c3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3Q7IC8qIExpc3Qgb2Ygc2hyaW5rYWJsZSBpbm9kZXMgKi9cbisjZW5kaWZcbiBcdHN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi9cbiBcdHN0cnVjdCBzaW1wbGVfeGF0dHJfY2FjaGUgeGFfY2FjaGU7XG4gfTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNzRkYzNkOTAwMDY3YS4uNzA0MzUzODUyYWUyNiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC03MjQsNTEgKzcyNCwyMzcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnNobWVtX2Zvcm1hdF9odWdlKGludCBodWdlKVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbi1cdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuK3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxuIHtcbi1cdExJU1RfSEVBRChsaXN0KSwgKnBvcywgKm5leHQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1xuK1x0cmV0dXJuIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2c7XG4rXG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuK31cbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbitzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGludCByZXQ7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIGdmcCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbitcbitcdHJldHVybiBtZW1jZztcbit9XG4rI2Vsc2VcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdCAgICBnZnBfdCBnZnApXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICBnZnBfdCBnZnApXG4re1xuK1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbitcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xuK1x0aWYgKElTX0VSUihtZW1jZykpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0LyogaXNvbGF0ZWQgb24gc2NhbiBsaXN0LCBsZXQgc2hyaW5rIGhhbmRsZSBpdCAqL1xuK1x0XHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuK1x0fVxuK1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuK1x0bGlzdF9scnVfYWRkKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xuK1x0bWVtY2cgPSBOVUxMO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rXHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRtZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjO1xuK307XG4rXG4rc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbitcdFx0XHRcdFx0XHQgdm9pZCAqYXJnKVxuK3tcbitcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0dW5zaWduZWQgbG9uZyBiYXRjaCA9IHNjID8gc2MtXHUwMDNlbnJfdG9fc2NhbiA6IDEyODtcbi1cdHVuc2lnbmVkIGxvbmcgc3BsaXQgPSAwLCBmcmVlZCA9IDA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiBcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KSlcbi1cdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuK1x0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpIHtcbi1cdFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4rXHQvKlxuK1x0ICogVXNlIHRyeWxvY2sgdG8gYXZvaWQgQUJCQSBkZWFkbG9jazogYWRkL2RlbCBwYXRoIHRha2VzIGluZm8tXHUwMDNlbG9ja1xuK1x0ICogYmVmb3JlIHRoZSBsaXN0X2xydSBidWNrZXQgbG9jaywgd2hpbGUgaGVyZSB0aGUgb3JkZXIgaXMgcmV2ZXJzZWQuXG4rXHQgKi9cbitcdGlmICghc3Bpbl90cnlsb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jaykpXG4rXHRcdHJldHVybiBMUlVfU0tJUDtcbiBcbi1cdFx0LyogcGluIHRoZSBpbm9kZSAqL1xuLVx0XHRpbm9kZSA9IGlncmFiKFx1MDAyNmluZm8tXHUwMDNldmZzX2lub2RlKTtcbitcdC8qIHBpbiB0aGUgaW5vZGUgKi9cbitcdGlub2RlID0gaWdyYWIoXHUwMDI2aW5mby1cdTAwM2V2ZnNfaW5vZGUpO1xuK1x0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xuK1x0aWYgKCFpbm9kZSkge1xuK1x0XHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4rXHRcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1x0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4rXHR9XG4gXG4tXHRcdC8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi9cbi1cdFx0aWYgKCFpbm9kZSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRnb3RvIG5leHQ7XG4tXHRcdH1cbitcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbitcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZzY2FuLVx1MDAzZWxpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2bGlzdCk7XG4tbmV4dDpcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuLS07XG4tXHRcdGlmICghLS1iYXRjaClcbi1cdFx0XHRicmVhaztcbitcdHJldHVybiBMUlVfUkVNT1ZFRDtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4rXHRib29sIG1hdGNoO1xuK1xuK1x0LypcbitcdCAqIE9ubHkgbm9uLXJvb3QgbWVtY2cgcmVjbGFpbSBuZWVkcyB0byBtYXRjaCB0aGUgZm9saW8gY2hhcmdlIGFnYWluc3RcbitcdCAqIHNjLVx1MDAzZW1lbWNnLiBTa2lwIHRoZSBmb2xpbyBtZW1jZyBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbitcdCAqIDEuIHNobWVtIHF1b3RhIHJlY2xhaW0gKHNjID09IE5VTEwpXG4rXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxuK1x0ICogMy4gcm9vdCBtZW1jZyByZWNsYWltXG4rXHQgKi9cbitcdGlmICghc2MgfHwgIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGZvbGlvX25pZChmb2xpbykgIT0gc2MtXHUwMDNlbmlkKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0bWF0Y2ggPSBtZW1jZyA9PSBzYy1cdTAwM2VtZW1jZztcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBHRlBfTk9XQUlUKTtcbitcdGlmIChJU19FUlIobWVtY2cpKSB7XG4rXHRcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNmxpc3QpIHtcbi1cdFx0cGdvZmZfdCBuZXh0LCBlbmQ7XG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdC8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi9cbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbitcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnO1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IG5pZDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuK1x0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4re1xuK1x0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBzcGxpdCA9IDAsIGZyZWVkID0gMDtcbitcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjYW4ubGlzdCk7XG4rXHRzY2FuLnNjID0gc2M7XG4rXHRpZiAoc2MpXG4rXHRcdGxpc3RfbHJ1X3Nocmlua193YWxrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyxcbitcdFx0XHRcdCAgICAgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSwgXHUwMDI2c2Nhbik7XG4rXHRlbHNlXG4rXHRcdGxpc3RfbHJ1X3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsXG4rXHRcdFx0ICAgICAgXHUwMDI2c2NhbiwgMTI4KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNnNjYW4ubGlzdCkge1xuK1x0XHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xuIFx0XHRsb2ZmX3QgaV9zaXplO1xuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiBcdFx0aW5vZGUgPSBcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZTtcbiBcbi1cdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbi1cbiBcdFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFx0XHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXG5AQCAtNzgxLDEzICs5NjcsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdH1cbiBcbiBcdFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqL1xuLVx0XHRuZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4rXHRcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuIFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xuLVx0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gbmV4dCkge1xuK1x0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gZm9saW9fZW5kKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbitcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpXG4rXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4rXG4rXHRcdGlmIChucl90b19mcmVlIFx1MDAyNlx1MDAyNiBmcmVlZCBcdTAwM2U9IG5yX3RvX2ZyZWUpXG4rXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIE1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCBpZiB3ZSBmYWlsZWRcbiBcdFx0ICogdG8gbG9jayB0aGUgcGFnZSBhdCB0aGlzIHRpbWUuXG5AQCAtNzk1LDM1ICs5ODcsMzAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdCAqIFdhaXRpbmcgZm9yIHRoZSBsb2NrIG1heSBsZWFkIHRvIGRlYWRsb2NrIGluIHRoZVxuIFx0XHQgKiByZWNsYWltIHBhdGguXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbitcdFx0XHRnb3RvIG1vdmVfYmFjaztcbitcbitcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbitcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRcdGdvdG8gbW92ZV9iYWNrO1xuIFx0XHR9XG4gXG4gXHRcdHJldCA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcbiBcdFx0LyogSWYgc3BsaXQgZmFpbGVkIG1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCAqL1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gbW92ZV9iYWNrO1xuIFxuLVx0XHRmcmVlZCArPSBuZXh0IC0gZW5kO1xuK1x0XHRmcmVlZCArPSBmb2xpb19lbmQgLSBlbmQ7XG4gXHRcdHNwbGl0Kys7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gZHJvcDpcbi1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiBcdFx0Z290byBwdXQ7XG4gbW92ZV9iYWNrOlxuLVx0XHQvKlxuLVx0XHQgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIGVpdGhlciBvbiB0aGUgZ2xvYmFsIGxpc3Qgb3IgZGVsZXRlZFxuLVx0XHQgKiBmcm9tIGFueSBsb2NhbCBsaXN0IGJlZm9yZSBpcHV0KCkgc2luY2UgaXQgY291bGQgYmUgZGVsZXRlZFxuLVx0XHQgKiBpbiBhbm90aGVyIHRocmVhZCBvbmNlIHdlIHB1dCB0aGUgaW5vZGUgKHRoZW4gdGhlIGxvY2FsIGxpc3Rcbi1cdFx0ICogaXMgY29ycnVwdGVkKS5cbi1cdFx0ICovXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4rKztcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4rXHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICsxMDIzLDcgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIHtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XG4gXG4tXHRpZiAoIVJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pKVxuK1x0aWYgKCFsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjKSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuIFx0cmV0dXJuIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzYmluZm8sIHNjLCAwKTtcbkBAIC04NDcsMjEgKzEwMzQsMjEgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0Lypcbi1cdCAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxuLVx0ICogaG9ub3VyIHNjLVx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXG4tXHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2Zcbi1cdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxuLVx0ICovXG4tXHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKTtcbitcdHJldHVybiBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuICNkZWZpbmUgc2htZW1faHVnZSBTSE1FTV9IVUdFX0RFTllcbiBcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuK3tcbit9XG4rXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuIHtcbkBAIC0xNDE3LDE0ICsxNjA0LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0bWFwcGluZ19zZXRfZXhpdGluZyhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFx0XHRzaG1lbV90cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7XG4tXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4tXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4tXHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdFx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdH1cbitcdFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpKSB7XG4gXHRcdFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cbiBcdFx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZpbmZvLVx1MDAzZXN0b3BfZXZpY3Rpb24sXG5AQCAtMjUzNSwyNyArMjcxNSw2IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIGFsbG9jZWQ6XG4gXHRhbGxvY2VkID0gdHJ1ZTtcbi1cdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpIFx1MDAzY1xuLVx0XHRcdFx0XHRmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xuLVx0XHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4tXHRcdC8qXG4tXHRcdCAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3Rcbi1cdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbi1cdFx0ICovXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0Lypcbi1cdFx0ICogX2NhcmVmdWwgdG8gZGVmZW5kIGFnYWluc3QgdW5sb2NrZWQgYWNjZXNzIHRvXG4tXHRcdCAqIC1cdTAwM2VzaHJpbmtfbGlzdCBpbiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoKVxuLVx0XHQgKi9cbi1cdFx0aWYgKGxpc3RfZW1wdHlfY2FyZWZ1bChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4tXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKys7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHR9XG4gXG4gXHRpZiAoc2dwID09IFNHUF9XUklURSlcbiBcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xuQEAgLTI1ODUsNiArMjc0NCwyMCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBRdWV1ZSB0aGUgaW5vZGUgb24gdGhlIHNocmluayBsaXN0IG9ubHkgYWZ0ZXIgYWxsIGNoZWNrcyB0aGF0IG1pZ2h0XG4rXHQgKiByZW1vdmUgdGhlIGZvbGlvIGhhdmUgcGFzc2VkLiBPdGhlcndpc2UgdGhlIGlub2RlIGNvdWxkIGJlIGxlZnQgb25cbitcdCAqIHRoZSBzaHJpbmtlciBsaXN0IHdpdGggYSBzdGFsZSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGFsbG9jZWQgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3RcbitcdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbitcdFx0ICovXG4rXHRcdHNobWVtX3VudXNlZF9odWdlX2FkZChpbm9kZSwgZm9saW8sIGdmcCk7XG4rXHR9XG4gb3V0OlxuIFx0KmZvbGlvcCA9IGZvbGlvO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzA2MSw2ICszMjM0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGluZm8tXHUwMDNlZnNmbGFncylcbiBcdFx0c2htZW1fc2V0X2lub2RlX2ZsYWdzKGlub2RlLCBpbmZvLVx1MDAzZWZzZmxhZ3MsIE5VTEwpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xuKyNlbmRpZlxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2Vzd2FwbGlzdCk7XG4gXHRjYWNoZV9ub19hY2woaW5vZGUpO1xuIFx0aWYgKHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtNDkyNyw2ICs1MTA0LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gI2VuZGlmXG4gXHRmcmVlX3BlcmNwdShzYmluZm8tXHUwMDNlaW5vX2JhdGNoKTtcbiBcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzKTtcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbisjZW5kaWZcbiBcdG1wb2xfcHV0KHNiaW5mby1cdTAwM2VtcG9sKTtcbiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG4gXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcdTAwMjZzYmluZm8tXHUwMDNleGFfY2FjaGUpO1xuQEAgLTUwMjAsOCArNTIwMCwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnNiaW5mby1cdTAwM2VzdGF0X2xvY2spO1xuIFx0aWYgKHBlcmNwdV9jb3VudGVyX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzLCAwLCBHRlBfS0VSTkVMKSlcbiBcdFx0Z290byBmYWlsZWQ7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2ItXHUwMDNlc19zaHJpbmspKVxuK1x0XHRnb3RvIGZhaWxlZDtcbisjZW5kaWZcbiBcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19ibG9ja3NpemUgPSBQQUdFX1NJWkU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODo1NS4wNDQ2MjA4MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEzMTI5ODYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgU2htZW0gSHVnZSBQYWdlIFNocmlua2VyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNobWVtYCAoc3BlY2lmaWNhbGx5IHRtcGZzKSBkZWFscyB3aXRoIHVudXNlZCBodWdlIHBhZ2VzLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgZnJvbSBhIGdsb2JhbCBsaXN0IGZvciB0aGUgc2hyaW5rZXIgdG8gYSBwZXItbWVtY2cgYGxpc3RfbHJ1YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBpbXByb3ZlZCBtZW1vcnkgYWNjb3VudGluZyBmb3Igc2hhcmVkIG1lbW9yeSBzeXN0ZW1zLiBUaGUgcmVtb3ZhbCBvZiBgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZWAgZnJvbSBgZnMvc3VwZXIuY2AgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcmVsYXhhdGlvbiBvZiB0aGUgcmVzdHJpY3Rpb24gb24gYG5yX2NhY2hlZF9vYmplY3RzYCB0byB0aGUgcm9vdCBtZW1jZywgd2hpY2ggaXMgbm93IGJlaW5nIGhhbmRsZWQgYnkgdGhlIGBsaXN0X2xydWAgZGVzaWduLiBUaGlzIHBvaW50cyB0byBwb3RlbnRpYWxseSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgYW5kIGEgbW92ZSB0b3dhcmRzIG1vcmUgYWNjdXJhdGUgdHJhY2tpbmcgYWNyb3NzIG1lbWNncy5cblxuVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgcmVzaWRlcyBpbiB0aGUgYG1tL3NobWVtLmNgIG1vZGlmaWNhdGlvbnM6IGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHN3aXRjaCB0byBgbGlzdF9scnVfc2hyaW5rX3dhbGtgIGFuZCBgbGlzdF9scnVfd2Fsa2AgaXMgdGhlIGtleS4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgc2hyaW5rZXIgb3BlcmF0ZXMuIFdlJ3ZlIGdvdCBhIHNsZXcgb2YgbmV3IGZ1bmN0aW9ucyBoZXJlIHRvIG1hbmFnZSB0aGlzOiBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYCwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYCwgYGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIG1hbmFnaW5nIHRoZSBlbnRyaWVzIHdpdGhpbiB0aGUgYGxpc3RfbHJ1YC4gVGhlIGZhY3QgdGhhdCBgc2htZW1fc2JfaW5mb2Agbm93IHVzZXMgYSBgc3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3RgIGluc3RlYWQgb2YgYSBgc3RydWN0IGxpc3RfaGVhZCBzaHJpbmtsaXN0YCwgYW5kIHRoYXQgYHNobWVtX2lub2RlX2luZm9gIGhhcyBgc2hyaW5rbGlzdF9tZW1jZ2AgYW5kIGBzaHJpbmtsaXN0X25pZGAsIGNvbmZpcm1zIHRoaXMgbWVtY2ctYXdhcmUgYXBwcm9hY2guXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiB0byBgbW0vc2htZW0uY2AgYW5kIHRoYXQgdG1wZnMgaXMgdWJpcXVpdG91cywgdGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSBpbXBhY3RmdWwuIEl0J3MgaW4gYSBjcml0aWNhbCBwYXRoIGFuZCByZXF1aXJlcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhbmQgbW9kaWZpZWQ6XG4qICAgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2BcbiogICBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgXG4qICAgYHNobWVtX3VudXNlZF9odWdlX2FkZGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYFxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYFxuKiAgIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWBcbiogICBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgKG1vZGlmaWVkKVxuKiAgIGBzaG1lbV9ldmljdF9pbm9kZWAgKG1vZGlmaWVkKVxuKiAgIGBzaG1lbV9maWxsX3N1cGVyYCAobW9kaWZpZWQpXG4qICAgYHNobWVtX3B1dF9zdXBlcmAgKG1vZGlmaWVkKVxuXG5XYWl0LCBob2xkIG9uLi4uIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIGFyZSBzdGF0aWMuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYXJlIGJlaW5nIHVzZWQuIEFoLCBnb3QgaXQgLSB0aGV5IGFyZSBiZWluZyBhc3NpZ25lZCB0byBgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0c2AgYW5kIGBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWVfY2FjaGVkX29iamVjdHNgIHdpdGhpbiBgc2htZW1fZmlsbF9zdXBlcmAuIFNvLCBgc2htZW1fZmlsbF9zdXBlcmAgYW5kIGluZGlyZWN0bHkgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzaG1lbV9zb3BzYCBpbiBgbW0vc2htZW0uY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gYXNzaWdubWVudCBhbmQgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OTowNi4xNzU5MjMxMTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNzg3ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3NvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MDYuMjIwMTEwNDgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1Nzg0NjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgbWVtb3J5IGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IG15IGJlYXJpbmdzLiBMZXQncyBzZWUuLi4gd2hhdCdzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzPyBSaWdodCwgSSBzaG91bGQgc3RhcnQgd2l0aCBhIHNwZWNpZmljIHBvaW50IG9mIGludGVyZXN0LiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBjb2RlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgd29yayB0byBiZSBkb25lIG9uIHRoZSBzaGFyZWQgbWVtb3J5LiBNeSBzZWFyY2ggdGVybSB3aWxsIGJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYC4gVGhpcyBmdW5jdGlvbiBuYW1lLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIGl0LCBtaWdodCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcHJvYmxlbXMgb3Igb3B0aW1pemF0aW9ucyByZWdhcmRpbmcgdW51c2VkIGh1Z2UgcGFnZXMgd2l0aGluIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMuIEhvcGVmdWxseSwgdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MTAuNzc3OTU5NjgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjgxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3VudXNlZF9odWdlX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtODI5LVxcbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcXG5tbS9zaG1lbS5jLTgzMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5tbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL3NobWVtLmMtODM4LXtcXG5tbS9zaG1lbS5jOjgzOTpcXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiAqc2NhbiA9IGFyZztcXG5tbS9zaG1lbS5jLTg0MC1cXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcXG4tLVxcbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbi0tXFxubW0vc2htZW0uYy05MzMte1xcbm1tL3NobWVtLmM6OTM0OlxcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47XFxubW0vc2htZW0uYy05MzUtXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tLVxcbm1tL3NobWVtLmMtMTAyMC1cXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbm1tL3NobWVtLmMtMTAyMi1cXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vc2htZW0uYz01NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTU0MjYtXFx0Lm5yX2NhY2hlZF9vYmplY3RzXFx0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcXG5tbS9zaG1lbS5jOjU0Mjc6XFx0LmZyZWVfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXFxubW0vc2htZW0uYy01NDI4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToxMC44MjY2NDgwNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA1NjczMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2htZW0gRmlsZXN5c3RlbSdzIENhY2hlZCBPYmplY3QgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBsaW5rZWQgdG8gYGZyZWVfY2FjaGVkX29iamVjdHNgIHdpdGhpbiB0aGUgYHNobWVtX29wc2Agc3RydWN0dXJlLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBzZWVtcyB0byBiZSB0b3VjaGluZyBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGFyZSBpbnZva2VkIHRocm91Z2ggdGhlIGBzYi1cdTAwM2VzX29wYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB2aWEgYG5yX2NhY2hlZF9vYmplY3RzYCBhbmQgYGZyZWVfY2FjaGVkX29iamVjdHNgLiBOb3csIHdoZXJlIGRvIHRoZXNlIGVudHJ5IHBvaW50cyBsaXZlPyBBaCwgdGhhdCdzIHJpZ2h0LCBgc3VwZXJfY2FjaGVfc2NhbmAgYW5kIGBzdXBlcl9jYWNoZV9jb3VudGAgaW4gYGZzL3N1cGVyLmNgLlxuXG5XYWl0IGEgbWludXRlLCBgc3VwZXJfY2FjaGVfc2NhbmAgYW5kIGBzdXBlcl9jYWNoZV9jb3VudGAuLi4gdGhvc2UgYXJlIHRoZSBzaHJpbmtlciBjYWxsYmFja3MgZm9yIHRoZSBzdXBlciBibG9jayBzaHJpbmtlciwgYXJlbid0IHRoZXk/IFRoYXQgbWVhbnMgdGhlIGZpbGVzeXN0ZW0gc2hyaW5rZXIgbWVjaGFuaXNtIGlzIGtleSBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbiBgZnMvc3VwZXIuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBodWdlIHBhZ2UgY2FjaGluZyBpbiBzaG1lbSBpcyBtYW5hZ2VkIGFuZCBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhhdCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToxNS41MzIzMjU0ODlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTQyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3VwZXJfY2FjaGVfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmM9MTU0PXN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXFxuLS1cXG5mcy9zdXBlci5jLTE4MC0gKi9cXG5mcy9zdXBlci5jOjE4MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbmZzL3N1cGVyLmMtMTgyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5mcy9zdXBlci5jPTIzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbmZzL3N1cGVyLmMtMjUwLVxcdCAqIGxpc3RfbHJ1X3Nocmlua19jb3VudCgpIG9yIHNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkuIENvdW50cyBjYW5cXG5mcy9zdXBlci5jOjI1MTpcXHQgKiBjaGFuZ2UgYmV0d2VlbiBzdXBlcl9jYWNoZV9jb3VudCBhbmQgc3VwZXJfY2FjaGVfc2Nhbiwgc28gd2UgcmVhbGx5XFxuZnMvc3VwZXIuYy0yNTItXFx0ICogZG9uJ3QgbmVlZCBsb2NrcyBoZXJlLlxcbi0tXFxuZnMvc3VwZXIuYz0zMjM9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4tLVxcbmZzL3N1cGVyLmMtMzkxLVxcbmZzL3N1cGVyLmM6MzkyOlxcdHMtXFx1MDAzZXNfc2hyaW5rLVxcdTAwM2VzY2FuX29iamVjdHMgPSBzdXBlcl9jYWNoZV9zY2FuO1xcbmZzL3N1cGVyLmMtMzkzLVxcdHMtXFx1MDAzZXNfc2hyaW5rLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gc3VwZXJfY2FjaGVfY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU5OjE1LjU3Nzg4NTk4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzIyNjQ2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTaG1lbSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhpcywgYW5kIGl0IHNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBzdXBlcl9jYWNoZV9zY2FuYCBhbmQgYHN1cGVyX2NhY2hlX2NvdW50YC4gVGhlc2UgYXJlIHByZXR0eSBnZW5lcmljLCBzbyB0aGF0IGRvZXNuJ3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgdG8gYmUgaGFwcGVuaW5nIHdpdGhpbiBgbW0vc2htZW0uY2AuIEknbSBzcGVjaWZpY2FsbHkgc2VlaW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBtZW50aW9uZWQsIHdoaWNoIHN1Z2dlc3RzIHRoZSBhZGp1c3RtZW50cyBhcmUgZm9jdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gSSBuZWVkIHRvIGJlIHN1cmUsIHRob3VnaC4gSXMgdGhpcyB0aGUgb25seSBwbGFjZT9cblxuSSBoYXZlIHRvIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGltcGFjdGVkLiBMZXQncyBkaWcgZGVlcGVyLiBBaCwgSSBzZWUgdGhhdCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgYWxzbyBjYWxsZWQgb3V0LiBIbW0sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl04oCZcyBzdGF0aWMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBjaGFuZ2VzICpyZWFsbHkqIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToyMy44MTAxNTQ3ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDIzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX2dldF9mb2xpb19nZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTIyMjI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjUyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxcbm1tL3NobWVtLmM6MjI1MzogKiB1c3VhbCBzd2FwaW4gb2Ygc2htZW1fZ2V0X2ZvbGlvX2dmcCgpLCBvciBieSB0aGUgbGVzcyBjb21tb24gc3dhcG9mZiBvZlxcbm1tL3NobWVtLmMtMjI1NC0gKiBzaG1lbV91bnVzZV9pbm9kZSgpKSwgaXQgbWF5IGhhdmUgYmVlbiByZWFkIGluIGVhcmxpZXIgZnJvbSBzd2FwLCBpblxcbi0tXFxubW0vc2htZW0uYz0yNDMzPXN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI1OTgtLypcXG5tbS9zaG1lbS5jOjI1OTk6ICogc2htZW1fZ2V0X2ZvbGlvX2dmcCAtIGZpbmQgcGFnZSBpbiBjYWNoZSwgb3IgZ2V0IGZyb20gc3dhcCwgb3IgYWxsb2NhdGVcXG5tbS9zaG1lbS5jLTI2MDAtICpcXG4tLVxcbm1tL3NobWVtLmMtMjYwNi0gKi9cXG5tbS9zaG1lbS5jOjI2MDc6c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0yNjA4LVxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXFxuLS1cXG5tbS9zaG1lbS5jPTI4MDM9aW50IHNobWVtX2dldF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLFxcbi0tXFxubW0vc2htZW0uYy0yODA1LXtcXG5tbS9zaG1lbS5jOjI4MDY6XFx0cmV0dXJuIHNobWVtX2dldF9mb2xpb19nZnAoaW5vZGUsIGluZGV4LCB3cml0ZV9lbmQsIGZvbGlvcCwgc2dwLFxcbm1tL3NobWVtLmMtMjgwNy1cXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpLCBOVUxMLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9Mjg4Mj1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL3NobWVtLmMtMjkwMC1cXHRXQVJOX09OX09OQ0Uodm1mLVxcdTAwM2VwYWdlICE9IE5VTEwpO1xcbm1tL3NobWVtLmM6MjkwMTpcXHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXFx1MDAzZXBnb2ZmLCAwLCBcXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcXG5tbS9zaG1lbS5jLTI5MDItXFx0XFx0XFx0XFx0ICBnZnAsIHZtZiwgXFx1MDAyNnJldCk7XFxuLS1cXG5tbS9zaG1lbS5jPTYxMzE9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNjEzOC1cXG5tbS9zaG1lbS5jOjYxMzk6XFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgaV9zaXplX3JlYWQoaW5vZGUpLFxcbm1tL3NobWVtLmMtNjE0MC1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsIGdmcCwgTlVMTCwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU5OjIzLjg1NjE4NTUwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMzNTQ3NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgc2htZW0gRnVuY3Rpb24gVmlzaWJpbGl0eSBhbmQgQ2FsbCBQYXRocyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGBzaG1lbWAgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVzIHRvIHVzZSBhcyBlbnRyeSBwb2ludHMuIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBzdHJhaWdodGZvcndhcmQsIHRoZXkncmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyB0aGVtIGVhc3kgdG8gdGFyZ2V0LiBgc2htZW1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGl0J3MgY2FsbGVkIHZpYSB0aGUgYHZtX29wZXJhdGlvbnNfc3RydWN0YCwgc28gaXQgKm1pZ2h0KiBiZSBhY2Nlc3NpYmxlLCBidXQgbGVzcyBpZGVhbC4gYHNobWVtX2V2aWN0X2lub2RlYCwgYHNobWVtX2ZpbGxfc3VwZXJgLCBhbmQgYHNobWVtX3B1dF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBzbyBsZXNzIGludGVyZXN0aW5nIGZyb20gYSB0YXJnZXRpbmcgcGVyc3BlY3RpdmUuXG5cblRoZSB0cmlja3kgb25lIGlzIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyBiZWNhdXNlIGl0IG1pZ2h0IGJlIGlubGluZWQgYW5kIG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sLiBCdXQsIGl0J3MgYXNzaWduZWQgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYHNobWVtX29wcy5mcmVlX2NhY2hlZF9vYmplY3RzYC4gVGhhdCBtZWFucyBpdCAqbXVzdCogaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBidXQgdGhpcyBvbmUgaXMgbm90IGlubGluZWQsIHNpbmNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gU28sIGl0IHNob3VsZCBiZSB0YXJnZXRhYmxlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBub24tc3RhdGljIG9uZXM6IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy5cblxuQnV0IHdhaXQsIGhvdyBpcyBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgKmFjdHVhbGx5KiBjYWxsZWQ/IEl0J3MgcGFydCBvZiB0aGUgc2hyaW5rZXIsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUuIENhbiB3ZSB0cmlnZ2VyIGl0IHdpdGggYGRyb3BfY2FjaGVzYD8gWWVzLCBgZWNobyAzIFx1MDAzZSAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNgIGNhbGxzIGBkcm9wX3NsYWJgLCB3aGljaCBjYWxscyBgc2hyaW5rX3NsYWJgLiBgc2hyaW5rX3NsYWJgIHRoZW4gY2FsbHMgYHN1cGVyX2NhY2hlX3NjYW5gLCB3aGljaCBmaW5hbGx5IGNhbGxzIGBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWVfY2FjaGVkX29iamVjdHNgLCB3aGljaCBpcyBpbmRlZWQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBFeGNlbGxlbnQuIFRoYXQgZ2l2ZXMgbWUgYSBwYXRoIHRvIHRyaWdnZXIgaXQgaW5kaXJlY3RseS5cblxuT2theSwgbmV4dCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHdob2xlIHNlY3Rpb24gb2YgY29kZSBpcyB3cmFwcGVkIGluIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL3NobWVtLmNgIGFuZCBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYC4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCwgYW5kIGtub3dpbmcgdGhlc2Ugb3B0aW9ucyBtaWdodCBsaW1pdCB0aGUgc2NvcGUgb2Ygd2hhdCBJIGNhbiBkbywgYnV0IGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MzguMTkxNjY0NDUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc4ODA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0zNT1zdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtNTgtXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjU5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtNjAtXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHQqc2hyaW5rbGlzdF9tZW1jZztcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD03Nz1zdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtOTEtXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDsgICAgIC8qIGRlZmF1bHQgbWVtb3J5IHBvbGljeSBmb3IgbWFwcGluZ3MgKi9cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6OTI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC05My1cXHRzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MzguMjM2NDU4MzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTc3MTA5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBObyBxdWVzdGlvbiBhYm91dCBpdC4gQW5kLCBJIHNlZSwgd2UncmUgYWxzbyBtYWtpbmcgdXNlIG9mIGBDT05GSUdfTUVNQ0dgLCBhcyBpdHMgdXNhZ2UgcG9wcyB1cCBpbiB0aGUgYG1tL3NobWVtLmNgIGZpbGUuIEdvdCBpdC4gVGhpcyBtYWtlcyBzZW5zZSBpbiBjb250ZXh0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTYyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6NDEuODM0MTcyMDI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU4MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTczOD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXFxuLS1cXG5tbS9zaG1lbS5jLTc0Ni1cXG5tbS9zaG1lbS5jOjc0NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2htZW0uYy03NDgtc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6NDEuODc4NzY3MzQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzI2MzAxNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IGlmIGBDT05GSUdfU0hNRU1gIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGhlcmUuIEV2ZW4gdGhvdWdoIGl0J3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgaXQncyBhbHdheXMgc21hcnQgdG8gZG91YmxlLWNoZWNrIGFuZCBleHBsaWNpdGx5IGluY2x1ZGUgaXQgaWYgbmVjZXNzYXJ5LiBDYW4ndCBiZSB0b28gY2FyZWZ1bCwgcmlnaHQ/XG5cblRoZW4sIGFoIHllcywgSSByZW1lbWJlciB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX01NVWAuIEkgc2hvdWxkIGhhdmUga25vd24gdGhhdCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBidXQgYSBxdWljayByZXZpZXcgaXMgYWx3YXlzIGdvb2QgcHJhY3RpY2UuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMDo1Ny42MDUwNzI2ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTQ5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzEtXFxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODMzLVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1MD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU1LVxcbm1tL0tjb25maWc6ODU2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg1Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2Mi1cXG5tbS9LY29uZmlnOjg2MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY0LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3MS1cXG5tbS9LY29uZmlnOjg3MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODc5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04ODgtXFxubW0vS2NvbmZpZzo4ODk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5MC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctODk4LVxcbm1tL0tjb25maWc6ODk5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA2LVxcbm1tL0tjb25maWc6OTA3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MDgtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNC1cXG5tbS9LY29uZmlnOjkxNTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxNi1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyND1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTMzLVxcbm1tL0tjb25maWc6OTM0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzUtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0Mi1cXG5tbS9LY29uZmlnOjk0MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0NC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1MC1cXG5tbS9LY29uZmlnOjk1MTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTUyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTgtXFxubW0vS2NvbmZpZzo5NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMDo1Ny42NTQyMzA2NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1OTM1ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOlxuXG4qKkludmVzdGlnYXRpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGhhbmRsZSBvbiB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBkZXBlbmRlbmNpZXMuIFRoaXMgbGlrZWx5IG1lYW5zIEkgbmVlZCB0byBzdGFydCB0cmFjaW5nIHRoaW5ncyBiYWNrIHRvIHVuZGVyc3RhbmQgd2hhdCByZWxpZXMgb24gaXQsIHdoYXQgaXQgZW5hYmxlcywgYW5kIHdoYXQgbWlnaHQgYnJlYWsgaWYgSSB3ZXJlIHRvIGNoYW5nZSBvciBkaXNhYmxlIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyBhbnl0aGluZyBkb3duc3RyZWFtIHRoYXQgbWlnaHQgbGV2ZXJhZ2UgdGhlIGFkdmFudGFnZXMgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCBvciB0aGF0IGNvdWxkIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQgYnkgaXRzIGFic2VuY2Ugb3IgbW9kaWZpY2F0aW9ucy4gUGVyaGFwcyBJJ2xsIG5lZWQgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGtlcm5lbCBtb2R1bGVzLCBvciBhcHBsaWNhdGlvbi1sZXZlbCBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byBnbyBiZXlvbmQgdGhlIHN1cmZhY2UgYW5kIGRldGVybWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIE5VTUEsIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuIEknbGwga2VlcCBhbiBvcGVuIG1pbmQsIGJlY2F1c2UgSSdtIGJldHRpbmcgdGhhdCB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIGNvbXBsZXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MDAuOTEzNTkxNTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyOTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5tbS9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gTU1VIFxcdTAwMjZcXHUwMDI2IEJMT0NLIFxcdTAwMjZcXHUwMDI2ICFBUkNIX05PX1NXQVBcXG5tbS9LY29uZmlnLTE1LVxcdGRlZmF1bHQgeVxcbi0tXFxubW0vS2NvbmZpZz0yMj1jb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxubW0vS2NvbmZpZzoyNDpcXHRkZXBlbmRzIG9uIFNXQVBcXG5tbS9LY29uZmlnLTI1LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm1tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbm1tL0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctMzgtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz00NT1jb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG5tbS9LY29uZmlnOjQ3OlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTQ4LVxcdGRlZmF1bHQgblxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG5tbS9LY29uZmlnLTYwLVxcdHByb21wdCBcXFwiRGVmYXVsdCBjb21wcmVzc29yXFxcIlxcbm1tL0tjb25maWc6NjE6XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctNjItXFx0ZGVmYXVsdCBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxuLS1cXG5tbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcbm1tL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIFpTV0FQXFxubW0vS2NvbmZpZy0xMTctICAgICAgIGRlZmF1bHQgXFxcImRlZmxhdGVcXFwiIGlmIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxuLS1cXG5tbS9LY29uZmlnPTEyOD1tZW51IFxcXCJac21hbGxvYyBhbGxvY2F0b3Igb3B0aW9uc1xcXCJcXG5tbS9LY29uZmlnOjEyOTpcXHRkZXBlbmRzIG9uIFpTTUFMTE9DXFxubW0vS2NvbmZpZy0xMzAtXFxuLS1cXG5tbS9LY29uZmlnPTE2OD1jb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXFxubW0vS2NvbmZpZy0xNjktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTcwOlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcXHUwMDI2XFx1MDAyNiAhVElOWV9SQ1VcXG5tbS9LY29uZmlnOjE3MTpcXHRkZXBlbmRzIG9uICFSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbm1tL0tjb25maWctMTcyLVxcbm1tL0tjb25maWc9MTczPWNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG5tbS9LY29uZmlnOjE3NTpcXHRkZXBlbmRzIG9uIEVYUEVSVCBcXHUwMDI2XFx1MDAyNiAhQ09NUElMRV9URVNUXFxubW0vS2NvbmZpZy0xNzYtXFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZz0yMDA9Y29uZmlnIFNMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vS2NvbmZpZy0yMDEtXFx0Ym9vbCBcXFwiUmFuZG9taXplIHNsYWIgZnJlZWxpc3RcXFwiXFxubW0vS2NvbmZpZzoyMDI6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yMDMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0yMDg9Y29uZmlnIFNMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJIYXJkZW4gc2xhYiBmcmVlbGlzdCBtZXRhZGF0YVxcXCJcXG5tbS9LY29uZmlnOjIxMDpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTIxMS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTIxNz1jb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcbm1tL0tjb25maWc6MjE5OlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjIwLVxcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbi0tXFxubW0vS2NvbmZpZz0yMzQ9Y29uZmlnIFNMVUJfU1RBVFNcXG4tLVxcbm1tL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXFxcIlxcbm1tL0tjb25maWc6MjM3OlxcdGRlcGVuZHMgb24gU1lTRlMgXFx1MDAyNlxcdTAwMjYgIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjQ3PWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnOjI0ODpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJQYXJ0aXRpb25lZCBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTI2Mz1jaG9pY2VcXG5tbS9LY29uZmlnLTI2NC1cXHRwcm9tcHQgXFxcIlBhcnRpdGlvbmVkIHNsYWIgY2FjaGUgbW9kZVxcXCJcXG5tbS9LY29uZmlnOjI2NTpcXHRkZXBlbmRzIG9uIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFU1xcbm1tL0tjb25maWctMjY2LVxcdGRlZmF1bHQgS01BTExPQ19QQVJUSVRJT05fVFlQRUQgaWYgQ0NfSEFTX0FMTE9DX1RPS0VOXFxuLS1cXG5tbS9LY29uZmlnPTI4Mz1jb25maWcgS01BTExPQ19QQVJUSVRJT05fVFlQRURcXG5tbS9LY29uZmlnLTI4NC1cXHRib29sIFxcXCJUeXBlIGJhc2VkIHNsYWIgY2FjaGUgc2VsZWN0aW9uIGZvciBub3JtYWwga21hbGxvY1xcXCJcXG5tbS9LY29uZmlnOjI4NTpcXHRkZXBlbmRzIG9uIENDX0hBU19BTExPQ19UT0tFTlxcbm1tL0tjb25maWctMjg2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MzU0PWNvbmZpZyBNTUFQX0FMTE9XX1VOSU5JVElBTElaRURcXG5tbS9LY29uZmlnLTM1NS1cXHRib29sIFxcXCJBbGxvdyBtbWFwcGVkIGFub255bW91cyBtZW1vcnkgdG8gYmUgdW5pbml0aWFsaXplZFxcXCJcXG5tbS9LY29uZmlnOjM1NjpcXHRkZXBlbmRzIG9uIEVYUEVSVCBcXHUwMDI2XFx1MDAyNiAhTU1VXFxubW0vS2NvbmZpZy0zNTctXFx0ZGVmYXVsdCBuXFxuLS1cXG5tbS9LY29uZmlnPTM3Nj1jb25maWcgU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzc3LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjM3ODpcXHRkZXBlbmRzIG9uIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzc5LVxcbm1tL0tjb25maWc9MzgwPWNob2ljZVxcbm1tL0tjb25maWctMzgxLVxcdHByb21wdCBcXFwiTWVtb3J5IG1vZGVsXFxcIlxcbm1tL0tjb25maWc6MzgyOlxcdGRlcGVuZHMgb24gU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzgzLVxcdGRlZmF1bHQgU1BBUlNFTUVNX01BTlVBTCBpZiBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUXFxuLS1cXG5tbS9LY29uZmlnPTM5MT1jb25maWcgRkxBVE1FTV9NQU5VQUxcXG5tbS9LY29uZmlnLTM5Mi1cXHRib29sIFxcXCJGbGF0IE1lbW9yeVxcXCJcXG5tbS9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uICFBUkNIX1NQQVJTRU1FTV9FTkFCTEUgfHwgQVJDSF9GTEFUTUVNX0VOQUJMRVxcbm1tL0tjb25maWctMzk0LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDA2PWNvbmZpZyBTUEFSU0VNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy00MDctXFx0Ym9vbCBcXFwiU3BhcnNlIE1lbW9yeVxcXCJcXG5tbS9LY29uZmlnOjQwODpcXHRkZXBlbmRzIG9uIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbm1tL0tjb25maWctNDA5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDIxPWNvbmZpZyBTUEFSU0VNRU1cXG5tbS9LY29uZmlnLTQyMi1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0MjM6XFx0ZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgXFx1MDAyNlxcdTAwMjYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy00MjQtXFxubW0vS2NvbmZpZz00MjU9Y29uZmlnIEZMQVRNRU1cXG5tbS9LY29uZmlnLTQyNi1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0Mjc6XFx0ZGVwZW5kcyBvbiAhU1BBUlNFTUVNIHx8IEZMQVRNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy00MjgtXFxuLS1cXG5tbS9LY29uZmlnPTQ0Nz1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcXG5tbS9LY29uZmlnLTQ0OC1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0NDk6XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU0gXFx1MDAyNlxcdTAwMjYgIVNQQVJTRU1FTV9TVEFUSUNcXG5tbS9LY29uZmlnLTQ1MC1cXG4tLVxcbm1tL0tjb25maWc9NDU0PWNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU1LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjQ1NjpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTSBcXHUwMDI2XFx1MDAyNiBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcXG5tbS9LY29uZmlnLTQ1Ny1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTQ4MD1jb25maWcgSEFWRV9HVVBfRkFTVFxcbm1tL0tjb25maWc6NDgxOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy00ODItXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz01MDQ9Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxubW0vS2NvbmZpZy01MDUtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NTA2OlxcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXFxubW0vS2NvbmZpZy01MDctXFxuLS1cXG5tbS9LY29uZmlnPTUxMj1tZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxuLS1cXG5tbS9LY29uZmlnLTUxNC1cXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWc6NTE1OlxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnOjUxNjpcXHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZzo1MTc6XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbm1tL0tjb25maWctNTE4LVxcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXFxuLS1cXG5tbS9LY29uZmlnPTU4ND1jb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG5tbS9LY29uZmlnLTU4NS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo1ODY6XFx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbm1tL0tjb25maWctNTg3LVxcbi0tXFxubW0vS2NvbmZpZz01OTA9Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuLS1cXG5tbS9LY29uZmlnLTU5Ni0jIERlZmF1bHQgdG8gNCBmb3Igd2lkZXIgdGVzdGluZywgdGhvdWdoIDggbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS5cXG5tbS9LY29uZmlnOjU5NzojIEFSTSdzIGFkanVzdF9wdGUgKHVudXNlZCBpZiBWSVBUKSBkZXBlbmRzIG9uIG1tLXdpZGUgcGFnZV90YWJsZV9sb2NrLlxcbm1tL0tjb25maWctNTk4LSMgUEEtUklTQyA3eHh4J3Mgc3BpbmxvY2tfdCB3b3VsZCBlbmxhcmdlIHN0cnVjdCBwYWdlIGZyb20gMzIgdG8gNDQgYnl0ZXMuXFxuLS1cXG5tbS9LY29uZmlnPTYwND1jb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYwNS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo2MDY6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjYwNzpcXHRkZXBlbmRzIG9uIFNNUFxcbm1tL0tjb25maWc6NjA4OlxcdGRlcGVuZHMgb24gTlJfQ1BVUyBcXHUwMDNlPSA0XFxubW0vS2NvbmZpZzo2MDk6XFx0ZGVwZW5kcyBvbiAhQVJNIHx8IENQVV9DQUNIRV9WSVBUXFxubW0vS2NvbmZpZzo2MTA6XFx0ZGVwZW5kcyBvbiAhUEFSSVNDIHx8IFBBMjBcXG5tbS9LY29uZmlnOjYxMTpcXHRkZXBlbmRzIG9uICFTUEFSQzMyXFxubW0vS2NvbmZpZzo2MTI6XFx0ZGVwZW5kcyBvbiAhVU1MXFxubW0vS2NvbmZpZy02MTMtXFxuLS1cXG5tbS9LY29uZmlnPTYxNz1jb25maWcgU1BMSVRfUE1EX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYxOC1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo2MTk6XFx0ZGVwZW5kcyBvbiBTUExJVF9QVEVfUFRMT0NLUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLXFxubW0vS2NvbmZpZy02MjAtXFxuLS1cXG5tbS9LY29uZmlnPTYyOD1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjMwLVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6NjMxOlxcdGRlcGVuZHMgb24gTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IEJBTExPT05cXG5tbS9LY29uZmlnLTYzMi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTY0MD1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NDMtXFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWc6NjQ0OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy02NDUtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz02NTU9Y29uZmlnIENPTVBBQ1RfVU5FVklDVEFCTEVfREVGQVVMVFxcbm1tL0tjb25maWctNjU2LVxcdGludFxcbm1tL0tjb25maWc6NjU3OlxcdGRlcGVuZHMgb24gQ09NUEFDVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlZmF1bHQgMCBpZiBQUkVFTVBUX1JUXFxuLS1cXG5tbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjczLVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6Njc0OlxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnLTY3NS1cXHRzZWxlY3QgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTY4Mj1jb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODMtXFx0Ym9vbFxcbm1tL0tjb25maWc6Njg0OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy02ODUtXFxuLS1cXG5tbS9LY29uZmlnPTcyNj1jb25maWcgS1NNXFxubW0vS2NvbmZpZy03MjctXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcbm1tL0tjb25maWc6NzI4OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy03MjktXFx0c2VsZWN0IFhYSEFTSFxcbi0tXFxubW0vS2NvbmZpZz03NDE9Y29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUlxcbm1tL0tjb25maWctNzQyLVxcdGludCBcXFwiTG93IGFkZHJlc3Mgc3BhY2UgdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvblxcXCJcXG5tbS9LY29uZmlnOjc0MzpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNzQ0LVxcdGRlZmF1bHQgNDA5Nlxcbi0tXFxubW0vS2NvbmZpZz03NjM9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZzo3NjQ6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjc2NTpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2Ni1cXHRib29sIFxcXCJFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXFxcIlxcbi0tXFxubW0vS2NvbmZpZz03NzQ9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbm1tL0tjb25maWctNzc1LVxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG5tbS9LY29uZmlnOjc3NjpcXHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubW0vS2NvbmZpZy03NzctXFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuLS1cXG5tbS9LY29uZmlnPTc3OT1jb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbm1tL0tjb25maWctNzgwLVxcdGludCBcXFwiVHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXFxcIlxcbm1tL0tjb25maWc6NzgxOlxcdGRlcGVuZHMgb24gIU1NVVxcbm1tL0tjb25maWctNzgyLVxcdGRlZmF1bHQgMVxcbi0tXFxubW0vS2NvbmZpZz04MTM9Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxubW0vS2NvbmZpZy04MTQtXFx0Ym9vbCBcXFwiQWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcXFwiXFxubW0vS2NvbmZpZzo4MTU6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODE2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9ODMyPW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbm1tL0tjb25maWc6ODM0OlxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxubW0vS2NvbmZpZy04MzUtXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWc9OTY4PWNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTY5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjk3MDpcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXFx1MDAyNlxcdTAwMjYgU1dBUCBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbm1tL0tjb25maWctOTcxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTAxND1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxcbm1tL0tjb25maWctMTAxNS1cXHRkZWZfYm9vbCBuXFxubW0vS2NvbmZpZzoxMDE2OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTEwMTctXFxubW0vS2NvbmZpZz0xMDE4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMTktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTAyMDpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy0xMDIxLVxcbm1tL0tjb25maWc9MTAyMj1jb25maWcgQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDIzLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMjQ6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9LY29uZmlnLTEwMjUtXFxuLS1cXG5tbS9LY29uZmlnPTEwMzY9Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxcbm1tL0tjb25maWc6MTAzNzpcXHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxcbm1tL0tjb25maWctMTAzOC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTEwNTM9Y29uZmlnIENNQVxcbm1tL0tjb25maWctMTA1NC1cXHRib29sIFxcXCJDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcXFwiXFxubW0vS2NvbmZpZzoxMDU1OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xMDU2LVxcdHNlbGVjdCBNSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWc9MTA2OD1jb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwNjktXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbm1tL0tjb25maWc6MTA3MDpcXHRkZXBlbmRzIG9uIENNQSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbm1tL0tjb25maWctMTA3MS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwNzQ9Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA3NS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vS2NvbmZpZzoxMDc2OlxcdGRlcGVuZHMgb24gQ01BIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vS2NvbmZpZy0xMDc3LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTA4MT1jb25maWcgQ01BX0FSRUFTXFxubW0vS2NvbmZpZy0xMDgyLVxcdGludCBcXFwiTWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXFxcIlxcbm1tL0tjb25maWc6MTA4MzpcXHRkZXBlbmRzIG9uIENNQVxcbm1tL0tjb25maWctMTA4NC1cXHRkZWZhdWx0IDIwIGlmIE5VTUFcXG4tLVxcbm1tL0tjb25maWc9MTEyOD1jb25maWcgTUVNX1NPRlRfRElSVFlcXG5tbS9LY29uZmlnLTExMjktXFx0Ym9vbCBcXFwiVHJhY2sgbWVtb3J5IGNoYW5nZXNcXFwiXFxubW0vS2NvbmZpZzoxMTMwOlxcdGRlcGVuZHMgb24gQ0hFQ0tQT0lOVF9SRVNUT1JFIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9TT0ZUX0RJUlRZIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5tbS9LY29uZmlnLTExMzEtXFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuLS1cXG5tbS9LY29uZmlnPTExNDM9Y29uZmlnIFNUQUNLX01BWF9ERUZBVUxUX1NJWkVfTUJcXG4tLVxcbm1tL0tjb25maWctMTE0Ni1cXHRyYW5nZSA4IDIwNDhcXG5tbS9LY29uZmlnOjExNDc6XFx0ZGVwZW5kcyBvbiBTVEFDS19HUk9XU1VQIFxcdTAwMjZcXHUwMDI2ICghNjRCSVQgfHwgQ09NUEFUKVxcbm1tL0tjb25maWctMTE0OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTExNTU9Y29uZmlnIERFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVRcXG5tbS9LY29uZmlnLTExNTYtXFx0Ym9vbCBcXFwiRGVmZXIgaW5pdGlhbGlzYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIGt0aHJlYWRzXFxcIlxcbm1tL0tjb25maWc6MTE1NzpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTVxcbm1tL0tjb25maWc6MTE1ODpcXHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cXG5tbS9LY29uZmlnOjExNTk6XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbm1tL0tjb25maWc6MTE2MDpcXHRkZXBlbmRzIG9uICFLTVNBTlxcbm1tL0tjb25maWctMTE2MS1cXHRzZWxlY3QgUEFEQVRBXFxuLS1cXG5tbS9LY29uZmlnPTExNzk9Y29uZmlnIElETEVfUEFHRV9UUkFDS0lOR1xcbm1tL0tjb25maWctMTE4MC1cXHRib29sIFxcXCJFbmFibGUgaWRsZSBwYWdlIHRyYWNraW5nXFxcIlxcbm1tL0tjb25maWc6MTE4MTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWctMTE4Mi1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4tLVxcbm1tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxcbm1tL0tjb25maWctMTIxOC1cXHRib29sIFxcXCJTdXBwb3J0IERNQTMyIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbm1tL0tjb25maWc6MTIxOTpcXHRkZXBlbmRzIG9uICFYODZfMzJcXG5tbS9LY29uZmlnLTEyMjAtXFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuLS1cXG5tbS9LY29uZmlnPTEyMjI9Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjIzLVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxubW0vS2NvbmZpZzoxMjI0OlxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctMTIyNS1cXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuLS1cXG5tbS9LY29uZmlnPTEyNDQ9Y29uZmlnIEhNTV9NSVJST1JcXG5tbS9LY29uZmlnLTEyNDUtXFx0Ym9vbFxcbm1tL0tjb25maWc6MTI0NjpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTI0Ny1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnPTEyNTI9Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUzLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5tbS9LY29uZmlnOjEyNTQ6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTI1NS1cXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnPTEyOTE9Y29uZmlnIEdVUF9URVNUXFxubW0vS2NvbmZpZy0xMjkyLVxcdGJvb2wgXFxcIkVuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcXFwiXFxubW0vS2NvbmZpZzoxMjkzOlxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG5tbS9LY29uZmlnLTEyOTQtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMzExPWNvbW1lbnQgXFxcIkdVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZFxcXCJcXG5tbS9LY29uZmlnOjEzMTI6XFx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0ZTXFxubW0vS2NvbmZpZy0xMzEzLVxcbi0tXFxubW0vS2NvbmZpZz0xMzE3PWNvbmZpZyBETUFQT09MX1RFU1RcXG5tbS9LY29uZmlnLTEzMTgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBhIG1vZHVsZSB0byBydW4gdGltZSB0ZXN0cyBvbiBkbWFfcG9vbFxcXCJcXG5tbS9LY29uZmlnOjEzMTk6XFx0ZGVwZW5kcyBvbiBIQVNfRE1BXFxubW0vS2NvbmZpZy0xMzIwLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTM0MT1jb25maWcgU0VDUkVUTUVNXFxuLS1cXG5tbS9LY29uZmlnLTEzNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG5tbS9LY29uZmlnOjEzNDQ6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxcbm1tL0tjb25maWctMTM0NS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEzNTA9Y29uZmlnIEFOT05fVk1BX05BTUVcXG5tbS9LY29uZmlnLTEzNTEtXFx0Ym9vbCBcXFwiQW5vbnltb3VzIFZNQSBuYW1lIHN1cHBvcnRcXFwiXFxubW0vS2NvbmZpZzoxMzUyOlxcdGRlcGVuZHMgb24gUFJPQ19GUyBcXHUwMDI2XFx1MDAyNiBBRFZJU0VfU1lTQ0FMTFMgXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vS2NvbmZpZy0xMzUzLVxcbi0tXFxubW0vS2NvbmZpZz0xMzc0PWNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzNzUtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTM3NjpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcXG5tbS9LY29uZmlnLTEzNzctXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMzgzPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG5tbS9LY29uZmlnLTEzODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcXFwiXFxubW0vS2NvbmZpZzoxMzg1OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xMzg2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTItXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzoxMzkzOlxcdGRlcGVuZHMgb24gVVNFUkZBVUxURkQgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxubW0vS2NvbmZpZy0xMzk0LVxcbi0tXFxubW0vS2NvbmZpZz0xNDAxPWNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxubW0vS2NvbmZpZzoxNDAzOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xNDA0LVxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG5tbS9LY29uZmlnOjE0MDU6XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZy0xNDA2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQxMD1jb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDExLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbm1tL0tjb25maWc6MTQxMjpcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MTMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xNDE2PWNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE3LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG5tbS9LY29uZmlnOjE0MTg6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDE5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQyNT1jb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjYtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQyNzpcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxubW0vS2NvbmZpZy0xNDI4LSMgfVxcbi0tXFxubW0vS2NvbmZpZz0xNDMzPWNvbmZpZyBQRVJfVk1BX0xPQ0tcXG5tbS9LY29uZmlnLTE0MzQtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQzNTpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBTTVBcXG5tbS9LY29uZmlnLTE0MzYtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xNDQyPWNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbm1tL0tjb25maWctMTQ0My1cXHRib29sXFxubW0vS2NvbmZpZzoxNDQ0OlxcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcXG5tbS9LY29uZmlnLTE0NDUtXFxuLS1cXG5tbS9LY29uZmlnPTE0NTU9Y29uZmlnIE5VTUFfRU1VXFxubW0vS2NvbmZpZy0xNDU2LVxcdGJvb2wgXFxcIk5VTUEgZW11bGF0aW9uXFxcIlxcbm1tL0tjb25maWc6MTQ1NzpcXHRkZXBlbmRzIG9uIE5VTUFfTUVNQkxLU1xcbm1tL0tjb25maWc6MTQ1ODpcXHRkZXBlbmRzIG9uIFg4NiB8fCBHRU5FUklDX0FSQ0hfTlVNQVxcbm1tL0tjb25maWctMTQ1OS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0NzM9Y29uZmlnIFBUX1JFQ0xBSU1cXG5tbS9LY29uZmlnLTE0NzQtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQ3NTpcXHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXFx1MDAyNlxcdTAwMjYgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXFxubW0vS2NvbmZpZy0xNDc2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQ5Mj1jb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXFxubW0vS2NvbmZpZy0xNDkzLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIGxhenkgTU1VIG1vZGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9LY29uZmlnOjE0OTQ6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19MQVpZX01NVV9NT0RFXFxubW0vS2NvbmZpZzoxNDk1OlxcdGRlcGVuZHMgb24gS1VOSVRcXG5tbS9LY29uZmlnLTE0OTYtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MDAuOTYzMjI4OTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2ODUwNTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgVEhQIGFuZCBNRU1DRyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXRzIGF2YWlsYWJpbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IGJvdGggYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIHRoZSBhYnNlbmNlIG9mIGBQUkVFTVBUX1JUYC4gVGhlcmVmb3JlLCB3aGVuIGRvY3VtZW50aW5nIHRoZXNlLCBJIHNob3VsZCBqdXN0IGxpc3QgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTUNHYC4gV2FpdCBhIG1pbnV0ZSwgd2hlcmUgaXMgYE1FTUNHYCBkZWZpbmVkPyBBaCwgcmlnaHQsIHRoYXQncyBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgLiBJIHNob3VsZCBnbyBjaGVjayB0aGF0IGZpbGUgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTowNC44MzE3Mzg2MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjI2NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4My1cXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4NS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDYtXFxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDgtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MDQuODc4OTc0MDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODI3ODI1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgRnVuY3Rpb24gU2VsZWN0aW9uIGZvciB0bXBmcy9zaG1lbSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBiZXN0IGZvY3VzIGZ1bmN0aW9ucyBmb3IgdGhpcyB0bXBmcy9zaG1lbSBjaGFuZ2UsIGNvbnNpZGVyaW5nIGBNRU1DR2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRmlyc3QsIEkgcnVsZWQgb3V0IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIHF1aWNrbHksIGRlc3BpdGUgdGhlaXIgQVBJIGVudHJ5IHBvaW50IHN0YXR1cy4gIGBzaG1lbV9nZXRfZm9saW9gIGlzIGEgaG90IHBhdGg7IGl0J3MgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSB3aGljaCBjb3VsZCBza2V3IHRoZSByZXN1bHRzLCB3aGljaCBpcyB1bmRlc2lyYWJsZS4gV2Ugd2FudCBhIG1vcmUgdGFyZ2V0ZWQgdGVzdC5cblxuVGhlbiwgSSBsb29rZWQgYXQgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGJ1dCBpdCdzIHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgZnVuY3Rpb25zLCBidXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgb25seSBhIHByb2JsZW0gaWYgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIE5PVCBpbmxpbmVkLCB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBhbmQgKmNhbiogYmUgdXNlZC4gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIHN0YXRpYywgYnV0IGlzIGFzc2lnbmVkIHRvIGBzaG1lbV9vcHMuZnJlZV9jYWNoZWRfb2JqZWN0c2AsIHNvIGl04oCZcyBsaWtlbHkgbm90IGlubGluZWQgYmVjYXVzZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWFrZXMgaXQgcHJvbWlzaW5nLiBBbmQgeWVzLCBpdCBsb29rcyBsaWtlIHRoZSBtb2RpZmllZCBsb2dpYydzIGVudHJ5IHBvaW50IGlzIGV4YWN0bHkgaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQncyBhIHN0cm9uZyBjb250ZW5kZXIuIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuXG5cbkkgcmV2aWV3ZWQgdGhlIG90aGVyIGZ1bmN0aW9ucywgYnV0IGZvdW5kIHRoYXQgYHNobWVtX2V2aWN0X2lub2RlYCwgYW5kIGBzaG1lbV9maWxsX3N1cGVyYCBhcmUgYWxzbyBzdGF0aWMsIGJ1dCBjYWxsZWQgaW5kaXJlY3RseSB2aWEgZnVuY3Rpb24gcG9pbnRlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBTbywgdGhlc2UgYXJlIGFsc28gbm90IGlubGluZWQuXG5cblRoZSBiZXN0IGZvY3VzIGZ1bmN0aW9ucywgSSd2ZSBjb25jbHVkZWQsIGFyZSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIFRoZXkncmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgc2hyaW5rZXIgbG9naWMgbW9kaWZpY2F0aW9ucy5cblxuRmluYWxseSwgSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgc2htZW1fZ2V0X2ZvbGlvYCBhcyBpdCBpcyBhbiBlbnRyeSBwb2ludCwgYW5kIHRoZSBhbGxvY2F0aW9uIHBhdGggaW50ZXJhY3RzIHdpdGggdGhlIHNocmlua2xpc3Q6XG5gYGBjXG5cdGlmIChhbGxvY2VkIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcblx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG5cdFx0Lypcblx0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG5cdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cblx0XHQgKi9cblx0XHRzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApO1xuXHR9XG5gYGBcbkhvd2V2ZXIsIHRoZSBhbGxvY2F0aW9uIG9mIGZvbGlvcyB0byB0aGUgc2hyaW5rbGlzdCBvbmx5IG9jY3VycyBmb3IgaHVnZSBmb2xpb3Mgb24gdG1wZnMsIHNvIGl0J3Mgbm90IGEgZ2VuZXJhbCBob3QgcGF0aC4gVGhlIGZ1bmN0aW9uIGBzaG1lbV9nZXRfZm9saW9gIGl0c2VsZiwgaG93ZXZlciwgaXMgY2FsbGVkIG9uIEFMTCBwYWdlIGZhdWx0cy4gV2hpbGUgYHNobWVtX2dldF9mb2xpb2Agd291bGQgaGl0IHRoYXQgYWxsb2NhdGlvbiBwYXRoIGFuZCBiZSByZWxldmFudCwgaXQncyBhIHZlcnkgaG90IHBhdGgsIHNvIEknbGwgc3RpY2sgd2l0aCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAgZm9yIG5vdywgdG8gZW5zdXJlIHNwZWNpZmljaXR5LiBJJ2xsIGFsc28gaW5jbHVkZSBgc2htZW1fZXZpY3RfaW5vZGVgIGFzIGl0IGNhbGxzIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLiBJIGp1c3QgY2hlY2tlZCB0aGF0IEkgc3BlbGxlZCBhbGwgdGhlIGZ1bmN0aW9uIG5hbWVzIGNvcnJlY3RseS4uLiBZZXMsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBpdCBpcy5cblxuVGhlIHBhdGNoIGFsc28gc3BlY2lmaWVzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSB1c2VkLCBidXQgYENPTkZJR19TSE1FTWAgaXMgdXN1YWxseSBlbmFibGVkIHNvIG5vIG5lZWQgdG8gdmVyaWZ5IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA0NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MTguMTYxNzU5NTQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTM0MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjE4LjIwNzMwOTc3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ2NDc2MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsJ3MgaW5pdGlhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSXQncyB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFNITUVNYCBpcyBhIHByZXR0eSBzcGVjaWZpYyB0ZXJtIHRoYXQgc2hvdWxkIHlpZWxkIHJlbGV2YW50IHJlc3VsdHMgaWYgSSB1c2UgaXQgYXMgYSBzZWFyY2ggdGVybS4gTXkgYWltIGlzIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgaG93IHNoYXJlZCBtZW1vcnkgaXMgY29uZmlndXJlZCwgY29udHJvbGxlZCBhbmQgc3VwcG9ydGVkLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIHN5bWJvbHMgYXJlIHNvIHRoYXQgSSBjYW4gdGhlbiB0cmFjZSB0aGVpciBkZXBlbmRlbmN5IHRyZWVzLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBzZXR0aW5ncy4gTGV0J3Mgc2VlIHdoYXQgYGluaXQvS2NvbmZpZ2AgcmV2ZWFscy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk0NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjIyLjg1Mzc4ODY2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTQ4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkzMT1jb25maWcgRVZFTlRGRFxcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIFNITUVNXFxuaW5pdC9LY29uZmlnLTE5NDEtXFx0Ym9vbCBcXFwiVXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjIyLjkwMTIxMTg3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTIzOTk0ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNoYXJlZCBNZW1vcnkgSHVnZSBQYWdlIFNocmlua2VyIFBhdGNoKipcblxuT2theSwgc28gYFNITUVNYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYWNjb3JkaW5nIHRvIGBpbml0L0tjb25maWdgLCB3aGljaCBpcyBnb29kIG5ld3MuIEFuZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgYWxsIGJlaW5nIGVuYWJsZWQgdG9vLCB0aGluZ3MgYXJlIGxvb2tpbmcgcHJvbWlzaW5nLlxuXG5MZXQncyBkaXZlIGJhY2sgaW50byB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBtb3ZpbmcgdGhlIHNocmlua2VyIGZyb20gYSBnbG9iYWwgbGlzdCB0byBhIHBlci1tZW1jZyBgbGlzdF9scnVgLiBUaGUgd2F5IGl0IHVzZXMgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgaXMgY2hhbmdpbmcgdG8gdXNlIGBsaXN0X2xydV9zaHJpbmtfd2Fsa2AgYW5kIGBsaXN0X2xydV93YWxrYC4gVGhlcmUncyBhIHdob2xlIHN1aXRlIG9mIG5ldyBmdW5jdGlvbnMgYWRkZWQ6IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIHdoaWNoIGFyZSBhbGwgcGFydCBvZiB0aGF0IG5ldyBgbGlzdF9scnVgIGJhc2VkIHNocmlua2VyIGltcGxlbWVudGF0aW9uLlxuXG5JdCBhbHNvIGFwcGVhcnMgdGhhdCBgc2htZW1fc2JfaW5mb2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdGAgaW5zdGVhZCBvZiB0aGUgb2xkIGBzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua2xpc3RgLiBTaW1pbGFybHksIGBzaG1lbV9pbm9kZV9pbmZvYCBpcyBub3cgaW5jbHVkaW5nIGBzaHJpbmtsaXN0X21lbWNnYCBhbmQgYHNocmlua2xpc3RfbmlkYC5cblxuVGhlIGxvZ2ljICpsb29rcyogZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIHJlYWNoYWJsZS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2V2aWN0X2lub2RlYCwgYW5kIGBzaG1lbV9maWxsX3N1cGVyYC4gSGFuZyBvbiBhIHNlY29uZC4uLiBgc2htZW1fZXZpY3RfaW5vZGVgIGFuZCBgc2htZW1fZmlsbF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBidXQgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLiBJbnRlcmVzdGluZy4gQXJlIHRoZXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zPyBZZXMsIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBub24tc3RhdGljLiBCdXQsIEkgdGhpbmsgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBpbmNsdWRlIHdpbGwgYmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIHNpbmNlIHRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBtb2RpZmllZCBzaHJpbmtlciBsb2dpYy5cblxuTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzbid0IGRlZmluZWQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozMS4wMjUyMTA0MTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg2MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3VudXNlZF9odWdlX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtODI5LVxcbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcXG5tbS9zaG1lbS5jLTgzMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5tbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL3NobWVtLmMtODM4LXtcXG5tbS9zaG1lbS5jOjgzOTpcXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiAqc2NhbiA9IGFyZztcXG5tbS9zaG1lbS5jLTg0MC1cXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcXG4tLVxcbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbi0tXFxubW0vc2htZW0uYy05MzMte1xcbm1tL3NobWVtLmM6OTM0OlxcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47XFxubW0vc2htZW0uYy05MzUtXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tLVxcbm1tL3NobWVtLmMtMTAyMC1cXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbm1tL3NobWVtLmMtMTAyMi1cXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vc2htZW0uYz01NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTU0MjYtXFx0Lm5yX2NhY2hlZF9vYmplY3RzXFx0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcXG5tbS9zaG1lbS5jOjU0Mjc6XFx0LmZyZWVfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXFxubW0vc2htZW0uYy01NDI4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozMS4wNzMwMDIxOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2Nzk3OTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEZWNvZGluZyB0aGUgQ29tcGlsYXRpb24gQ29udGV4dCoqXG5cbkhtbSwgc28gSSd2ZSBzcG90dGVkIGEgY3J1Y2lhbCBkZXRhaWwgaGVyZTogdGhhdCBgI2VuZGlmYCByaWdodCBhZnRlciB0aGUgYXNzaWdubWVudCB0byBgZnJlZV9jYWNoZWRfb2JqZWN0c2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiAgVGhlIGZhY3QgdGhhdCBpdCdzICphZnRlciogdGhlIGFzc2lnbm1lbnQgaXMgaW1wb3J0YW50LCBhcyBpdCBzdWdnZXN0cyB0aGUgZGVmaW5pdGlvbiBvciBhc3NpZ25tZW50IG1pZ2h0IG9ubHkgYmUgcHJlc2VudCB1bmRlciBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9ucy4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyBpbW1lZGlhdGVseSBwaXF1ZWQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gcGxheS4gTGV0IG1lIHNlZS4uLiBJIG5lZWQgdG8gY2hlY2sgcHJlY2lzZWx5IHdoaWNoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgc3Vycm91bmQgdGhlIGRlZmluaXRpb24gb2YgYHNobWVtX29wc2AsIGJlY2F1c2UgdGhhdCdzIHdoYXQgc2VlbXMgdG8gY29udHJvbCB3aGV0aGVyIGBmcmVlX2NhY2hlZF9vYmplY3RzYCBpcyBhc3NpZ25lZCB0byBhIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZSBgI2lmZGVmYHMgYXJlIHRoZSBrZXkuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgcmV2ZWFsIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MzQuODQwOTg0NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTcwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MjU0PXN0YXRpYyB2b2lkIHNobWVtX2lub2RlX3VuYWNjdF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBwYWdlcylcXG4tLVxcbm1tL3NobWVtLmMtMjY2LVxcbm1tL3NobWVtLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHM7XFxubW0vc2htZW0uYy0yNjgtc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcztcXG4tLVxcbm1tL3NobWVtLmM9NTEyNT1zdGF0aWMgaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxubW0vc2htZW0uYy01MjEyLVxcdHNiLVxcdTAwM2VzX21hZ2ljID0gVE1QRlNfTUFHSUM7XFxubW0vc2htZW0uYzo1MjEzOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnNobWVtX29wcztcXG5tbS9zaG1lbS5jLTUyMTQtXFx0c2ItXFx1MDAzZXNfdGltZV9ncmFuID0gMTtcXG4tLVxcbm1tL3NobWVtLmM9NTQwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxubW0vc2htZW0uYy01NDEwLVxcbm1tL3NobWVtLmM6NTQxMTpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xcbm1tL3NobWVtLmMtNTQxMi1cXHQuYWxsb2NfaW5vZGVcXHQ9IHNobWVtX2FsbG9jX2lub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozNC44ODk1NjA4MTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzE2Mjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vc2htZW0uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGBtbS9zaG1lbS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU0MTEuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IHBvaW50IGluIHRoZSBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgYXJlYSB0byBiZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBwZXJoYXBzIHNvbWUgc29ydCBvZiBtZXRhZGF0YSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3Mg4oCTIGNvdWxkIGJlIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGJlaW5nIHVzZWQsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGNhY2hlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBJIGFudGljaXBhdGUgdGhlIGltbWVkaWF0ZSBjb250ZXh0IHdpbGwgcHJvdmlkZSB0aGUga2V5IGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MzguNjA2NzI4NTMzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG41NDEyOlxcdFxcdC5hbGxvY19pbm9kZVxcdD0gc2htZW1fYWxsb2NfaW5vZGUsXFxuNTQxMzpcXHRcXHQuZnJlZV9pbm9kZVxcdD0gc2htZW1fZnJlZV9pbl9jb3JlX2lub2RlLFxcbjU0MTQ6XFx0XFx0LmRlc3Ryb3lfaW5vZGVcXHQ9IHNobWVtX2Rlc3Ryb3lfaW5vZGUsXFxuNTQxNTpcXHQjaWZkZWYgQ09ORklHX1RNUEZTXFxuNTQxNjpcXHRcXHQuc3RhdGZzXFx0XFx0PSBzaG1lbV9zdGF0ZnMsXFxuNTQxNzpcXHRcXHQuc2hvd19vcHRpb25zXFx0PSBzaG1lbV9zaG93X29wdGlvbnMsXFxuNTQxODpcXHQjZW5kaWZcXG41NDE5OlxcdCNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG41NDIwOlxcdFxcdC5nZXRfZHF1b3RzXFx0PSBzaG1lbV9nZXRfZHF1b3RzLFxcbjU0MjE6XFx0I2VuZGlmXFxuNTQyMjpcXHRcXHQuZXZpY3RfaW5vZGVcXHQ9IHNobWVtX2V2aWN0X2lub2RlLFxcbjU0MjM6XFx0XFx0LmRyb3BfaW5vZGVcXHQ9IGlub2RlX2p1c3RfZHJvcCxcXG41NDI0OlxcdFxcdC5wdXRfc3VwZXJcXHQ9IHNobWVtX3B1dF9zdXBlcixcXG41NDI1OlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG41NDI2OlxcdFxcdC5ucl9jYWNoZWRfb2JqZWN0c1xcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXFxuNTQyNzpcXHRcXHQuZnJlZV9jYWNoZWRfb2JqZWN0c1xcdD0gc2htZW1fdW51c2VkX2h1Z2Vfc2NhbixcXG41NDI4OlxcdCNlbmRpZlxcbjU0Mjk6XFx0fTtcXG41NDMwOlxcdFxcbjU0MzE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHMgPSB7XFxuNTQzMjpcXHRcXHQuZmF1bHRcXHRcXHQ9IHNobWVtX2ZhdWx0LFxcbjU0MzM6XFx0XFx0Lm1hcF9wYWdlc1xcdD0gZmlsZW1hcF9tYXBfcGFnZXMsXFxuNTQzNDpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG41NDM1OlxcdFxcdC5zZXRfcG9saWN5ICAgICA9IHNobWVtX3NldF9wb2xpY3ksXFxuNTQzNjpcXHRcXHQuZ2V0X3BvbGljeSAgICAgPSBzaG1lbV9nZXRfcG9saWN5LFxcbjU0Mzc6XFx0I2VuZGlmXFxuNTQzODpcXHQjaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXFxuNTQzOTpcXHRcXHQudWZmZF9vcHNcXHQ9IFxcdTAwMjZzaG1lbV91ZmZkX29wcyxcXG41NDQwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozOC42MDY5NTE2OTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MDg4MTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVucGFja2luZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIGFuZCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAuLi4gSSBzZWUgdGhleSdyZSBvbmx5ICphY3R1YWxseSogYXNzaWduZWQgYSB2YWx1ZSB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFzIGV4cGVjdGVkLiBUaGV5J3JlIHBhcnQgb2YgdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZSBtYWNoaW5lcnksIHNvIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGFyZSB0aGV5IGV2ZW4gKmRlZmluZWQqIHdoZW4gVEhQIGlzICpkaXNhYmxlZCo/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgc29tZWhvdyBwb2xsdXRpbmcgdGhlIG5hbWVzcGFjZSB3aGVuIHRoZXkgc2hvdWxkbid0IGJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYCNpZmRlZmAgY29uZGl0aW9ucyBhcm91bmQgdGhlaXIgZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGJlaGF2aW5nIGFzIGl0IHNob3VsZCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIExldCdzIHNlZS4uLiBhIHF1aWNrIGNoZWNrIHNob3VsZCBzZXR0bGUgaXQuIEdvdHRhIGJlIGNhcmVmdWwgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjQyLjQ5NzgzNjQ5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2htZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDMwOlxcdH1cXG4xMDMxOlxcdFxcbjEwMzI6XFx0c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4xMDMzOlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuMTAzNDpcXHR7XFxuMTAzNTpcXHRcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xcbjEwMzY6XFx0XFxuMTAzNzpcXHRcXHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjKTtcXG4xMDM4OlxcdH1cXG4xMDM5OlxcdCNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4xMDQwOlxcdFxcbjEwNDE6XFx0I2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4xMDQ0OlxcdFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwKVxcbjEwNDU6XFx0e1xcbjEwNDY6XFx0fVxcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4xMDQ5OlxcdHtcXG4xMDUwOlxcdH1cXG4xMDUxOlxcdFxcbjEwNTI6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuMTA1MzpcXHRcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuMTA1NDpcXHR7XFxuMTA1NTpcXHRcXHRyZXR1cm4gMDtcXG4xMDU2OlxcdH1cXG4xMDU3OlxcdFxcbjEwNTg6XFx0c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuMTA1OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjQyLjQ5ODEwNDE1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA0OTU4NDU5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0J3MgYmVjb21lIGNsZWFyOiBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqZGlzYWJsZWQqLCB0aGVzZSBlbGVtZW50cywgd2hhdGV2ZXIgdGhleSBhcmUsIGFyZW4ndCBldmVuIGRlZmluZWQuIFRoYXQgbWVhbnMgdGhlaXIgdmVyeSBleGlzdGVuY2UgaGluZ2VzIG9uIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGJlaW5nIGVuYWJsZWQuIE5vIGFtYmlndWl0eSB0aGVyZS4gSXQgZGVmaW5pdGl2ZWx5IGVzdGFibGlzaGVzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYSBtYW5kYXRvcnkgcHJlcmVxdWlzaXRlLlxuXG5Ob3csIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgQ09ORklHX01FTUNHYCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZXBhZ2UgY29uZmlndXJhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEknbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtbS9zaG1lbS5jYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDk6MjIuOTkzOTUzNzM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc0MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnO1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcXG4gNzQzOlxcdFxcbiA3NDQ6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA3NDU6XFx0fVxcbiA3NDY6XFx0XFxuIDc0NzpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDc0ODpcXHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbiA3NDk6XFx0c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDc1MDpcXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbiA3NTE6XFx0e1xcbiA3NTI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiA3NTM6XFx0XFx0aW50IHJldDtcXG4gNzU0OlxcdFxcbiA3NTU6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gNzU2OlxcdFxcdGlmICghbWVtY2cpXFxuIDc1NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzU4OlxcdFxcbiA3NTk6XFx0XFx0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIGdmcCk7XFxuIDc2MDpcXHRcXHRpZiAocmV0KSB7XFxuIDc2MTpcXHRcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDc2MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiA3NjM6XFx0XFx0fVxcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIDc2NjpcXHR9XFxuIDc2NzpcXHQjZWxzZVxcbiA3Njg6XFx0c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gNzY5OlxcdHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowOToyMi45OTQzMDgwNTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MzYxNDY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBmb3IgVGVzdGluZyBNZW1jZy1TcGVjaWZpYyBTaHJpbmtlciBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgbmV3IHNocmlua2VyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb24gYSBwZXItbWVtY2cgYmFzaXMuIFRoYXQgbWVhbnMgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LCBiZWNhdXNlLCBpZiBpdCdzIGRpc2FibGVkLCB0aGUgYWxsb2NhdGlvbiB3aWxsIHJldHVybiBOVUxMIGFuZCB0aGUgY29kZSB3aWxsIGZhbGwgYmFjayB0byBhIGdsb2JhbCBvcGVyYXRpb24uICBXZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHZhbGlkYXRlIHRoZSBwZXItbWVtY2cgYmVoYXZpb3IgYXQgYWxsIHdpdGhvdXQgYENPTkZJR19NRU1DR2AgZW5hYmxlZC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgaWYgd2UgbmVlZCBhbnl0aGluZyAqZWxzZSouIEknbSB0aGlua2luZyBhYm91dCBgQ09ORklHX1RNUEZTYCwgYnV0IHRoYXQncyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBDT05GSUdfU0hNRU1gIGlzIHJlcXVpcmVkLiBJIGtub3cgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGRlZmluZWQgaW4gYG1tL3NobWVtLmNgLlxuXG5BaGEhIE5vdyB0aGUgcXVlc3Rpb24gaXM6IGlzIGBtbS9zaG1lbS5jYCBldmVuICpjb21waWxlZCogaWYgYENPTkZJR19TSE1FTWAgaXMgZGlzYWJsZWQ/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBtbS9zaG1lbS5jYCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQuIElmIGl0J3Mgbm90IGNvbXBpbGVkIHdpdGhvdXQgYENPTkZJR19TSE1FTWAsIHRoZW4gdGhhdCdzIGFub3RoZXIgcHJlcmVxdWlzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ4NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA5OjI4LjEzNzkyNTkyOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZT0xNDY9b2JqLSQoQ09ORklHX0VYRUNNRU0pICs9IGV4ZWNtZW0ub1xcbm1tL01ha2VmaWxlOjE0NzpvYmotJChDT05GSUdfVE1QRlNfUVVPVEEpICs9IHNobWVtX3F1b3RhLm9cXG5tbS9NYWtlZmlsZS0xNDgtb2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgKz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA5OjI4LjE4NjQ3NDIxOVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc0MDg4MzA1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYHNobWVtLm9gKipcblxuT2theSwgc28gYHNobWVtLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBjb21waWxlZCwgZGVjbGFyZWQgYXMgYG9iai15YC4gVGhhdCdzIHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLiBCdXQgaG9sZCBvbiwgc29tZXRoaW5nIHNlZW1zIG9mZi4gRXZlbiB3aGVuIGBDT05GSUdfU0hNRU1gIGlzICpkaXNhYmxlZCosIEknbSBzZWVpbmcgYG1tL3NobWVtLmNgIHN0aWxsIGJlaW5nIGNvbXBpbGVkLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUgYW5kIEkgbmVlZCB0byB2ZXJpZnkgd2h5LlxuXG5UaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYG1tL3NobWVtLmNgLiBJIG5lZWQgdG8gc2VhcmNoIHRoaXMgZmlsZSBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgcmVsYXRlZCB0byBgQ09ORklHX1NITUVNYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgc29tZSBvdGhlciBtZWNoYW5pc20gdG8gZXhwbGFpbiB3aHkgdGhlIHNobWVtIGZpbGUgaXMgYmVpbmcgaW5jbHVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTc5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MTUuNTk1MzA3ODY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMwNzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbm1tL3NobWVtLmMtNDctXFxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vc2htZW0uYy00OS0vKlxcbi0tXFxubW0vc2htZW0uYz01ODk2PV9fc2V0dXAoXFxcInRocF9zaG1lbT1cXFwiLCBzZXR1cF90aHBfc2htZW0pO1xcbi0tXFxubW0vc2htZW0uYy01ODk5LVxcbm1tL3NobWVtLmM6NTkwMDojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXFxubW0vc2htZW0uYy01OTAxLVxcbi0tXFxubW0vc2htZW0uYz01OTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTU5NzYtXFxubW0vc2htZW0uYzo1OTc3OiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU5NzgtXFxuLS1cXG5tbS9zaG1lbS5jPTYxMzE9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNjEzMy17XFxubW0vc2htZW0uYzo2MTM0OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTYxMzUtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjE1LjY0MzYyMTA1NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAwOTgyNjk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVE1QRlMvU0hNRU0gU2hyaW5rZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYENPTkZJR19TSE1FTWAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVsbCB0bXBmcyBpbXBsZW1lbnRhdGlvbiDigJMgYSB0aW55IHNobWVtIGltcGxlbWVudGF0aW9uIGdldHMgdXNlZCBvdGhlcndpc2UuIFRoYXQncyBhIGdpdmVuLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCBmb2N1cyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuXG5cbkxldCdzIHNlZSwgd2UndmUgZ290IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgU0hNRU1gIGFzIHRoZSByZWxldmFudCBjb25maWdzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIFN5emthbGxlciB3aWxsIGxpa2VseSBoYW5kbGUgZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU2AgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCBnaXZlbiB0aGUgYG1tL0tjb25maWdgIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4uLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2dldF9mb2xpb2AsIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgLiBCdXQsIHNpbmNlIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSB1bmNoYW5nZWQsIHRoZSByZWFsIGltcGFjdCBzZWVtcyB0byBiZSBvbiBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAuIEkga25vdyB0aGlzIGlzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgd2FudCB0byBhdm9pZC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIg4oCTIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBzaHJpbmtlciBsb2dpYyBhcmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBhIHZhbGlkIHN5bWJvbCBpbiBgbW0vc2htZW0uY2AuIENydWNpYWxseSwgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGlzIG1ha2VzIGl0IGFuIGlkZWFsIHRhcmdldC4gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBpcyBhbHNvIHJlbGV2YW50LlxuXG5Mb29raW5nIGZ1cnRoZXIsIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGNhbGxlZCBieSB0aGVzZSwgc28gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIHRoZSB3YXkgdG8gZ28uXG5cbk5leHQsIEkgbm90ZWQgdGhhdCBgc2htZW1fZXZpY3RfaW5vZGVgIGlzIG1vZGlmaWVkIHRvIGNhbGwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGFuZCBpdCdzIGFsc28gcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0aHJvdWdoIGBzaG1lbV9vcHMuZXZpY3RfaW5vZGVgLiBUaGF0IG1ha2VzIGl0IGFub3RoZXIgZXhjZWxsZW50IGZvY3VzIGZ1bmN0aW9uIGFzIGl0IGlzIG5vdCBpbmxpbmVkLlxuXG5GaW5hbGx5LCBgc2htZW1fZmlsbF9zdXBlcmAgaXMgbW9kaWZpZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYGxpc3RfbHJ1YCwgYW5kLCBsaWtlIGBzaG1lbV9ldmljdF9pbm9kZWAsIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIEknbGwgYWRkIHRoaXMgdG8gdGhlIGxpc3QuXG5cblNvLCBoZXJlJ3MgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOlxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYFxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGBcbiogICBgc2htZW1fZXZpY3RfaW5vZGVgXG4qICAgYHNobWVtX2ZpbGxfc3VwZXJgXG5cbkFuZCB0aGUgY29uZmlndXJhdGlvbnM6XG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBNRU1DR2BcbiogICBgU0hNRU1gXG5cbkkndmUgdmVyaWZpZWQgdGhlIGRlcGVuZGVuY2llczogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBuZWVkcyBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVGAsIHdoaWNoIGlzIGZpbmUsIHN5emthbGxlciB3aWxsIGVuYWJsZSB0aGF0IGlmIGl0IGNhbi4gYE1FTUNHYCBhbmQgYFNITUVNYCBoYXZlIG5vIHNwZWNpYWwgZGVwZW5kZW5jaWVzLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBpbnRlZ3JhdGluZyBhIHBlci1tZW1jZyBgbGlzdF9scnVgIGludG8gdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIuIEl0IGFmZmVjdHMgc2hyaW5rZXIgZW50cnkgcG9pbnRzLCBpbm9kZSBldmljdGlvbiwgYW5kIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gZnV6eiwgZXNwZWNpYWxseSB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEknbGwgbWFrZSBzdXJlIHN5emthbGxlciB0YXJnZXRzIHRoZXNlIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMTozMC42NTM0NTA0ODNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTczOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg1MD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU1LVxcbm1tL0tjb25maWc6ODU2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg1Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjMwLjcwMjYzMjUzM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMzMjc5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBUTVBGUyBhbmQgSHVnZSBQYWdlcyBmb3IgT3B0aW1hbCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgY29uc2Npb3VzIGRlY2lzaW9uIHBvaW50IGhlcmUuIEl0J3MgYSBjaG9pY2U6IGRvIHdlIGxldmVyYWdlIGh1Z2UgcGFnZXMgZm9yIG91ciB0ZW1wb3JhcnkgZmlsZSBzeXN0ZW1zPyBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQganVtcHMgdG8gbWluZCBpcywgKmNhbiogd2UsIGFuZCBpZiBzbywgKmhvdyogZG8gd2UgZG8gaXQ/IEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYHRtcGZzYCBhbmQgaHVnZSBwYWdlcy4gVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBjb3VsZCBiZSBzaWduaWZpY2FudC5cblxuTm93LCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBtb3N0IHJlbGV2YW50IGhlcmU/IERvIHdlIG5lZWQgdG8gZm9yY2UgdGhpcyBiZWhhdmlvdXIgYWNyb3NzIHRoZSBib2FyZCwgb3IgY2FuIHdlIGRvIHRoaXMgbW9yZSBzdXJnaWNhbGx5PyBMZXQncyBxdWlja2x5IHJlZnJlc2guIERvIHdlIGdvIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU2AgdG8gZ3VhcmFudGVlIHRoYXQgdG1wZnMgZ2V0cyB0byB1c2UgaHVnZSBwYWdlcywgb3IgZG8gd2UgdXNlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNgIHRvIGZvY3VzIG9uIHRoZSBzaGFyZWQgbWVtb3J5IHNpZGUgb2YgdGhpbmdzPyBCb3RoIG9wdGlvbnMgaGF2ZSB0aGVpciBpbXBsaWNhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgd29ya2xvYWQgYW5kIGhvdyBgdG1wZnNgIGlzIHVzZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gTmVlZCB0byBjb25zaWRlciB0aGUgc3lzdGVtJ3MgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjM1LjIzNTkxNTYzNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NzUyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Nzk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5OC1cXG5tbS9LY29uZmlnOjg5OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjM1LjI4NjM5ODc0NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQ3NjQxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipNeSBBcHByb2FjaCB0byBTeXprYWxsZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBTeXprYWxsZXIncyBwcm9iYWJseSBnb2luZyB0byBlbmFibGUgdGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgc29vbiwgd2hpY2ggaXMgZmluZSwgYnV0IEkgdGhpbmsgSSdsbCBqdXN0IGdvIGFoZWFkIGFuZCBleHBsaWNpdGx5IHNwZWNpZnkgd2hhdCBJIG5lZWQgZm9yIHRoaXMgcGFydGljdWxhciByb3VuZCBvZiB0ZXN0aW5nLiBJdCdsbCBnaXZlIG1lIG1vcmUgY29udHJvbCBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCB0aG9zZSBkZWZhdWx0cywgZXZlbiBpZiBpdCBpcyBhIGJpdCBtb3JlIHdvcmsgdXBmcm9udC5cblxuVGhlcmVmb3JlLCBJJ2xsIGZvY3VzIG9uIHNldHRpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYmVjYXVzZSB0aGF0J3MgY3J1Y2lhbCBmb3IgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmcgSSBoYXZlIGluIG1pbmQuIEknbGwgYWxzbyBicmluZyBpbiBgTUVNQ0dgIGZvciBpc29sYXRpbmcgdGhlIHJlc291cmNlcyBiZWluZyB1c2VkLCBhbmQgYFNITUVNYCB3aGljaCBJJ20gcHJldHR5IHN1cmUgSSdsbCBuZWVkIGZvciB0aGlzIHBhcnRpY3VsYXIgdGVzdCBjYXNlLlxuXG5PbmNlIHRob3NlIGFyZSBzZXQgdXAsIEknbGwgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEhvcGVmdWxseSwgdGhhdCdsbCBkbyB3aGF0IEkgZXhwZWN0IGFuZCBnZXQgdGhlIHJlc3VsdHMgdHJhY2tpbmcgaW4gdGhlIHdheSB0aGF0IEkgdGhpbmsgaXMgYmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMjIsIk91dHB1dFRva2VucyI6MTk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6NDAuNTM0MDQ0MDA4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4NjMxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fZXZpY3RfaW5vZGVcIixcbiAgICBcInNobWVtX2ZpbGxfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfY291bnRcIixcbiAgICBcInNobWVtX2V2aWN0X2lub2RlXCIsXG4gICAgXCJzaG1lbV9maWxsX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIgdG8gdXNlIGEgcGVyLW1lbWNnIGxpc3RfbHJ1IGluc3RlYWQgb2YgYSBnbG9iYWwgbGlzdC4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHNocmlua2VyIGVudHJ5IHBvaW50cyAoc2htZW1fdW51c2VkX2h1Z2Vfc2Nhbiwgc2htZW1fdW51c2VkX2h1Z2VfY291bnQpLCBpbm9kZSBldmljdGlvbiAoc2htZW1fZXZpY3RfaW5vZGUpLCBhbmQgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiAoc2htZW1fZmlsbF9zdXBlcikuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgd2hlbiB0bXBmcyBpcyB1c2VkIHdpdGggdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhbmQgbWVtb3J5IGNncm91cHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowdqqcg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 17:46:58 +0000 UTC FinishedAt: 2026-08-03 18:11:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "SHMEM" ], "series_id": "35bdd49d-8ce0-4089-86da-2142dbfc5ba1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_unused_huge_scan", "shmem_unused_huge_count", "shmem_evict_inode", "shmem_fill_super" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7c2htZW1fZmlsbF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIyOTllNWJlZjQ2ZTliMDdiMDI5MmZjYWM0ZTBkODI5ODA0ODFjYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU4OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCA1ZmVlY2Y1ZDkwMzhkLi4zNmIyNDlmMDAyYTlhIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTE3MSwxOSAmIzQzOzE3MSw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX2ZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBUaGUgc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cdTAwM2VtZW1jZy4gRHJpdmluZyB0aGVtXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXG4tICogdGhlIGdsb2JhbCBwYXRoIChrc3dhcGQgb3Igcm9vdCBkaXJlY3QgcmVjbGFpbSkgcmVnYXJkbGVzcy4gUmVzdHJpY3QgdGhlbVxuLSAqIHRvIHRoYXQgcGF0aC5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbi19XG4tXG4gLypcbiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3RcbiAgKiBkcm9wIHRoZSBsYXN0IGFjdGl2ZSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyYmxvY2sgZnJvbSB3aXRoaW4gdGhlIHNocmlua2VyLlxuQEAgLTIxMyw3ICYjNDM7MjAwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjYgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4mIzQzO1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXG4gXHRcdGZzX29iamVjdHMgPSBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XG4gXG4gXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcbkBAIC0yNzQsOCAmIzQzOzI2MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0XHRyZXR1cm4gMDtcbiBcdHNtcF9ybWIoKTtcbiBcbi1cdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuJiM0MztcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxuIFx0XHR0b3RhbF9vYmplY3RzID0gc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xuIFxuIFx0dG90YWxfb2JqZWN0cyAmIzQzOz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSwgc2MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19wYXJzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gXG4gLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi9cbiBcbkBAIC01NCw2ICYjNDM7NTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8ge1xuIFx0c3RydWN0IGRxdW90IF9fcmN1XHQqaV9kcXVvdFtNQVhRVU9UQVNdO1xuICNlbmRpZlxuIFx0c3RydWN0IGlub2RlXHRcdHZmc19pbm9kZTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cFx0KnNocmlua2xpc3RfbWVtY2c7XG4mIzQzO1x0aW50XHRcdFx0c2hyaW5rbGlzdF9uaWQ7XG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gI2RlZmluZSBTSE1FTV9GTF9VU0VSX1ZJU0lCTEVcdFx0KEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKVxuQEAgLTgzLDkgJiM0Mzs4OSw5IEBAIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHtcbiBcdGlub190IG5leHRfaW5vO1x0XHQgICAgLyogVGhlIG5leHQgcGVyLXNiIGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdGlub190IF9fcGVyY3B1ICppbm9fYmF0Y2g7ICAvKiBUaGUgbmV4dCBwZXItY3B1IGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXG4tXHRzcGlubG9ja190IHNocmlua2xpc3RfbG9jazsgICAvKiBQcm90ZWN0cyBzaHJpbmtsaXN0ICovXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua2xpc3Q7ICAvKiBMaXN0IG9mIHNoaW5rYWJsZSBpbm9kZXMgKi9cbi1cdHVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovXG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqL1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi9cbiBcdHN0cnVjdCBzaW1wbGVfeGF0dHJfY2FjaGUgeGFfY2FjaGU7XG4gfTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNzRkYzNkOTAwMDY3YS4uNzA0MzUzODUyYWUyNiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC03MjQsNTEgJiM0Mzs3MjQsMjM3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSlcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4tXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbiYjNDM7c3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4ge1xuLVx0TElTVF9IRUFEKGxpc3QpLCAqcG9zLCAqbmV4dDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZztcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWNnO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4mIzQzO3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIGdmcCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuJiM0MztzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0ICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMLCAqb2xkX21lbWNnID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgZ2ZwKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1lbWNnKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbiYjNDM7XHRcdC8qIGlzb2xhdGVkIG9uIHNjYW4gbGlzdCwgbGV0IHNocmluayBoYW5kbGUgaXQgKi9cbiYjNDM7XHRcdGlmIChpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKSlcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gbmlkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4mIzQzO1x0XHRcdCAgICAgaW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnKTtcbiYjNDM7XHRcdG9sZF9tZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBtZW1jZztcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuJiM0MztcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbiYjNDM7XHRtZW1jZyA9IE5VTEw7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG9sZF9tZW1jZyk7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4mIzQzO1x0XHRsaXN0X2xydV9kZWwoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCxcbiYjNDM7XHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuJiM0MztcdFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0c3RydWN0IHNocmlua19jb250cm9sICpzYztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuJiM0MztcdFx0XHRcdFx0XHQgdm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHR1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy1cdTAwM2Vucl90b19zY2FuIDogMTI4O1xuLVx0dW5zaWduZWQgbG9uZyBzcGxpdCA9IDAsIGZyZWVkID0gMDtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4gXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpXG4tXHRcdHJldHVybiBTSFJJTktfU1RPUDtcbiYjNDM7XHRpbmZvID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCkge1xuLVx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB0cnlsb2NrIHRvIGF2b2lkIEFCQkEgZGVhZGxvY2s6IGFkZC9kZWwgcGF0aCB0YWtlcyBpbmZvLVx1MDAzZWxvY2tcbiYjNDM7XHQgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spKVxuJiM0MztcdFx0cmV0dXJuIExSVV9TS0lQO1xuIFxuLVx0XHQvKiBwaW4gdGhlIGlub2RlICovXG4tXHRcdGlub2RlID0gaWdyYWIoXHUwMDI2aW5mby1cdTAwM2V2ZnNfaW5vZGUpO1xuJiM0MztcdC8qIHBpbiB0aGUgaW5vZGUgKi9cbiYjNDM7XHRpbm9kZSA9IGlncmFiKFx1MDAyNmluZm8tXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHQvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovXG4mIzQzO1x0aWYgKCFpbm9kZSkge1xuJiM0MztcdFx0bGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pO1xuJiM0MztcdFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbiYjNDM7XHR9XG4gXG4tXHRcdC8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi9cbi1cdFx0aWYgKCFpbm9kZSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRnb3RvIG5leHQ7XG4tXHRcdH1cbiYjNDM7XHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2c2Nhbi1cdTAwM2VsaXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2bGlzdCk7XG4tbmV4dDpcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuLS07XG4tXHRcdGlmICghLS1iYXRjaClcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuJiM0MztcdGJvb2wgbWF0Y2g7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdFxuJiM0MztcdCAqIHNjLVx1MDAzZW1lbWNnLiBTa2lwIHRoZSBmb2xpbyBtZW1jZyBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbiYjNDM7XHQgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKVxuJiM0MztcdCAqIDIuIGdsb2JhbCBzaHJpbmtlciByZWNsYWltXG4mIzQzO1x0ICogMy4gcm9vdCBtZW1jZyByZWNsYWltXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFzYyB8fCAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy1cdTAwM2VuaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0bWF0Y2ggPSBtZW1jZyA9PSBzYy1cdTAwM2VtZW1jZztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XG4mIzQzO1x0aWYgKElTX0VSUihtZW1jZykpIHtcbiYjNDM7XHRcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcdTAwMjZsaXN0KSB7XG4tXHRcdHBnb2ZmX3QgbmV4dCwgZW5kO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi9cbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzO1x0bGlzdF9scnVfYWRkKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSBuaWQ7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4mIzQzO1x0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiBzY2FuO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3BsaXQgPSAwLCBmcmVlZCA9IDA7XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjYW4ubGlzdCk7XG4mIzQzO1x0c2Nhbi5zYyA9IHNjO1xuJiM0MztcdGlmIChzYylcbiYjNDM7XHRcdGxpc3RfbHJ1X3Nocmlua193YWxrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyxcbiYjNDM7XHRcdFx0XHQgICAgIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsIFx1MDAyNnNjYW4pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxpc3RfbHJ1X3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNnNjYW4sIDEyOCk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNnNjYW4ubGlzdCkge1xuJiM0MztcdFx0cGdvZmZfdCBmb2xpb19lbmQsIGVuZDtcbiBcdFx0bG9mZl90IGlfc2l6ZTtcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4gXHRcdGlub2RlID0gXHUwMDI2aW5mby1cdTAwM2V2ZnNfaW5vZGU7XG4gXG4tXHRcdGlmIChucl90b19mcmVlIFx1MDAyNlx1MDAyNiBmcmVlZCBcdTAwM2U9IG5yX3RvX2ZyZWUpXG4tXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4tXG4gXHRcdGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdFx0Zm9saW8gPSBmaWxlbWFwX2dldF9lbnRyeShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGlfc2l6ZSAvIFBBR0VfU0laRSk7XG4gXHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKVxuQEAgLTc4MSwxMyAmIzQzOzk2NywxOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBnYWluIGZyb20gc3BsaXR0aW5nICovXG4tXHRcdG5leHQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuIFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xuLVx0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gbmV4dCkge1xuJiM0MztcdFx0aWYgKGVuZCBcdTAwM2M9IGZvbGlvLVx1MDAzZWluZGV4IHx8IGVuZCBcdTAwM2U9IGZvbGlvX2VuZCkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSlcbiYjNDM7XHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbiYjNDM7XHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBNb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgaWYgd2UgZmFpbGVkXG4gXHRcdCAqIHRvIGxvY2sgdGhlIHBhZ2UgYXQgdGhpcyB0aW1lLlxuQEAgLTc5NSwzNSAmIzQzOzk4NywzMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0ICogV2FpdGluZyBmb3IgdGhlIGxvY2sgbWF5IGxlYWQgdG8gZGVhZGxvY2sgaW4gdGhlXG4gXHRcdCAqIHJlY2xhaW0gcGF0aC5cbiBcdFx0ICovXG4tXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiYjNDM7XHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRnb3RvIG1vdmVfYmFjaztcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRcdC8qIElmIHNwbGl0IGZhaWxlZCBtb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgKi9cbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG1vdmVfYmFjaztcbiBcbi1cdFx0ZnJlZWQgJiM0Mzs9IG5leHQgLSBlbmQ7XG4mIzQzO1x0XHRmcmVlZCAmIzQzOz0gZm9saW9fZW5kIC0gZW5kO1xuIFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIGRyb3A6XG4tXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbiYjNDM7XHRcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuIFx0XHRnb3RvIHB1dDtcbiBtb3ZlX2JhY2s6XG4tXHRcdC8qXG4tXHRcdCAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgZWl0aGVyIG9uIHRoZSBnbG9iYWwgbGlzdCBvciBkZWxldGVkXG4tXHRcdCAqIGZyb20gYW55IGxvY2FsIGxpc3QgYmVmb3JlIGlwdXQoKSBzaW5jZSBpdCBjb3VsZCBiZSBkZWxldGVkXG4tXHRcdCAqIGluIGFub3RoZXIgdGhyZWFkIG9uY2Ugd2UgcHV0IHRoZSBpbm9kZSAodGhlbiB0aGUgbG9jYWwgbGlzdFxuLVx0XHQgKiBpcyBjb3JydXB0ZWQpLlxuLVx0XHQgKi9cbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0XHRsaXN0X21vdmUoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbiYjNDM7JiM0Mzs7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICYjNDM7MTAyMyw3IEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0aWYgKCFSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKSlcbiYjNDM7XHRpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2MpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4gXHRyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApO1xuQEAgLTg0NywyMSAmIzQzOzEwMzQsMjEgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0Lypcbi1cdCAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxuLVx0ICogaG9ub3VyIHNjLVx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXG4tXHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2Zcbi1cdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxuLVx0ICovXG4tXHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKTtcbiYjNDM7XHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbiB7XG5AQCAtMTQxNywxNCAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXHRcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xuLVx0XHRcdH1cbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0fVxuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpKSB7XG4gXHRcdFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cbiBcdFx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZpbmZvLVx1MDAzZXN0b3BfZXZpY3Rpb24sXG5AQCAtMjUzNSwyNyAmIzQzOzI3MTUsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcbiBhbGxvY2VkOlxuIFx0YWxsb2NlZCA9IHRydWU7XG4tXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4tXHQgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSBcdTAwM2Ncbi1cdFx0XHRcdFx0Zm9saW9fbmV4dF9pbmRleChmb2xpbykpIHtcbi1cdFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG4tXHRcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdC8qXG4tXHRcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xuLVx0XHQgKiAtXHUwMDNlc2hyaW5rX2xpc3QgaW4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKClcbi1cdFx0ICovXG4tXHRcdGlmIChsaXN0X2VtcHR5X2NhcmVmdWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KSkge1xuLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbiYjNDM7JiM0Mzs7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHR9XG4gXG4gXHRpZiAoc2dwID09IFNHUF9XUklURSlcbiBcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xuQEAgLTI1ODUsNiAmIzQzOzI3NDQsMjAgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRcdGVycm9yID0gLUVJTlZBTDtcbiBcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUXVldWUgdGhlIGlub2RlIG9uIHRoZSBzaHJpbmsgbGlzdCBvbmx5IGFmdGVyIGFsbCBjaGVja3MgdGhhdCBtaWdodFxuJiM0MztcdCAqIHJlbW92ZSB0aGUgZm9saW8gaGF2ZSBwYXNzZWQuIE90aGVyd2lzZSB0aGUgaW5vZGUgY291bGQgYmUgbGVmdCBvblxuJiM0MztcdCAqIHRoZSBzaHJpbmtlciBsaXN0IHdpdGggYSBzdGFsZSBmb2xpby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYWxsb2NlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxuJiM0MztcdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfYWRkKGlub2RlLCBmb2xpbywgZ2ZwKTtcbiYjNDM7XHR9XG4gb3V0OlxuIFx0KmZvbGlvcCA9IGZvbGlvO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzA2MSw2ICYjNDM7MzIzNCwxMCBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpfX3NobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChpbmZvLVx1MDAzZWZzZmxhZ3MpXG4gXHRcdHNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby1cdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSAtMTtcbiYjNDM7I2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXN3YXBsaXN0KTtcbiBcdGNhY2hlX25vX2FjbChpbm9kZSk7XG4gXHRpZiAoc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC00OTI3LDYgJiM0Mzs1MTA0LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gI2VuZGlmXG4gXHRmcmVlX3BlcmNwdShzYmluZm8tXHUwMDNlaW5vX2JhdGNoKTtcbiBcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzKTtcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MzsjZW5kaWZcbiBcdG1wb2xfcHV0KHNiaW5mby1cdTAwM2VtcG9sKTtcbiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG4gXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcdTAwMjZzYmluZm8tXHUwMDNleGFfY2FjaGUpO1xuQEAgLTUwMjAsOCAmIzQzOzUyMDAsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc3RhdF9sb2NrKTtcbiBcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpXG4gXHRcdGdvdG8gZmFpbGVkO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuJiM0MzsjZW5kaWZcbiBcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19ibG9ja3NpemUgPSBQQUdFX1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7c2htZW1fZmlsbF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIyOTllNWJlZjQ2ZTliMDdiMDI5MmZjYWM0ZTBkODI5ODA0ODFjYjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU4OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWZlZWNmNWQ5MDM4ZC4uMzZiMjQ5ZjAwMmE5YSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0xNzEsMTkgJiM0MzsxNzEsNiBAQCBzdGF0aWMgdm9pZCBzdXBlcl93YWtlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFnKQogCXdha2VfdXBfdmFyKCZhbXA7c2ItJmd0O3NfZmxhZ3MpOwogfQogCi0vKgotICogVGhlIHNfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpCi0gKiBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlIGFuZCBpZ25vcmUgc2MtJmd0O21lbWNnLiBEcml2aW5nIHRoZW0KLSAqIGZyb20gcGVyLW1lbWNnIHNocmlua19zbGFiX21lbWNnKCkgaW52b2NhdGlvbnMgb25seSBidXJucyBDUFUgd2Fsa2luZwotICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uCi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtCi0gKiB0byB0aGF0IHBhdGguCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCi17Ci0JcmV0dXJuICFzYy0mZ3Q7bWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLSZndDttZW1jZyk7Ci19Ci0KIC8qCiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3QKICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuCkBAIC0yMTMsNyAmIzQzOzIwMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJaWYgKCFzdXBlcl90cnlsb2NrX3NoYXJlZChzYikpCiAJCXJldHVybiBTSFJJTktfU1RPUDsKIAotCWlmIChzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOyBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cykKIAkJZnNfb2JqZWN0cyA9IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpOwogCiAJaW5vZGVzID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KCZhbXA7c2ItJmd0O3NfaW5vZGVfbHJ1LCBzYyk7CkBAIC0yNzQsOCAmIzQzOzI2MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAogCQlyZXR1cm4gMDsKIAlzbXBfcm1iKCk7CiAKLQlpZiAoc2ItJmd0O3Nfb3AgJmFtcDsmYW1wOyBzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOwotCSAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKQogCQl0b3RhbF9vYmplY3RzID0gc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7CiAKIAl0b3RhbF9vYmplY3RzICYjNDM7PSBsaXN0X2xydV9zaHJpbmtfY291bnQoJmFtcDtzYi0mZ3Q7c19kZW50cnlfbHJ1LCBzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mc19wYXJzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyZmF1bHRmZF9rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogCiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqLwogCkBAIC01NCw2ICYjNDM7NTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8gewogCXN0cnVjdCBkcXVvdCBfX3JjdQkqaV9kcXVvdFtNQVhRVU9UQVNdOwogI2VuZGlmCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cAkqc2hyaW5rbGlzdF9tZW1jZzsKJiM0MzsJaW50CQkJc2hyaW5rbGlzdF9uaWQ7CiYjNDM7I2VuZGlmCiB9OwogCiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRQkJKEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKQpAQCAtODMsOSAmIzQzOzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8gewogCWlub190IG5leHRfaW5vOwkJICAgIC8qIFRoZSBuZXh0IHBlci1zYiBpbm9kZSBudW1iZXIgdG8gdXNlICovCiAJaW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqLwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovCi0Jc3BpbmxvY2tfdCBzaHJpbmtsaXN0X2xvY2s7ICAgLyogUHJvdGVjdHMgc2hyaW5rbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovCiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqLwomIzQzOyNlbmRpZgogCXN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi8KIAlzdHJ1Y3Qgc2ltcGxlX3hhdHRyX2NhY2hlIHhhX2NhY2hlOwogfTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDc0ZGMzZDkwMDA2N2EuLjcwNDM1Mzg1MmFlMjYgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtNzI0LDUxICYjNDM7NzI0LDIzNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqc2htZW1fZm9ybWF0X2h1Z2UoaW50IGh1Z2UpCiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCi0JCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKJiM0MztzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbykKIHsKLQlMSVNUX0hFQUQobGlzdCksICpwb3MsICpuZXh0OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CiYjNDM7CXJldHVybiBpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9PSAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZzsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICAgIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIGdmcCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG1lbWNnOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICAgIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIGdmcCk7CiYjNDM7CWlmIChJU19FUlIobWVtY2cpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCkpIHsKJiM0MzsJCS8qIGlzb2xhdGVkIG9uIHNjYW4gbGlzdCwgbGV0IHNocmluayBoYW5kbGUgaXQgKi8KJiM0MzsJCWlmIChpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKSkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCWlmIChpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9PSBuaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPT0gbWVtY2cpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CQlsaXN0X2xydV9kZWwoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwKJiM0MzsJCQkgICAgIGluZm8tJmd0O3Nocmlua2xpc3RfbmlkLCBpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnKTsKJiM0MzsJCW9sZF9tZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnOwomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9IG5pZDsKJiM0MzsJbGlzdF9scnVfYWRkKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsIG5pZCwgbWVtY2cpOwomIzQzOwltZW1jZyA9IE5VTEw7CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwltZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7CiYjNDM7CQlsaXN0X2xydV9kZWwoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwKJiM0MzsJCQkgICAgIGluZm8tJmd0O3Nocmlua2xpc3RfbmlkLCBpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnKTsKJiM0MzsJCW1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sCiYjNDM7CQkJCQkJIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSwKJiM0MzsJCQkJCQkgdm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87Ci0Jc3RydWN0IGZvbGlvICpmb2xpbzsKLQl1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy0mZ3Q7bnJfdG9fc2NhbiA6IDEyODsKLQl1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMOwogCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpKQotCQlyZXR1cm4gU0hSSU5LX1NUT1A7CiYjNDM7CWluZm8gPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTsKIAotCXNwaW5fbG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCkgewotCQlpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRyeWxvY2sgdG8gYXZvaWQgQUJCQSBkZWFkbG9jazogYWRkL2RlbCBwYXRoIHRha2VzIGluZm8tJmd0O2xvY2sKJiM0MzsJICogYmVmb3JlIHRoZSBsaXN0X2xydSBidWNrZXQgbG9jaywgd2hpbGUgaGVyZSB0aGUgb3JkZXIgaXMgcmV2ZXJzZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNwaW5fdHJ5bG9jaygmYW1wO2luZm8tJmd0O2xvY2spKQomIzQzOwkJcmV0dXJuIExSVV9TS0lQOwogCi0JCS8qIHBpbiB0aGUgaW5vZGUgKi8KLQkJaW5vZGUgPSBpZ3JhYigmYW1wO2luZm8tJmd0O3Zmc19pbm9kZSk7CiYjNDM7CS8qIHBpbiB0aGUgaW5vZGUgKi8KJiM0MzsJaW5vZGUgPSBpZ3JhYigmYW1wO2luZm8tJmd0O3Zmc19pbm9kZSk7CiYjNDM7CS8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi8KJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJbGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pOwomIzQzOwkJbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJCXJldHVybiBMUlVfUkVNT1ZFRDsKJiM0MzsJfQogCi0JCS8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi8KLQkJaWYgKCFpbm9kZSkgewotCQkJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwotCQkJZ290byBuZXh0OwotCQl9CiYjNDM7CWxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTsKJiM0MzsJbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwlzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbyk7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO3NjYW4tJmd0O2xpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKLQkJbGlzdF9tb3ZlKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtsaXN0KTsKLW5leHQ6Ci0JCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4tLTsKLQkJaWYgKCEtLWJhdGNoKQotCQkJYnJlYWs7CiYjNDM7CXJldHVybiBMUlVfUkVNT1ZFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMOwomIzQzOwlib29sIG1hdGNoOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IG5vbi1yb290IG1lbWNnIHJlY2xhaW0gbmVlZHMgdG8gbWF0Y2ggdGhlIGZvbGlvIGNoYXJnZSBhZ2FpbnN0CiYjNDM7CSAqIHNjLSZndDttZW1jZy4gU2tpcCB0aGUgZm9saW8gbWVtY2cgY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CiYjNDM7CSAqIDEuIHNobWVtIHF1b3RhIHJlY2xhaW0gKHNjID09IE5VTEwpCiYjNDM7CSAqIDIuIGdsb2JhbCBzaHJpbmtlciByZWNsYWltCiYjNDM7CSAqIDMuIHJvb3QgbWVtY2cgcmVjbGFpbQomIzQzOwkgKi8KJiM0MzsJaWYgKCFzYyB8fCAhc2MtJmd0O21lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy0mZ3Q7bWVtY2cpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChmb2xpb19uaWQoZm9saW8pICE9IHNjLSZndDtuaWQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiYjNDM7CW1hdGNoID0gbWVtY2cgPT0gc2MtJmd0O21lbWNnOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTsKJiM0MzsKJiM0MzsJbWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7CiYjNDM7CWlmIChJU19FUlIobWVtY2cpKSB7CiYjNDM7CQlzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTsKJiM0MzsJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmYW1wO2xpc3QpIHsKLQkJcGdvZmZfdCBuZXh0LCBlbmQ7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwkvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovCiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsJbGlzdF9scnVfYWRkKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsIG5pZCwgbWVtY2cpOwomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbmlkID0gbmlkOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywKJiM0MzsJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwOwomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3NjYW4ubGlzdCk7CiYjNDM7CXNjYW4uc2MgPSBzYzsKJiM0MzsJaWYgKHNjKQomIzQzOwkJbGlzdF9scnVfc2hyaW5rX3dhbGsoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNjLAomIzQzOwkJCQkgICAgIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsICZhbXA7c2Nhbik7CiYjNDM7CWVsc2UKJiM0MzsJCWxpc3RfbHJ1X3dhbGsoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsCiYjNDM7CQkJICAgICAgJmFtcDtzY2FuLCAxMjgpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmYW1wO3NjYW4ubGlzdCkgewomIzQzOwkJcGdvZmZfdCBmb2xpb19lbmQsIGVuZDsKIAkJbG9mZl90IGlfc2l6ZTsKIAkJaW50IHJldDsKIAogCQlpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTsKIAkJaW5vZGUgPSAmYW1wO2luZm8tJmd0O3Zmc19pbm9kZTsKIAotCQlpZiAobnJfdG9fZnJlZSAmYW1wOyZhbXA7IGZyZWVkICZndDs9IG5yX3RvX2ZyZWUpCi0JCQlnb3RvIG1vdmVfYmFjazsKLQogCQlpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJCWZvbGlvID0gZmlsZW1hcF9nZXRfZW50cnkoaW5vZGUtJmd0O2lfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTsKIAkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpCkBAIC03ODEsMTMgJiM0Mzs5NjcsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCiAJCX0KIAogCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBnYWluIGZyb20gc3BsaXR0aW5nICovCi0JCW5leHQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTsKJiM0MzsJCWZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pOwogCQllbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpOwotCQlpZiAoZW5kICZsdDs9IGZvbGlvLSZndDtpbmRleCB8fCBlbmQgJmd0Oz0gbmV4dCkgewomIzQzOwkJaWYgKGVuZCAmbHQ7PSBmb2xpby0mZ3Q7aW5kZXggfHwgZW5kICZndDs9IGZvbGlvX2VuZCkgewogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCiYjNDM7CQlpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkKJiM0MzsJCQlnb3RvIG1vdmVfYmFjazsKJiM0MzsKJiM0MzsJCWlmIChucl90b19mcmVlICZhbXA7JmFtcDsgZnJlZWQgJmd0Oz0gbnJfdG9fZnJlZSkKJiM0MzsJCQlnb3RvIG1vdmVfYmFjazsKJiM0MzsKIAkJLyoKIAkJICogTW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0IGlmIHdlIGZhaWxlZAogCQkgKiB0byBsb2NrIHRoZSBwYWdlIGF0IHRoaXMgdGltZS4KQEAgLTc5NSwzNSAmIzQzOzk4NywzMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywKIAkJICogV2FpdGluZyBmb3IgdGhlIGxvY2sgbWF5IGxlYWQgdG8gZGVhZGxvY2sgaW4gdGhlCiAJCSAqIHJlY2xhaW0gcGF0aC4KIAkJICovCi0JCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKLQkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKQomIzQzOwkJCWdvdG8gbW92ZV9iYWNrOwomIzQzOwomIzQzOwkJaWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwogCQkJZ290byBtb3ZlX2JhY2s7CiAJCX0KIAogCQlyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7CiAKIAkJLyogSWYgc3BsaXQgZmFpbGVkIG1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCAqLwogCQlpZiAocmV0KQogCQkJZ290byBtb3ZlX2JhY2s7CiAKLQkJZnJlZWQgJiM0Mzs9IG5leHQgLSBlbmQ7CiYjNDM7CQlmcmVlZCAmIzQzOz0gZm9saW9fZW5kIC0gZW5kOwogCQlzcGxpdCYjNDM7JiM0Mzs7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogZHJvcDoKLQkJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOwkJc2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7CiAJCWdvdG8gcHV0OwogbW92ZV9iYWNrOgotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIGVpdGhlciBvbiB0aGUgZ2xvYmFsIGxpc3Qgb3IgZGVsZXRlZAotCQkgKiBmcm9tIGFueSBsb2NhbCBsaXN0IGJlZm9yZSBpcHV0KCkgc2luY2UgaXQgY291bGQgYmUgZGVsZXRlZAotCQkgKiBpbiBhbm90aGVyIHRocmVhZCBvbmNlIHdlIHB1dCB0aGUgaW5vZGUgKHRoZW4gdGhlIGxvY2FsIGxpc3QKLQkJICogaXMgY29ycnVwdGVkKS4KLQkJICovCi0JCXNwaW5fbG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQkJbGlzdF9tb3ZlKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpOwotCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuJiM0MzsmIzQzOzsKLQkJc3Bpbl91bmxvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7CiYjNDM7CQlzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogcHV0OgogCQlpcHV0KGlub2RlKTsKIAl9CkBAIC04MzYsNyAmIzQzOzEwMjMsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiB7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTsKIAotCWlmICghUkVBRF9PTkNFKHNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4pKQomIzQzOwlpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgc2MpKQogCQlyZXR1cm4gU0hSSU5LX1NUT1A7CiAKIAlyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApOwpAQCAtODQ3LDIxICYjNDM7MTAzNCwyMSBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogewogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7CiAKLQkvKgotCSAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdAotCSAqIGhvbm91ciBzYy0mZ3Q7bWVtY2csIHNvIGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiB0aGUgZ2xvYmFsIChrc3dhcGQgb3IKLQkgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2YKLQkgKiBzaHJpbmtfc2xhYl9tZW1jZygpIHRvIGF2b2lkIHF1ZXVlaW5nIGR1cGxpY2F0ZSBnbG9iYWwgd29yay4KLQkgKi8KLQlpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLSZndDtzaHJpbmtsaXN0X2xlbik7CiYjNDM7CXJldHVybiBsaXN0X2xydV9zaHJpbmtfY291bnQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNjKTsKIH0KICNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KIAogI2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWQogCiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLAogCQlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpCiB7CkBAIC0xNDE3LDE0ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWlub2RlLSZndDtpX3NpemUgPSAwOwogCQltYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLSZndDtpX21hcHBpbmcpOwogCQlzaG1lbV90cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7Ci0JCWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7Ci0JCQlzcGluX2xvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KSkgewotCQkJCWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuLS07Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQkJfQomIzQzOwkJc2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbXA7aW5mby0mZ3Q7c3dhcGxpc3QpKSB7CiAJCQkvKiBXYWl0IHdoaWxlIHNobWVtX3VudXNlKCkgaXMgc2Nhbm5pbmcgdGhpcyBpbm9kZS4uLiAqLwogCQkJd2FpdF92YXJfZXZlbnQoJmFtcDtpbmZvLSZndDtzdG9wX2V2aWN0aW9uLApAQCAtMjUzNSwyNyAmIzQzOzI3MTUsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAogYWxsb2NlZDoKIAlhbGxvY2VkID0gdHJ1ZTsKLQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgJmFtcDsmYW1wOwotCSAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpICZsdDsKLQkJCQkJZm9saW9fbmV4dF9pbmRleChmb2xpbykpIHsKLQkJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKLQkJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKLQkJLyoKLQkJICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdAotCQkgKiB0byBzaHJpbmsgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgotCQkgKi8KLQkJc3Bpbl9sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCQkvKgotCQkgKiBfY2FyZWZ1bCB0byBkZWZlbmQgYWdhaW5zdCB1bmxvY2tlZCBhY2Nlc3MgdG8KLQkJICogLSZndDtzaHJpbmtfbGlzdCBpbiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoKQotCQkgKi8KLQkJaWYgKGxpc3RfZW1wdHlfY2FyZWZ1bCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwKLQkJCQkgICAgICAmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCk7Ci0JCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuJiM0MzsmIzQzOzsKLQkJfQotCQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQl9CiAKIAlpZiAoc2dwID09IFNHUF9XUklURSkKIAkJZm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pOwpAQCAtMjU4NSw2ICYjNDM7Mjc0NCwyMCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9jazsKIAl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFF1ZXVlIHRoZSBpbm9kZSBvbiB0aGUgc2hyaW5rIGxpc3Qgb25seSBhZnRlciBhbGwgY2hlY2tzIHRoYXQgbWlnaHQKJiM0MzsJICogcmVtb3ZlIHRoZSBmb2xpbyBoYXZlIHBhc3NlZC4gT3RoZXJ3aXNlIHRoZSBpbm9kZSBjb3VsZCBiZSBsZWZ0IG9uCiYjNDM7CSAqIHRoZSBzaHJpbmtlciBsaXN0IHdpdGggYSBzdGFsZSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChhbGxvY2VkICZhbXA7JmFtcDsgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSAmbHQ7IGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdAomIzQzOwkJICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KJiM0MzsJCSAqLwomIzQzOwkJc2htZW1fdW51c2VkX2h1Z2VfYWRkKGlub2RlLCBmb2xpbywgZ2ZwKTsKJiM0MzsJfQogb3V0OgogCSpmb2xpb3AgPSBmb2xpbzsKIAlyZXR1cm4gMDsKQEAgLTMwNjEsNiAmIzQzOzMyMzQsMTAgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKGluZm8tJmd0O2ZzZmxhZ3MpCiAJCXNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby0mZ3Q7ZnNmbGFncywgTlVMTCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBOVUxMOwomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X25pZCA9IC0xOwomIzQzOyNlbmRpZgogCUlOSVRfTElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7c3dhcGxpc3QpOwogCWNhY2hlX25vX2FjbChpbm9kZSk7CiAJaWYgKHNiaW5mby0mZ3Q7bm9zd2FwKQpAQCAtNDkyNyw2ICYjNDM7NTEwNCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogI2VuZGlmCiAJZnJlZV9wZXJjcHUoc2JpbmZvLSZndDtpbm9fYmF0Y2gpOwogCXBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koJmFtcDtzYmluZm8tJmd0O3VzZWRfYmxvY2tzKTsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CWxpc3RfbHJ1X2Rlc3Ryb3koJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOyNlbmRpZgogCW1wb2xfcHV0KHNiaW5mby0mZ3Q7bXBvbCk7CiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSCiAJc2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoJmFtcDtzYmluZm8tJmd0O3hhX2NhY2hlKTsKQEAgLTUwMjAsOCAmIzQzOzUyMDAsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtzYmluZm8tJmd0O3N0YXRfbG9jayk7CiAJaWYgKHBlcmNwdV9jb3VudGVyX2luaXQoJmFtcDtzYmluZm8tJmd0O3VzZWRfYmxvY2tzLCAwLCBHRlBfS0VSTkVMKSkKIAkJZ290byBmYWlsZWQ7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsJaWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsIHNiLSZndDtzX3NocmluaykpCiYjNDM7CQlnb3RvIGZhaWxlZDsKJiM0MzsjZW5kaWYKIAogCXNiLSZndDtzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYi0mZ3Q7c19ibG9ja3NpemUgPSBQQUdFX1NJWkU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFNobWVtIEh1Z2UgUGFnZSBTaHJpbmtlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNobWVtYCAoc3BlY2lmaWNhbGx5IHRtcGZzKSBkZWFscyB3aXRoIHVudXNlZCBodWdlIHBhZ2VzLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgZnJvbSBhIGdsb2JhbCBsaXN0IGZvciB0aGUgc2hyaW5rZXIgdG8gYSBwZXItbWVtY2cgYGxpc3RfbHJ1YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgaW1wcm92ZWQgbWVtb3J5IGFjY291bnRpbmcgZm9yIHNoYXJlZCBtZW1vcnkgc3lzdGVtcy4gVGhlIHJlbW92YWwgb2YgYHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGVgIGZyb20gYGZzL3N1cGVyLmNgIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyBhIHJlbGF4YXRpb24gb2YgdGhlIHJlc3RyaWN0aW9uIG9uIGBucl9jYWNoZWRfb2JqZWN0c2AgdG8gdGhlIHJvb3QgbWVtY2csIHdoaWNoIGlzIG5vdyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBgbGlzdF9scnVgIGRlc2lnbi4gVGhpcyBwb2ludHMgdG8gcG90ZW50aWFsbHkgbW9yZSBncmFudWxhciBjb250cm9sIGFuZCBhIG1vdmUgdG93YXJkcyBtb3JlIGFjY3VyYXRlIHRyYWNraW5nIGFjcm9zcyBtZW1jZ3MuCgpUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSByZXNpZGVzIGluIHRoZSBgbW0vc2htZW0uY2AgbW9kaWZpY2F0aW9uczogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgc3dpdGNoIHRvIGBsaXN0X2xydV9zaHJpbmtfd2Fsa2AgYW5kIGBsaXN0X2xydV93YWxrYCBpcyB0aGUga2V5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgc2hyaW5rZXIgb3BlcmF0ZXMuIFdlJiMzOTt2ZSBnb3QgYSBzbGV3IG9mIG5ldyBmdW5jdGlvbnMgaGVyZSB0byBtYW5hZ2UgdGhpczogYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCwgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBtYW5hZ2luZyB0aGUgZW50cmllcyB3aXRoaW4gdGhlIGBsaXN0X2xydWAuIFRoZSBmYWN0IHRoYXQgYHNobWVtX3NiX2luZm9gIG5vdyB1c2VzIGEgYHN0cnVjdCBsaXN0X2xydSBzaHJpbmtsaXN0YCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdGAsIGFuZCB0aGF0IGBzaG1lbV9pbm9kZV9pbmZvYCBoYXMgYHNocmlua2xpc3RfbWVtY2dgIGFuZCBgc2hyaW5rbGlzdF9uaWRgLCBjb25maXJtcyB0aGlzIG1lbWNnLWF3YXJlIGFwcHJvYWNoLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgY29yZSBrZXJuZWwgbW9kaWZpY2F0aW9uIHRvIGBtbS9zaG1lbS5jYCBhbmQgdGhhdCB0bXBmcyBpcyB1YmlxdWl0b3VzLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGltcGFjdGZ1bC4gSXQmIzM5O3MgaW4gYSBjcml0aWNhbCBwYXRoIGFuZCByZXF1aXJlcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgYW5kIG1vZGlmaWVkOgoqICAgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYAoqICAgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YAoqICAgYHNobWVtX3VudXNlZF9odWdlX2FkZGAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgCiogICBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAKKiAgIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYAoqICAgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgCiogICBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgKG1vZGlmaWVkKQoqICAgYHNobWVtX2V2aWN0X2lub2RlYCAobW9kaWZpZWQpCiogICBgc2htZW1fZmlsbF9zdXBlcmAgKG1vZGlmaWVkKQoqICAgYHNobWVtX3B1dF9zdXBlcmAgKG1vZGlmaWVkKQoKV2FpdCwgaG9sZCBvbi4uLiBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCwgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBhcmUgc3RhdGljLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSBiZWluZyB1c2VkLiBBaCwgZ290IGl0IC0gdGhleSBhcmUgYmVpbmcgYXNzaWduZWQgdG8gYHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0c2AgYW5kIGBzYi0mZ3Q7c19vcC0mZ3Q7ZnJlZV9jYWNoZWRfb2JqZWN0c2Agd2l0aGluIGBzaG1lbV9maWxsX3N1cGVyYC4gU28sIGBzaG1lbV9maWxsX3N1cGVyYCBhbmQgaW5kaXJlY3RseSB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzaG1lbV9zb3BzYCBpbiBgbW0vc2htZW0uY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gYXNzaWdubWVudCBhbmQgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9zb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgbWVtb3J5IGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IG15IGJlYXJpbmdzLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIHRoaXM/IFJpZ2h0LCBJIHNob3VsZCBzdGFydCB3aXRoIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZXJlc3QuIExldCBtZSBjaGVjayB0aGUga2VybmVsIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB3b3JrIHRvIGJlIGRvbmUgb24gdGhlIHNoYXJlZCBtZW1vcnkuIE15IHNlYXJjaCB0ZXJtIHdpbGwgYmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBUaGlzIGZ1bmN0aW9uIG5hbWUsIG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gaXQsIG1pZ2h0IGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBwcm9ibGVtcyBvciBvcHRpbWl6YXRpb25zIHJlZ2FyZGluZyB1bnVzZWQgaHVnZSBwYWdlcyB3aXRoaW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gSG9wZWZ1bGx5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBzb21lIGltcG9ydGFudCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9zaG1lbS5jLTgyOS1cbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcbm1tL3NobWVtLmMtODMxLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbm1tL3NobWVtLmM9ODM1PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuLS1cbm1tL3NobWVtLmMtODM4LXtcbm1tL3NobWVtLmM6ODM5Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XG5tbS9zaG1lbS5jLTg0MC1cdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuLS1cbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuLS1cbm1tL3NobWVtLmMtOTMzLXtcbm1tL3NobWVtLmM6OTM0Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2Nhbjtcbm1tL3NobWVtLmMtOTM1LVx0c3RydWN0IGlub2RlICppbm9kZTtcbi0tXG5tbS9zaG1lbS5jLTEwMjAtXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxubW0vc2htZW0uYy0xMDIyLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3NobWVtLmM9NTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTQyNi1cdC5ucl9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcbm1tL3NobWVtLmM6NTQyNzpcdC5mcmVlX2NhY2hlZF9vYmplY3RzXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXG5tbS9zaG1lbS5jLTU0MjgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzaG1lbSBGaWxlc3lzdGVtJiMzOTtzIENhY2hlZCBPYmplY3QgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGxpbmtlZCB0byBgZnJlZV9jYWNoZWRfb2JqZWN0c2Agd2l0aGluIHRoZSBgc2htZW1fb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgYXJlIGludm9rZWQgdGhyb3VnaCB0aGUgYHNiLSZndDtzX29wYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB2aWEgYG5yX2NhY2hlZF9vYmplY3RzYCBhbmQgYGZyZWVfY2FjaGVkX29iamVjdHNgLiBOb3csIHdoZXJlIGRvIHRoZXNlIGVudHJ5IHBvaW50cyBsaXZlPyBBaCwgdGhhdCYjMzk7cyByaWdodCwgYHN1cGVyX2NhY2hlX3NjYW5gIGFuZCBgc3VwZXJfY2FjaGVfY291bnRgIGluIGBmcy9zdXBlci5jYC4KCldhaXQgYSBtaW51dGUsIGBzdXBlcl9jYWNoZV9zY2FuYCBhbmQgYHN1cGVyX2NhY2hlX2NvdW50YC4uLiB0aG9zZSBhcmUgdGhlIHNocmlua2VyIGNhbGxiYWNrcyBmb3IgdGhlIHN1cGVyIGJsb2NrIHNocmlua2VyLCBhcmVuJiMzOTt0IHRoZXk/IFRoYXQgbWVhbnMgdGhlIGZpbGVzeXN0ZW0gc2hyaW5rZXIgbWVjaGFuaXNtIGlzIGtleSBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbiBgZnMvc3VwZXIuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBodWdlIHBhZ2UgY2FjaGluZyBpbiBzaG1lbSBpcyBtYW5hZ2VkIGFuZCBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhhdCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1cGVyX2NhY2hlX3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9MTU0PXN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4tLVxuZnMvc3VwZXIuYy0xODAtICovXG5mcy9zdXBlci5jOjE4MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuZnMvc3VwZXIuYy0xODItXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbmZzL3N1cGVyLmM9MjM4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbmZzL3N1cGVyLmMtMjUwLVx0ICogbGlzdF9scnVfc2hyaW5rX2NvdW50KCkgb3Igc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cygpLiBDb3VudHMgY2FuXG5mcy9zdXBlci5jOjI1MTpcdCAqIGNoYW5nZSBiZXR3ZWVuIHN1cGVyX2NhY2hlX2NvdW50IGFuZCBzdXBlcl9jYWNoZV9zY2FuLCBzbyB3ZSByZWFsbHlcbmZzL3N1cGVyLmMtMjUyLVx0ICogZG9uJiMzOTt0IG5lZWQgbG9ja3MgaGVyZS5cbi0tXG5mcy9zdXBlci5jPTMyMz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMzkxLVxuZnMvc3VwZXIuYzozOTI6XHRzLVx1MDAzZXNfc2hyaW5rLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHN1cGVyX2NhY2hlX3NjYW47XG5mcy9zdXBlci5jLTM5My1cdHMtXHUwMDNlc19zaHJpbmstXHUwMDNlY291bnRfb2JqZWN0cyA9IHN1cGVyX2NhY2hlX2NvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDc0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTaG1lbSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGlzLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBzdXBlcl9jYWNoZV9zY2FuYCBhbmQgYHN1cGVyX2NhY2hlX2NvdW50YC4gVGhlc2UgYXJlIHByZXR0eSBnZW5lcmljLCBzbyB0aGF0IGRvZXNuJiMzOTt0IHRlbGwgdGhlIHdob2xlIHN0b3J5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIHRvIGJlIGhhcHBlbmluZyB3aXRoaW4gYG1tL3NobWVtLmNgLiBJJiMzOTttIHNwZWNpZmljYWxseSBzZWVpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIG1lbnRpb25lZCwgd2hpY2ggc3VnZ2VzdHMgdGhlIGFkanVzdG1lbnRzIGFyZSBmb2N1c2VkIGludGVybmFsbHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgbW9kdWxlLiBJIG5lZWQgdG8gYmUgc3VyZSwgdGhvdWdoLiBJcyB0aGlzIHRoZSBvbmx5IHBsYWNlPwoKSSBoYXZlIHRvIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGltcGFjdGVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gQWgsIEkgc2VlIHRoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIGlzIGFsc28gY2FsbGVkIG91dC4gSG1tLCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdOKAmXMgc3RhdGljLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgY2hhbmdlcyAqcmVhbGx5KiBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2dldF9mb2xpb19nZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MjIyMj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMjUyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxubW0vc2htZW0uYzoyMjUzOiAqIHVzdWFsIHN3YXBpbiBvZiBzaG1lbV9nZXRfZm9saW9fZ2ZwKCksIG9yIGJ5IHRoZSBsZXNzIGNvbW1vbiBzd2Fwb2ZmIG9mXG5tbS9zaG1lbS5jLTIyNTQtICogc2htZW1fdW51c2VfaW5vZGUoKSksIGl0IG1heSBoYXZlIGJlZW4gcmVhZCBpbiBlYXJsaWVyIGZyb20gc3dhcCwgaW5cbi0tXG5tbS9zaG1lbS5jPTI0MzM9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1OTgtLypcbm1tL3NobWVtLmM6MjU5OTogKiBzaG1lbV9nZXRfZm9saW9fZ2ZwIC0gZmluZCBwYWdlIGluIGNhY2hlLCBvciBnZXQgZnJvbSBzd2FwLCBvciBhbGxvY2F0ZVxubW0vc2htZW0uYy0yNjAwLSAqXG4tLVxubW0vc2htZW0uYy0yNjA2LSAqL1xubW0vc2htZW0uYzoyNjA3OnN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxubW0vc2htZW0uYy0yNjA4LVx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLFxuLS1cbm1tL3NobWVtLmM9MjgwMz1pbnQgc2htZW1fZ2V0X2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsXG4tLVxubW0vc2htZW0uYy0yODA1LXtcbm1tL3NobWVtLmM6MjgwNjpcdHJldHVybiBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgd3JpdGVfZW5kLCBmb2xpb3AsIHNncCxcbm1tL3NobWVtLmMtMjgwNy1cdFx0XHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVx1MDAzZWlfbWFwcGluZyksIE5VTEwsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9Mjg4Mj1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9zaG1lbS5jLTI5MDAtXHRXQVJOX09OX09OQ0Uodm1mLVx1MDAzZXBhZ2UgIT0gTlVMTCk7XG5tbS9zaG1lbS5jOjI5MDE6XHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXHUwMDNlcGdvZmYsIDAsIFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsXG5tbS9zaG1lbS5jLTI5MDItXHRcdFx0XHQgIGdmcCwgdm1mLCBcdTAwMjZyZXQpO1xuLS1cbm1tL3NobWVtLmM9NjEzMT1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNjEzOC1cbm1tL3NobWVtLmM6NjEzOTpcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvX2dmcChpbm9kZSwgaW5kZXgsIGlfc2l6ZV9yZWFkKGlub2RlKSxcbm1tL3NobWVtLmMtNjE0MC1cdFx0XHRcdCAgICBcdTAwMjZmb2xpbywgU0dQX0NBQ0hFLCBnZnAsIE5VTEwsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgc2htZW0gRnVuY3Rpb24gVmlzaWJpbGl0eSBhbmQgQ2FsbCBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYHNobWVtYCBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZXMgdG8gdXNlIGFzIGVudHJ5IHBvaW50cy4gYHNobWVtX2dldF9mb2xpb2AgYW5kIGBzaG1lbV9yZWFkX2ZvbGlvX2dmcGAgYXJlIHN0cmFpZ2h0Zm9yd2FyZCwgdGhleSYjMzk7cmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyB0aGVtIGVhc3kgdG8gdGFyZ2V0LiBgc2htZW1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCB2aWEgdGhlIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAsIHNvIGl0ICptaWdodCogYmUgYWNjZXNzaWJsZSwgYnV0IGxlc3MgaWRlYWwuIGBzaG1lbV9ldmljdF9pbm9kZWAsIGBzaG1lbV9maWxsX3N1cGVyYCwgYW5kIGBzaG1lbV9wdXRfc3VwZXJgIGFyZSBhbHNvIHN0YXRpYywgc28gbGVzcyBpbnRlcmVzdGluZyBmcm9tIGEgdGFyZ2V0aW5nIHBlcnNwZWN0aXZlLgoKVGhlIHRyaWNreSBvbmUgaXMgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyBiZWNhdXNlIGl0IG1pZ2h0IGJlIGlubGluZWQgYW5kIG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sLiBCdXQsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIHRoZSBmdW5jdGlvbiBwb2ludGVyIGBzaG1lbV9vcHMuZnJlZV9jYWNoZWRfb2JqZWN0c2AuIFRoYXQgbWVhbnMgaXQgKm11c3QqIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYnV0IHRoaXMgb25lIGlzIG5vdCBpbmxpbmVkLCBzaW5jZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBTbywgaXQgc2hvdWxkIGJlIHRhcmdldGFibGUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBub24tc3RhdGljIG9uZXM6IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy4KCkJ1dCB3YWl0LCBob3cgaXMgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gICphY3R1YWxseSogY2FsbGVkPyBJdCYjMzk7cyBwYXJ0IG9mIHRoZSBzaHJpbmtlciwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZS4gQ2FuIHdlIHRyaWdnZXIgaXQgd2l0aCBgZHJvcF9jYWNoZXNgPyBZZXMsIGBlY2hvIDMgJmd0OyAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNgIGNhbGxzIGBkcm9wX3NsYWJgLCB3aGljaCBjYWxscyBgc2hyaW5rX3NsYWJgLiBgc2hyaW5rX3NsYWJgIHRoZW4gY2FsbHMgYHN1cGVyX2NhY2hlX3NjYW5gLCB3aGljaCBmaW5hbGx5IGNhbGxzIGBzYi0mZ3Q7c19vcC0mZ3Q7ZnJlZV9jYWNoZWRfb2JqZWN0c2AsIHdoaWNoIGlzIGluZGVlZCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAuIEV4Y2VsbGVudC4gVGhhdCBnaXZlcyBtZSBhIHBhdGggdG8gdHJpZ2dlciBpdCBpbmRpcmVjdGx5LgoKT2theSwgbmV4dCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHdob2xlIHNlY3Rpb24gb2YgY29kZSBpcyB3cmFwcGVkIGluIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL3NobWVtLmNgIGFuZCBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYC4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCwgYW5kIGtub3dpbmcgdGhlc2Ugb3B0aW9ucyBtaWdodCBsaW1pdCB0aGUgc2NvcGUgb2Ygd2hhdCBJIGNhbiBkbywgYnV0IGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2htZW1fZnMuaD0zNT1zdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTU4LVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjU5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC02MC1cdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2hyaW5rbGlzdF9tZW1jZztcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9Nzc9c3RydWN0IHNobWVtX3NiX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC05MS1cdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6OTI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTkzLVx0c3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3Q7IC8qIExpc3Qgb2Ygc2hyaW5rYWJsZSBpbm9kZXMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBObyBxdWVzdGlvbiBhYm91dCBpdC4gQW5kLCBJIHNlZSwgd2UmIzM5O3JlIGFsc28gbWFraW5nIHVzZSBvZiBgQ09ORklHX01FTUNHYCwgYXMgaXRzIHVzYWdlIHBvcHMgdXAgaW4gdGhlIGBtbS9zaG1lbS5jYCBmaWxlLiBHb3QgaXQuIFRoaXMgbWFrZXMgc2Vuc2UgaW4gY29udGV4dC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NzM4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbi0tXG5tbS9zaG1lbS5jLTc0Ni1cbm1tL3NobWVtLmM6NzQ3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NobWVtLmMtNzQ4LXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IGlmIGBDT05GSUdfU0hNRU1gIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGhlcmUuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgYW5kIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCBpZiBuZWNlc3NhcnkuIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCwgcmlnaHQ/CgpUaGVuLCBhaCB5ZXMsIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19NTVVgLiBJIHNob3VsZCBoYXZlIGtub3duIHRoYXQgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYnV0IGEgcXVpY2sgcmV2aWV3IGlzIGFsd2F5cyBnb29kIHByYWN0aWNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMxLVxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzMtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1NS1cbm1tL0tjb25maWc6ODU2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjItXG5tbS9LY29uZmlnOjg2MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2NC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzEtXG5tbS9LY29uZmlnOjg3MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4OC1cbm1tL0tjb25maWc6ODg5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkwLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTgtXG5tbS9LY29uZmlnOjg5OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDYtXG5tbS9LY29uZmlnOjkwNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwOC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE0LVxubW0vS2NvbmZpZzo5MTU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMzLVxubW0vS2NvbmZpZzo5MzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0Mi1cbm1tL0tjb25maWc6OTQzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0NC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1MC1cbm1tL0tjb25maWc6OTUxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTgtXG5tbS9LY29uZmlnOjk1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOgoKKipJbnZlc3RpZ2F0aW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZGVuY2llcy4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhpbmdzIGJhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IHJlbGllcyBvbiBpdCwgd2hhdCBpdCBlbmFibGVzLCBhbmQgd2hhdCBtaWdodCBicmVhayBpZiBJIHdlcmUgdG8gY2hhbmdlIG9yIGRpc2FibGUgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgbm90IGp1c3QgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRoZSByaXBwbGUgZWZmZWN0cyDigJMgYW55dGhpbmcgZG93bnN0cmVhbSB0aGF0IG1pZ2h0IGxldmVyYWdlIHRoZSBhZHZhbnRhZ2VzIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcywgb3IgdGhhdCBjb3VsZCBiZSBuZWdhdGl2ZWx5IGFmZmVjdGVkIGJ5IGl0cyBhYnNlbmNlIG9yIG1vZGlmaWNhdGlvbnMuIFBlcmhhcHMgSSYjMzk7bGwgbmVlZCB0byBzdGFydCBieSBsb29raW5nIGF0IHN5c3RlbSBjb25maWd1cmF0aW9ucywga2VybmVsIG1vZHVsZXMsIG9yIGFwcGxpY2F0aW9uLWxldmVsIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhlIHN1cmZhY2UgYW5kIGRldGVybWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIE5VTUEsIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuIEkmIzM5O2xsIGtlZXAgYW4gb3BlbiBtaW5kLCBiZWNhdXNlIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xubW0vS2NvbmZpZzoxNDpcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxubW0vS2NvbmZpZy0xNS1cdGRlZmF1bHQgeVxuLS1cbm1tL0tjb25maWc9MjI9Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG5tbS9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBTV0FQXG5tbS9LY29uZmlnLTI1LVx0c2VsZWN0IENSWVBUT1xuLS1cbm1tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG5tbS9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy0zOC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQ1PWNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG5tbS9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy00OC1cdGRlZmF1bHQgblxuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG5tbS9LY29uZmlnLTYwLVx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgY29tcHJlc3NvclwmIzM0O1xubW0vS2NvbmZpZzo2MTpcdGRlcGVuZHMgb24gWlNXQVBcbm1tL0tjb25maWctNjItXHRkZWZhdWx0IFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbi0tXG5tbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG5tbS9LY29uZmlnOjExNjogICAgICAgZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy0xMTctICAgICAgIGRlZmF1bHQgXCYjMzQ7ZGVmbGF0ZVwmIzM0OyBpZiBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxuLS1cbm1tL0tjb25maWc9MTI4PW1lbnUgXCYjMzQ7WnNtYWxsb2MgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbm1tL0tjb25maWc6MTI5Olx0ZGVwZW5kcyBvbiBaU01BTExPQ1xubW0vS2NvbmZpZy0xMzAtXG4tLVxubW0vS2NvbmZpZz0xNjg9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxubW0vS2NvbmZpZy0xNjktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE3MDpcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcdTAwMjZcdTAwMjYgIVRJTllfUkNVXG5tbS9LY29uZmlnOjE3MTpcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG5tbS9LY29uZmlnLTE3Mi1cbm1tL0tjb25maWc9MTczPWNvbmZpZyBTTFVCX1RJTllcbm1tL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xubW0vS2NvbmZpZzoxNzU6XHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgIUNPTVBJTEVfVEVTVFxubW0vS2NvbmZpZy0xNzYtXHRzZWxlY3QgU0xBQl9NRVJHRV9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZz0yMDA9Y29uZmlnIFNMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9LY29uZmlnLTIwMS1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHNsYWIgZnJlZWxpc3RcJiMzNDtcbm1tL0tjb25maWc6MjAyOlx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTIwMy1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTIwOD1jb25maWcgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O0hhcmRlbiBzbGFiIGZyZWVsaXN0IG1ldGFkYXRhXCYjMzQ7XG5tbS9LY29uZmlnOjIxMDpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMTEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0yMTc9Y29uZmlnIFNMQUJfQlVDS0VUU1xubW0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1N1cHBvcnQgYWxsb2NhdGlvbiBmcm9tIHNlcGFyYXRlIGttYWxsb2MgYnVja2V0c1wmIzM0O1xubW0vS2NvbmZpZzoyMTk6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjIwLVx0ZGVmYXVsdCBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG4tLVxubW0vS2NvbmZpZz0yMzQ9Y29uZmlnIFNMVUJfU1RBVFNcbi0tXG5tbS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3NcJiMzNDtcbm1tL0tjb25maWc6MjM3Olx0ZGVwZW5kcyBvbiBTWVNGUyBcdTAwMjZcdTAwMjYgIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMzgtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0yNDc9Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFU1xubW0vS2NvbmZpZzoyNDg6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtQYXJ0aXRpb25lZCBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTI2Mz1jaG9pY2Vcbm1tL0tjb25maWctMjY0LVx0cHJvbXB0IFwmIzM0O1BhcnRpdGlvbmVkIHNsYWIgY2FjaGUgbW9kZVwmIzM0O1xubW0vS2NvbmZpZzoyNjU6XHRkZXBlbmRzIG9uIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFU1xubW0vS2NvbmZpZy0yNjYtXHRkZWZhdWx0IEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEIGlmIENDX0hBU19BTExPQ19UT0tFTlxuLS1cbm1tL0tjb25maWc9MjgzPWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9UWVBFRFxubW0vS2NvbmZpZy0yODQtXHRib29sIFwmIzM0O1R5cGUgYmFzZWQgc2xhYiBjYWNoZSBzZWxlY3Rpb24gZm9yIG5vcm1hbCBrbWFsbG9jXCYjMzQ7XG5tbS9LY29uZmlnOjI4NTpcdGRlcGVuZHMgb24gQ0NfSEFTX0FMTE9DX1RPS0VOXG5tbS9LY29uZmlnLTI4Ni1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTM1ND1jb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVEXG5tbS9LY29uZmlnLTM1NS1cdGJvb2wgXCYjMzQ7QWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWRcJiMzNDtcbm1tL0tjb25maWc6MzU2Olx0ZGVwZW5kcyBvbiBFWFBFUlQgXHUwMDI2XHUwMDI2ICFNTVVcbm1tL0tjb25maWctMzU3LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZz0zNzY9Y29uZmlnIFNFTEVDVF9NRU1PUllfTU9ERUxcbm1tL0tjb25maWctMzc3LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzozNzg6XHRkZXBlbmRzIG9uIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTFxubW0vS2NvbmZpZy0zNzktXG5tbS9LY29uZmlnPTM4MD1jaG9pY2Vcbm1tL0tjb25maWctMzgxLVx0cHJvbXB0IFwmIzM0O01lbW9yeSBtb2RlbFwmIzM0O1xubW0vS2NvbmZpZzozODI6XHRkZXBlbmRzIG9uIFNFTEVDVF9NRU1PUllfTU9ERUxcbm1tL0tjb25maWctMzgzLVx0ZGVmYXVsdCBTUEFSU0VNRU1fTUFOVUFMIGlmIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFRcbi0tXG5tbS9LY29uZmlnPTM5MT1jb25maWcgRkxBVE1FTV9NQU5VQUxcbm1tL0tjb25maWctMzkyLVx0Ym9vbCBcJiMzNDtGbGF0IE1lbW9yeVwmIzM0O1xubW0vS2NvbmZpZzozOTM6XHRkZXBlbmRzIG9uICFBUkNIX1NQQVJTRU1FTV9FTkFCTEUgfHwgQVJDSF9GTEFUTUVNX0VOQUJMRVxubW0vS2NvbmZpZy0zOTQtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz00MDY9Y29uZmlnIFNQQVJTRU1FTV9NQU5VQUxcbm1tL0tjb25maWctNDA3LVx0Ym9vbCBcJiMzNDtTcGFyc2UgTWVtb3J5XCYjMzQ7XG5tbS9LY29uZmlnOjQwODpcdGRlcGVuZHMgb24gQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG5tbS9LY29uZmlnLTQwOS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQyMT1jb25maWcgU1BBUlNFTUVNXG5tbS9LY29uZmlnLTQyMi1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NDIzOlx0ZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgXHUwMDI2XHUwMDI2IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSkgfHwgU1BBUlNFTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MjQtXG5tbS9LY29uZmlnPTQyNT1jb25maWcgRkxBVE1FTVxubW0vS2NvbmZpZy00MjYtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjQyNzpcdGRlcGVuZHMgb24gIVNQQVJTRU1FTSB8fCBGTEFUTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MjgtXG4tLVxubW0vS2NvbmZpZz00NDc9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXG5tbS9LY29uZmlnLTQ0OC1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NDQ5Olx0ZGVwZW5kcyBvbiBTUEFSU0VNRU0gXHUwMDI2XHUwMDI2ICFTUEFSU0VNRU1fU1RBVElDXG5tbS9LY29uZmlnLTQ1MC1cbi0tXG5tbS9LY29uZmlnPTQ1ND1jb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU1LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo0NTY6XHRkZXBlbmRzIG9uIFNQQVJTRU1FTSBcdTAwMjZcdTAwMjYgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXG5tbS9LY29uZmlnLTQ1Ny1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQ4MD1jb25maWcgSEFWRV9HVVBfRkFTVFxubW0vS2NvbmZpZzo0ODE6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy00ODItXHRib29sXG4tLVxubW0vS2NvbmZpZz01MDQ9Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG5tbS9LY29uZmlnLTUwNS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NTA2Olx0ZGVwZW5kcyBvbiAhREVWTUVNIHx8IFNUUklDVF9ERVZNRU1cbm1tL0tjb25maWctNTA3LVxuLS1cbm1tL0tjb25maWc9NTEyPW1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUxNC1cdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnOjUxNTpcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWc6NTE2Olx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZzo1MTc6XHRkZXBlbmRzIG9uIDY0QklUXG5tbS9LY29uZmlnLTUxOC1cdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG4tLVxubW0vS2NvbmZpZz01ODQ9Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXG5tbS9LY29uZmlnLTU4NS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NTg2Olx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxubW0vS2NvbmZpZy01ODctXG4tLVxubW0vS2NvbmZpZz01OTA9Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXG4tLVxubW0vS2NvbmZpZy01OTYtIyBEZWZhdWx0IHRvIDQgZm9yIHdpZGVyIHRlc3RpbmcsIHRob3VnaCA4IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUuXG5tbS9LY29uZmlnOjU5NzojIEFSTSYjMzk7cyBhZGp1c3RfcHRlICh1bnVzZWQgaWYgVklQVCkgZGVwZW5kcyBvbiBtbS13aWRlIHBhZ2VfdGFibGVfbG9jay5cbm1tL0tjb25maWctNTk4LSMgUEEtUklTQyA3eHh4JiMzOTtzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxuLS1cbm1tL0tjb25maWc9NjA0PWNvbmZpZyBTUExJVF9QVEVfUFRMT0NLU1xubW0vS2NvbmZpZy02MDUtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjYwNjpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjYwNzpcdGRlcGVuZHMgb24gU01QXG5tbS9LY29uZmlnOjYwODpcdGRlcGVuZHMgb24gTlJfQ1BVUyBcdTAwM2U9IDRcbm1tL0tjb25maWc6NjA5Olx0ZGVwZW5kcyBvbiAhQVJNIHx8IENQVV9DQUNIRV9WSVBUXG5tbS9LY29uZmlnOjYxMDpcdGRlcGVuZHMgb24gIVBBUklTQyB8fCBQQTIwXG5tbS9LY29uZmlnOjYxMTpcdGRlcGVuZHMgb24gIVNQQVJDMzJcbm1tL0tjb25maWc6NjEyOlx0ZGVwZW5kcyBvbiAhVU1MXG5tbS9LY29uZmlnLTYxMy1cbi0tXG5tbS9LY29uZmlnPTYxNz1jb25maWcgU1BMSVRfUE1EX1BUTE9DS1Ncbm1tL0tjb25maWctNjE4LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo2MTk6XHRkZXBlbmRzIG9uIFNQTElUX1BURV9QVExPQ0tTIFx1MDAyNlx1MDAyNiBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLXG5tbS9LY29uZmlnLTYyMC1cbi0tXG5tbS9LY29uZmlnPTYyOD1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTYzMC1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2MzE6XHRkZXBlbmRzIG9uIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgQkFMTE9PTlxubW0vS2NvbmZpZy02MzItXHRoZWxwXG4tLVxubW0vS2NvbmZpZz02NDA9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY0My1cdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWc6NjQ0Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNjQ1LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NjU1PWNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcbm1tL0tjb25maWctNjU2LVx0aW50XG5tbS9LY29uZmlnOjY1NzpcdGRlcGVuZHMgb24gQ09NUEFDVElPTlxubW0vS2NvbmZpZy02NTgtXHRkZWZhdWx0IDAgaWYgUFJFRU1QVF9SVFxuLS1cbm1tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjczLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjY3NDpcdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnLTY3NS1cdHNlbGVjdCBNSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnPTY4Mj1jb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4My1cdGJvb2xcbm1tL0tjb25maWc6Njg0Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNjg1LVxuLS1cbm1tL0tjb25maWc9NzI2PWNvbmZpZyBLU01cbm1tL0tjb25maWctNzI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcJiMzNDtcbm1tL0tjb25maWc6NzI4Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNzI5LVx0c2VsZWN0IFhYSEFTSFxuLS1cbm1tL0tjb25maWc9NzQxPWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcbm1tL0tjb25maWctNzQyLVx0aW50IFwmIzM0O0xvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cJiMzNDtcbm1tL0tjb25maWc6NzQzOlx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctNzQ0LVx0ZGVmYXVsdCA0MDk2XG4tLVxubW0vS2NvbmZpZz03NjM9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnOjc2NDpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjc2NTpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTc3ND1jb25maWcgSFdQT0lTT05fSU5KRUNUXG5tbS9LY29uZmlnLTc3NS1cdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG5tbS9LY29uZmlnOjc3NjpcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubW0vS2NvbmZpZy03NzctXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1Jcbi0tXG5tbS9LY29uZmlnPTc3OT1jb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xubW0vS2NvbmZpZy03ODAtXHRpbnQgXCYjMzQ7VHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXCYjMzQ7XG5tbS9LY29uZmlnOjc4MTpcdGRlcGVuZHMgb24gIU1NVVxubW0vS2NvbmZpZy03ODItXHRkZWZhdWx0IDFcbi0tXG5tbS9LY29uZmlnPTgxMz1jb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL0tjb25maWctODE0LVx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xubW0vS2NvbmZpZzo4MTU6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgxNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTgzMj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xubW0vS2NvbmZpZzo4MzQ6XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbm1tL0tjb25maWctODM1LVx0c2VsZWN0IENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnPTk2OD1jb25maWcgVEhQX1NXQVBcbm1tL0tjb25maWctOTY5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo5NzA6XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXHUwMDI2XHUwMDI2IFNXQVAgXHUwMDI2XHUwMDI2IDY0QklUXG5tbS9LY29uZmlnLTk3MS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwMTQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVBcbm1tL0tjb25maWctMTAxNS1cdGRlZl9ib29sIG5cbm1tL0tjb25maWc6MTAxNjpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctMTAxNy1cbm1tL0tjb25maWc9MTAxOD1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG5tbS9LY29uZmlnLTEwMTktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjEwMjA6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy0xMDIxLVxubW0vS2NvbmZpZz0xMDIyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbm1tL0tjb25maWctMTAyMy1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyNDpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vS2NvbmZpZy0xMDI1LVxuLS1cbm1tL0tjb25maWc9MTAzNj1jb25maWcgTkVFRF9QRVJfQ1BVX0tNXG5tbS9LY29uZmlnOjEwMzc6XHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxubW0vS2NvbmZpZy0xMDM4LVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9MTA1Mz1jb25maWcgQ01BXG5tbS9LY29uZmlnLTEwNTQtXHRib29sIFwmIzM0O0NvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclwmIzM0O1xubW0vS2NvbmZpZzoxMDU1Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctMTA1Ni1cdHNlbGVjdCBNSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnPTEwNjg9Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwNjktXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xubW0vS2NvbmZpZzoxMDcwOlx0ZGVwZW5kcyBvbiBDTUEgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5tbS9LY29uZmlnLTEwNzEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDc0PWNvbmZpZyBDTUFfU1lTRlNcbm1tL0tjb25maWctMTA3NS1cdGJvb2wgXCYjMzQ7Q01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG5tbS9LY29uZmlnOjEwNzY6XHRkZXBlbmRzIG9uIENNQSBcdTAwMjZcdTAwMjYgU1lTRlNcbm1tL0tjb25maWctMTA3Ny1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwODE9Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDgyLVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xubW0vS2NvbmZpZzoxMDgzOlx0ZGVwZW5kcyBvbiBDTUFcbm1tL0tjb25maWctMTA4NC1cdGRlZmF1bHQgMjAgaWYgTlVNQVxuLS1cbm1tL0tjb25maWc9MTEyOD1jb25maWcgTUVNX1NPRlRfRElSVFlcbm1tL0tjb25maWctMTEyOS1cdGJvb2wgXCYjMzQ7VHJhY2sgbWVtb3J5IGNoYW5nZXNcJiMzNDtcbm1tL0tjb25maWc6MTEzMDpcdGRlcGVuZHMgb24gQ0hFQ0tQT0lOVF9SRVNUT1JFIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfU09GVF9ESVJUWSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubW0vS2NvbmZpZy0xMTMxLVx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4tLVxubW0vS2NvbmZpZz0xMTQzPWNvbmZpZyBTVEFDS19NQVhfREVGQVVMVF9TSVpFX01CXG4tLVxubW0vS2NvbmZpZy0xMTQ2LVx0cmFuZ2UgOCAyMDQ4XG5tbS9LY29uZmlnOjExNDc6XHRkZXBlbmRzIG9uIFNUQUNLX0dST1dTVVAgXHUwMDI2XHUwMDI2ICghNjRCSVQgfHwgQ09NUEFUKVxubW0vS2NvbmZpZy0xMTQ4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTE1NT1jb25maWcgREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVFxubW0vS2NvbmZpZy0xMTU2LVx0Ym9vbCBcJiMzNDtEZWZlciBpbml0aWFsaXNhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8ga3RocmVhZHNcJiMzNDtcbm1tL0tjb25maWc6MTE1NzpcdGRlcGVuZHMgb24gU1BBUlNFTUVNXG5tbS9LY29uZmlnOjExNTg6XHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cbm1tL0tjb25maWc6MTE1OTpcdGRlcGVuZHMgb24gNjRCSVRcbm1tL0tjb25maWc6MTE2MDpcdGRlcGVuZHMgb24gIUtNU0FOXG5tbS9LY29uZmlnLTExNjEtXHRzZWxlY3QgUEFEQVRBXG4tLVxubW0vS2NvbmZpZz0xMTc5PWNvbmZpZyBJRExFX1BBR0VfVFJBQ0tJTkdcbm1tL0tjb25maWctMTE4MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGlkbGUgcGFnZSB0cmFja2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxMTgxOlx0ZGVwZW5kcyBvbiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnLTExODItXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbi0tXG5tbS9LY29uZmlnPTEyMTc9Y29uZmlnIFpPTkVfRE1BMzJcbm1tL0tjb25maWctMTIxOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEzMiB6b25lXCYjMzQ7IGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxubW0vS2NvbmZpZzoxMjE5Olx0ZGVwZW5kcyBvbiAhWDg2XzMyXG5tbS9LY29uZmlnLTEyMjAtXHRkZWZhdWx0IHkgaWYgQVJNNjRcbi0tXG5tbS9LY29uZmlnPTEyMjI9Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjMtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbm1tL0tjb25maWc6MTIyNDpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy0xMjI1LVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuLS1cbm1tL0tjb25maWc9MTI0ND1jb25maWcgSE1NX01JUlJPUlxubW0vS2NvbmZpZy0xMjQ1LVx0Ym9vbFxubW0vS2NvbmZpZzoxMjQ2Olx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWctMTI0Ny1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5tbS9LY29uZmlnPTEyNTI9Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTMtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xubW0vS2NvbmZpZzoxMjU0Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjU1LVx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWc9MTI5MT1jb25maWcgR1VQX1RFU1Rcbm1tL0tjb25maWctMTI5Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0c1wmIzM0O1xubW0vS2NvbmZpZzoxMjkzOlx0ZGVwZW5kcyBvbiBERUJVR19GU1xubW0vS2NvbmZpZy0xMjk0LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTMxMT1jb21tZW50IFwmIzM0O0dVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZFwmIzM0O1xubW0vS2NvbmZpZzoxMzEyOlx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXHUwMDI2XHUwMDI2ICFERUJVR19GU1xubW0vS2NvbmZpZy0xMzEzLVxuLS1cbm1tL0tjb25maWc9MTMxNz1jb25maWcgRE1BUE9PTF9URVNUXG5tbS9LY29uZmlnLTEzMTgtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgYSBtb2R1bGUgdG8gcnVuIHRpbWUgdGVzdHMgb24gZG1hX3Bvb2xcJiMzNDtcbm1tL0tjb25maWc6MTMxOTpcdGRlcGVuZHMgb24gSEFTX0RNQVxubW0vS2NvbmZpZy0xMzIwLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTM0MT1jb25maWcgU0VDUkVUTUVNXG4tLVxubW0vS2NvbmZpZy0xMzQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtZmRfc2VjcmV0KCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG5tbS9LY29uZmlnOjEzNDQ6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQXG5tbS9LY29uZmlnLTEzNDUtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMzUwPWNvbmZpZyBBTk9OX1ZNQV9OQU1FXG5tbS9LY29uZmlnLTEzNTEtXHRib29sIFwmIzM0O0Fub255bW91cyBWTUEgbmFtZSBzdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjEzNTI6XHRkZXBlbmRzIG9uIFBST0NfRlMgXHUwMDI2XHUwMDI2IEFEVklTRV9TWVNDQUxMUyBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnLTEzNTMtXG4tLVxubW0vS2NvbmZpZz0xMzc0PWNvbmZpZyBVU0VSRkFVTFRGRF9SV1Bcbm1tL0tjb25maWctMTM3NS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTM3NjpcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG5tbS9LY29uZmlnLTEzNzctXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMzgzPW1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM4NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbm1tL0tjb25maWc6MTM4NTpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTEzODYtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMzkwPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTItXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6MTM5MzpcdGRlcGVuZHMgb24gVVNFUkZBVUxURkQgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxubW0vS2NvbmZpZy0xMzk0LVxuLS1cbm1tL0tjb25maWc9MTQwMT1jb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDAyLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG5tbS9LY29uZmlnOjE0MDM6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy0xNDA0LVx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG5tbS9LY29uZmlnOjE0MDU6XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctMTQwNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0MTA9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDExLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xubW0vS2NvbmZpZzoxNDEyOlx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MTMtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDE2PWNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxNDE4Olx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MTktXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDI1PWNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI2LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDI3Olx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbm1tL0tjb25maWctMTQyOC0jIH1cbi0tXG5tbS9LY29uZmlnPTE0MzM9Y29uZmlnIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDM1Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbm1tL0tjb25maWctMTQzNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0NDI9Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG5tbS9LY29uZmlnLTE0NDMtXHRib29sXG5tbS9LY29uZmlnOjE0NDQ6XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG5tbS9LY29uZmlnLTE0NDUtXG4tLVxubW0vS2NvbmZpZz0xNDU1PWNvbmZpZyBOVU1BX0VNVVxubW0vS2NvbmZpZy0xNDU2LVx0Ym9vbCBcJiMzNDtOVU1BIGVtdWxhdGlvblwmIzM0O1xubW0vS2NvbmZpZzoxNDU3Olx0ZGVwZW5kcyBvbiBOVU1BX01FTUJMS1Ncbm1tL0tjb25maWc6MTQ1ODpcdGRlcGVuZHMgb24gWDg2IHx8IEdFTkVSSUNfQVJDSF9OVU1BXG5tbS9LY29uZmlnLTE0NTktXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDczPWNvbmZpZyBQVF9SRUNMQUlNXG5tbS9LY29uZmlnLTE0NzQtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE0NzU6XHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxubW0vS2NvbmZpZy0xNDc2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTQ5Mj1jb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG5tbS9LY29uZmlnLTE0OTMtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGhlIGxhenkgTU1VIG1vZGVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vS2NvbmZpZzoxNDk0Olx0ZGVwZW5kcyBvbiBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5tbS9LY29uZmlnOjE0OTU6XHRkZXBlbmRzIG9uIEtVTklUXG5tbS9LY29uZmlnLTE0OTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBUSFAgYW5kIE1FTUNHIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGNvbmZpZ3VyZWQuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0cyBhdmFpbGFiaWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBib3RoIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCB0aGUgYWJzZW5jZSBvZiBgUFJFRU1QVF9SVGAuIFRoZXJlZm9yZSwgd2hlbiBkb2N1bWVudGluZyB0aGVzZSwgSSBzaG91bGQganVzdCBsaXN0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AuIFdhaXQgYSBtaW51dGUsIHdoZXJlIGlzIGBNRU1DR2AgZGVmaW5lZD8gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2AuIEkgc2hvdWxkIGdvIGNoZWNrIHRoYXQgZmlsZSB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODMtXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNi1cbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDgtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIEZ1bmN0aW9uIFNlbGVjdGlvbiBmb3IgdG1wZnMvc2htZW0gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBiZXN0IGZvY3VzIGZ1bmN0aW9ucyBmb3IgdGhpcyB0bXBmcy9zaG1lbSBjaGFuZ2UsIGNvbnNpZGVyaW5nIGBNRU1DR2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRmlyc3QsIEkgcnVsZWQgb3V0IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIHF1aWNrbHksIGRlc3BpdGUgdGhlaXIgQVBJIGVudHJ5IHBvaW50IHN0YXR1cy4gIGBzaG1lbV9nZXRfZm9saW9gIGlzIGEgaG90IHBhdGg7IGl0JiMzOTtzIGNhbGxlZCB2ZXJ5IGZyZXF1ZW50bHkgd2hpY2ggY291bGQgc2tldyB0aGUgcmVzdWx0cywgd2hpY2ggaXMgdW5kZXNpcmFibGUuIFdlIHdhbnQgYSBtb3JlIHRhcmdldGVkIHRlc3QuCgpUaGVuLCBJIGxvb2tlZCBhdCBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCwgYnV0IGl0JiMzOTtzIHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgZnVuY3Rpb25zLCBidXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgb25seSBhIHByb2JsZW0gaWYgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIE5PVCBpbmxpbmVkLCB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBhbmQgKmNhbiogYmUgdXNlZC4gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIHN0YXRpYywgYnV0IGlzIGFzc2lnbmVkIHRvIGBzaG1lbV9vcHMuZnJlZV9jYWNoZWRfb2JqZWN0c2AsIHNvIGl04oCZcyBsaWtlbHkgbm90IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIG1ha2VzIGl0IHByb21pc2luZy4gQW5kIHllcywgaXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpZWQgbG9naWMmIzM5O3MgZW50cnkgcG9pbnQgaXMgZXhhY3RseSBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBhIHN0cm9uZyBjb250ZW5kZXIuIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuCgpJIHJldmlld2VkIHRoZSBvdGhlciBmdW5jdGlvbnMsIGJ1dCBmb3VuZCB0aGF0IGBzaG1lbV9ldmljdF9pbm9kZWAsIGFuZCBgc2htZW1fZmlsbF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBidXQgY2FsbGVkIGluZGlyZWN0bHkgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGRhdGEgc3RydWN0dXJlcy4gU28sIHRoZXNlIGFyZSBhbHNvIG5vdCBpbmxpbmVkLgoKVGhlIGJlc3QgZm9jdXMgZnVuY3Rpb25zLCBJJiMzOTt2ZSBjb25jbHVkZWQsIGFyZSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIFRoZXkmIzM5O3JlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHNocmlua2VyIGxvZ2ljIG1vZGlmaWNhdGlvbnMuCgpGaW5hbGx5LCBJIGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBzaG1lbV9nZXRfZm9saW9gIGFzIGl0IGlzIGFuIGVudHJ5IHBvaW50LCBhbmQgdGhlIGFsbG9jYXRpb24gcGF0aCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hyaW5rbGlzdDoKYGBgYwoJaWYgKGFsbG9jZWQgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7CgkgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSAmbHQ7IGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7CgkJLyoKCQkgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0CgkJICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KCQkgKi8KCQlzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApOwoJfQpgYGAKSG93ZXZlciwgdGhlIGFsbG9jYXRpb24gb2YgZm9saW9zIHRvIHRoZSBzaHJpbmtsaXN0IG9ubHkgb2NjdXJzIGZvciBodWdlIGZvbGlvcyBvbiB0bXBmcywgc28gaXQmIzM5O3Mgbm90IGEgZ2VuZXJhbCBob3QgcGF0aC4gVGhlIGZ1bmN0aW9uIGBzaG1lbV9nZXRfZm9saW9gIGl0c2VsZiwgaG93ZXZlciwgaXMgY2FsbGVkIG9uIEFMTCBwYWdlIGZhdWx0cy4gV2hpbGUgYHNobWVtX2dldF9mb2xpb2Agd291bGQgaGl0IHRoYXQgYWxsb2NhdGlvbiBwYXRoIGFuZCBiZSByZWxldmFudCwgaXQmIzM5O3MgYSB2ZXJ5IGhvdCBwYXRoLCBzbyBJJiMzOTtsbCBzdGljayB3aXRoIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBmb3Igbm93LCB0byBlbnN1cmUgc3BlY2lmaWNpdHkuIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgc2htZW1fZXZpY3RfaW5vZGVgIGFzIGl0IGNhbGxzIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLiBJIGp1c3QgY2hlY2tlZCB0aGF0IEkgc3BlbGxlZCBhbGwgdGhlIGZ1bmN0aW9uIG5hbWVzIGNvcnJlY3RseS4uLiBZZXMsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBpdCBpcy4KClRoZSBwYXRjaCBhbHNvIHNwZWNpZmllcyB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTUNHYCBhcmUgdXNlZCwgYnV0IGBDT05GSUdfU0hNRU1gIGlzIHVzdWFsbHkgZW5hYmxlZCBzbyBubyBuZWVkIHRvIHZlcmlmeSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5NDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsaXphdGlvbiBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFNITUVNYCBpcyBhIHByZXR0eSBzcGVjaWZpYyB0ZXJtIHRoYXQgc2hvdWxkIHlpZWxkIHJlbGV2YW50IHJlc3VsdHMgaWYgSSB1c2UgaXQgYXMgYSBzZWFyY2ggdGVybS4gTXkgYWltIGlzIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgaG93IHNoYXJlZCBtZW1vcnkgaXMgY29uZmlndXJlZCwgY29udHJvbGxlZCBhbmQgc3VwcG9ydGVkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBzeW1ib2xzIGFyZSBzbyB0aGF0IEkgY2FuIHRoZW4gdHJhY2UgdGhlaXIgZGVwZW5kZW5jeSB0cmVlcywgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgc2V0dGluZ3MuIExldCYjMzk7cyBzZWUgd2hhdCBgaW5pdC9LY29uZmlnYCByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTSE1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkzMT1jb25maWcgRVZFTlRGRFxuLS1cbmluaXQvS2NvbmZpZy0xOTM5LVxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIFNITUVNXG5pbml0L0tjb25maWctMTk0MS1cdGJvb2wgXCYjMzQ7VXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2hhcmVkIE1lbW9yeSBIdWdlIFBhZ2UgU2hyaW5rZXIgUGF0Y2gqKgoKT2theSwgc28gYFNITUVNYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYWNjb3JkaW5nIHRvIGBpbml0L0tjb25maWdgLCB3aGljaCBpcyBnb29kIG5ld3MuIEFuZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgYWxsIGJlaW5nIGVuYWJsZWQgdG9vLCB0aGluZ3MgYXJlIGxvb2tpbmcgcHJvbWlzaW5nLgoKTGV0JiMzOTtzIGRpdmUgYmFjayBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG1vdmluZyB0aGUgc2hyaW5rZXIgZnJvbSBhIGdsb2JhbCBsaXN0IHRvIGEgcGVyLW1lbWNnIGBsaXN0X2xydWAuIFRoZSB3YXkgaXQgdXNlcyBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCBpcyBjaGFuZ2luZyB0byB1c2UgYGxpc3RfbHJ1X3Nocmlua193YWxrYCBhbmQgYGxpc3RfbHJ1X3dhbGtgLiBUaGVyZSYjMzk7cyBhIHdob2xlIHN1aXRlIG9mIG5ldyBmdW5jdGlvbnMgYWRkZWQ6IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIHdoaWNoIGFyZSBhbGwgcGFydCBvZiB0aGF0IG5ldyBgbGlzdF9scnVgIGJhc2VkIHNocmlua2VyIGltcGxlbWVudGF0aW9uLgoKSXQgYWxzbyBhcHBlYXJzIHRoYXQgYHNobWVtX3NiX2luZm9gIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgc3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3RgIGluc3RlYWQgb2YgdGhlIG9sZCBgc3RydWN0IGxpc3RfaGVhZCBzaHJpbmtsaXN0YC4gU2ltaWxhcmx5LCBgc2htZW1faW5vZGVfaW5mb2AgaXMgbm93IGluY2x1ZGluZyBgc2hyaW5rbGlzdF9tZW1jZ2AgYW5kIGBzaHJpbmtsaXN0X25pZGAuCgpUaGUgbG9naWMgKmxvb2tzKiBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgcmVhY2hhYmxlLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2V2aWN0X2lub2RlYCwgYW5kIGBzaG1lbV9maWxsX3N1cGVyYC4gSGFuZyBvbiBhIHNlY29uZC4uLiBgc2htZW1fZXZpY3RfaW5vZGVgIGFuZCBgc2htZW1fZmlsbF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBidXQgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLiBJbnRlcmVzdGluZy4gQXJlIHRoZXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zPyBZZXMsIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBub24tc3RhdGljLiBCdXQsIEkgdGhpbmsgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBpbmNsdWRlIHdpbGwgYmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIHNpbmNlIHRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBtb2RpZmllZCBzaHJpbmtlciBsb2dpYy4KCk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgaXNuJiMzOTt0IGRlZmluZWQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9zaG1lbS5jLTgyOS1cbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcbm1tL3NobWVtLmMtODMxLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbm1tL3NobWVtLmM9ODM1PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuLS1cbm1tL3NobWVtLmMtODM4LXtcbm1tL3NobWVtLmM6ODM5Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XG5tbS9zaG1lbS5jLTg0MC1cdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuLS1cbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuLS1cbm1tL3NobWVtLmMtOTMzLXtcbm1tL3NobWVtLmM6OTM0Olx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2Nhbjtcbm1tL3NobWVtLmMtOTM1LVx0c3RydWN0IGlub2RlICppbm9kZTtcbi0tXG5tbS9zaG1lbS5jLTEwMjAtXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxubW0vc2htZW0uYy0xMDIyLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3NobWVtLmM9NTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTQyNi1cdC5ucl9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcbm1tL3NobWVtLmM6NTQyNzpcdC5mcmVlX2NhY2hlZF9vYmplY3RzXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXG5tbS9zaG1lbS5jLTU0MjgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIHRoZSBDb21waWxhdGlvbiBDb250ZXh0KioKCkhtbSwgc28gSSYjMzk7dmUgc3BvdHRlZCBhIGNydWNpYWwgZGV0YWlsIGhlcmU6IHRoYXQgYCNlbmRpZmAgcmlnaHQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQgdG8gYGZyZWVfY2FjaGVkX29iamVjdHNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKmFmdGVyKiB0aGUgYXNzaWdubWVudCBpcyBpbXBvcnRhbnQsIGFzIGl0IHN1Z2dlc3RzIHRoZSBkZWZpbml0aW9uIG9yIGFzc2lnbm1lbnQgbWlnaHQgb25seSBiZSBwcmVzZW50IHVuZGVyIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHBpcXVlZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiBwbGF5LiBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBjaGVjayBwcmVjaXNlbHkgd2hpY2ggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBzdXJyb3VuZCB0aGUgZGVmaW5pdGlvbiBvZiBgc2htZW1fb3BzYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgc2VlbXMgdG8gY29udHJvbCB3aGV0aGVyIGBmcmVlX2NhY2hlZF9vYmplY3RzYCBpcyBhc3NpZ25lZCB0byBhIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZSBgI2lmZGVmYHMgYXJlIHRoZSBrZXkuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgcmV2ZWFsIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0yNTQ9c3RhdGljIHZvaWQgc2htZW1faW5vZGVfdW5hY2N0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHBhZ2VzKVxuLS1cbm1tL3NobWVtLmMtMjY2LVxubW0vc2htZW0uYzoyNjc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcztcbm1tL3NobWVtLmMtMjY4LXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHM7XG4tLVxubW0vc2htZW0uYz01MTI1PXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy01MjEyLVx0c2ItXHUwMDNlc19tYWdpYyA9IFRNUEZTX01BR0lDO1xubW0vc2htZW0uYzo1MjEzOlx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnNobWVtX29wcztcbm1tL3NobWVtLmMtNTIxNC1cdHNiLVx1MDAzZXNfdGltZV9ncmFuID0gMTtcbi0tXG5tbS9zaG1lbS5jPTU0MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5tbS9zaG1lbS5jLTU0MTAtXG5tbS9zaG1lbS5jOjU0MTE6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbm1tL3NobWVtLmMtNTQxMi1cdC5hbGxvY19pbm9kZVx0PSBzaG1lbV9hbGxvY19pbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBtbS9zaG1lbS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NDExLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoYXQgcG9pbnQgaW4gdGhlIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgYXJlYSB0byBiZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBwZXJoYXBzIHNvbWUgc29ydCBvZiBtZXRhZGF0YSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zIOKAkyBjb3VsZCBiZSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBiZWluZyB1c2VkLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSBjYWNoZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IHJldmVhbHMuIEkgYW50aWNpcGF0ZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgd2lsbCBwcm92aWRlIHRoZSBrZXkgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDExOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbjU0MTI6XHRcdC5hbGxvY19pbm9kZVx0PSBzaG1lbV9hbGxvY19pbm9kZSxcbjU0MTM6XHRcdC5mcmVlX2lub2RlXHQ9IHNobWVtX2ZyZWVfaW5fY29yZV9pbm9kZSxcbjU0MTQ6XHRcdC5kZXN0cm95X2lub2RlXHQ9IHNobWVtX2Rlc3Ryb3lfaW5vZGUsXG41NDE1Olx0I2lmZGVmIENPTkZJR19UTVBGU1xuNTQxNjpcdFx0LnN0YXRmc1x0XHQ9IHNobWVtX3N0YXRmcyxcbjU0MTc6XHRcdC5zaG93X29wdGlvbnNcdD0gc2htZW1fc2hvd19vcHRpb25zLFxuNTQxODpcdCNlbmRpZlxuNTQxOTpcdCNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbjU0MjA6XHRcdC5nZXRfZHF1b3RzXHQ9IHNobWVtX2dldF9kcXVvdHMsXG41NDIxOlx0I2VuZGlmXG41NDIyOlx0XHQuZXZpY3RfaW5vZGVcdD0gc2htZW1fZXZpY3RfaW5vZGUsXG41NDIzOlx0XHQuZHJvcF9pbm9kZVx0PSBpbm9kZV9qdXN0X2Ryb3AsXG41NDI0Olx0XHQucHV0X3N1cGVyXHQ9IHNobWVtX3B1dF9zdXBlcixcbjU0MjU6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG41NDI2Olx0XHQubnJfY2FjaGVkX29iamVjdHNcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXG41NDI3Olx0XHQuZnJlZV9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9zY2FuLFxuNTQyODpcdCNlbmRpZlxuNTQyOTpcdH07XG41NDMwOlx0XG41NDMxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHMgPSB7XG41NDMyOlx0XHQuZmF1bHRcdFx0PSBzaG1lbV9mYXVsdCxcbjU0MzM6XHRcdC5tYXBfcGFnZXNcdD0gZmlsZW1hcF9tYXBfcGFnZXMsXG41NDM0Olx0I2lmZGVmIENPTkZJR19OVU1BXG41NDM1Olx0XHQuc2V0X3BvbGljeSAgICAgPSBzaG1lbV9zZXRfcG9saWN5LFxuNTQzNjpcdFx0LmdldF9wb2xpY3kgICAgID0gc2htZW1fZ2V0X3BvbGljeSxcbjU0Mzc6XHQjZW5kaWZcbjU0Mzg6XHQjaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXG41NDM5Olx0XHQudWZmZF9vcHNcdD0gXHUwMDI2c2htZW1fdWZmZF9vcHMsXG41NDQwOlx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVucGFja2luZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBhbmQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLi4uIEkgc2VlIHRoZXkmIzM5O3JlIG9ubHkgKmFjdHVhbGx5KiBhc3NpZ25lZCBhIHZhbHVlIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXMgZXhwZWN0ZWQuIFRoZXkmIzM5O3JlIHBhcnQgb2YgdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZSBtYWNoaW5lcnksIHNvIHRoYXQgbWFrZXMgc2Vuc2UuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhleSBldmVuICpkZWZpbmVkKiB3aGVuIFRIUCBpcyAqZGlzYWJsZWQqPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlbiYjMzk7dCBzb21laG93IHBvbGx1dGluZyB0aGUgbmFtZXNwYWNlIHdoZW4gdGhleSBzaG91bGRuJiMzOTt0IGJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYCNpZmRlZmAgY29uZGl0aW9ucyBhcm91bmQgdGhlaXIgZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGJlaGF2aW5nIGFzIGl0IHNob3VsZCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYSBxdWljayBjaGVjayBzaG91bGQgc2V0dGxlIGl0LiBHb3R0YSBiZSBjYXJlZnVsIHdpdGggdGhlc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzMDpcdH1cbjEwMzE6XHRcbjEwMzI6XHRzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuMTAzMzpcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuMTAzNDpcdHtcbjEwMzU6XHRcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XG4xMDM2Olx0XG4xMDM3Olx0XHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyk7XG4xMDM4Olx0fVxuMTAzOTpcdCNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbjEwNDA6XHRcbjEwNDE6XHQjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXG4xMDQyOlx0XG4xMDQzOlx0c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4xMDQ0Olx0XHRcdFx0XHQgIGdmcF90IGdmcClcbjEwNDU6XHR7XG4xMDQ2Olx0fVxuMTA0NzpcdFxuMTA0ODpcdHN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMTA0OTpcdHtcbjEwNTA6XHR9XG4xMDUxOlx0XG4xMDUyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4xMDUzOlx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbjEwNTQ6XHR7XG4xMDU1Olx0XHRyZXR1cm4gMDtcbjEwNTY6XHR9XG4xMDU3Olx0XG4xMDU4Olx0c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4xMDU5Olx0XHRcdFx0XHRcdCAgICAgIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIdWdlcGFnZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGl0JiMzOTtzIGJlY29tZSBjbGVhcjogaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKmRpc2FibGVkKiwgdGhlc2UgZWxlbWVudHMsIHdoYXRldmVyIHRoZXkgYXJlLCBhcmVuJiMzOTt0IGV2ZW4gZGVmaW5lZC4gVGhhdCBtZWFucyB0aGVpciB2ZXJ5IGV4aXN0ZW5jZSBoaW5nZXMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gTm8gYW1iaWd1aXR5IHRoZXJlLiBJdCBkZWZpbml0aXZlbHkgZXN0YWJsaXNoZXMgdGhhdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhIG1hbmRhdG9yeSBwcmVyZXF1aXNpdGUuCgpOb3csIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgQ09ORklHX01FTUNHYCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZXBhZ2UgY29uZmlndXJhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vc2htZW0uY2AgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZztcbiA3NDE6XHRcbiA3NDI6XHRcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XG4gNzQzOlx0XG4gNzQ0Olx0XHRyZXR1cm4gbWVtY2c7XG4gNzQ1Olx0fVxuIDc0NjpcdFxuIDc0NzpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbiA3NDg6XHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuIDc0OTpcdHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIDc1MDpcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4gNzUxOlx0e1xuIDc1MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDc1MzpcdFx0aW50IHJldDtcbiA3NTQ6XHRcbiA3NTU6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gNzU2Olx0XHRpZiAoIW1lbWNnKVxuIDc1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA3NTg6XHRcbiA3NTk6XHRcdHJldCA9IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgZ2ZwKTtcbiA3NjA6XHRcdGlmIChyZXQpIHtcbiA3NjE6XHRcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIDc2MjpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDc2MzpcdFx0fVxuIDc2NDpcdFxuIDc2NTpcdFx0cmV0dXJuIG1lbWNnO1xuIDc2NjpcdH1cbiA3Njc6XHQjZWxzZVxuIDc2ODpcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4gNzY5Olx0c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDg1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBUZXN0aW5nIE1lbWNnLVNwZWNpZmljIFNocmlua2VyIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG5ldyBzaHJpbmtlciBpcyBkZXNpZ25lZCB0byB3b3JrIG9uIGEgcGVyLW1lbWNnIGJhc2lzLiBUaGF0IG1lYW5zIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsIGZvciB0ZXN0aW5nIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgYmVjYXVzZSwgaWYgaXQmIzM5O3MgZGlzYWJsZWQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgcmV0dXJuIE5VTEwgYW5kIHRoZSBjb2RlIHdpbGwgZmFsbCBiYWNrIHRvIGEgZ2xvYmFsIG9wZXJhdGlvbi4gIFdlIHdvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIHZhbGlkYXRlIHRoZSBwZXItbWVtY2cgYmVoYXZpb3IgYXQgYWxsIHdpdGhvdXQgYENPTkZJR19NRU1DR2AgZW5hYmxlZC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlIG5lZWQgYW55dGhpbmcgKmVsc2UqLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDT05GSUdfVE1QRlNgLCBidXQgdGhhdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBDT05GSUdfU0hNRU1gIGlzIHJlcXVpcmVkLiBJIGtub3cgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGRlZmluZWQgaW4gYG1tL3NobWVtLmNgLgoKQWhhISBOb3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgbW0vc2htZW0uY2AgZXZlbiAqY29tcGlsZWQqIGlmIGBDT05GSUdfU0hNRU1gIGlzIGRpc2FibGVkPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG1tL3NobWVtLmNgIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBjcnVjaWFsIGJpdC4gSWYgaXQmIzM5O3Mgbm90IGNvbXBpbGVkIHdpdGhvdXQgYENPTkZJR19TSE1FTWAsIHRoZW4gdGhhdCYjMzk7cyBhbm90aGVyIHByZXJlcXVpc2l0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01My1cdFx0XHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxubW0vTWFrZWZpbGU6NTQ6XHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxubW0vTWFrZWZpbGUtNTUtXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbi0tXG5tbS9NYWtlZmlsZT0xNDY9b2JqLSQoQ09ORklHX0VYRUNNRU0pICYjNDM7PSBleGVjbWVtLm9cbm1tL01ha2VmaWxlOjE0NzpvYmotJChDT05GSUdfVE1QRlNfUVVPVEEpICYjNDM7PSBzaG1lbV9xdW90YS5vXG5tbS9NYWtlZmlsZS0xNDgtb2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgJiM0Mzs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBzaG1lbS5vYCoqCgpPa2F5LCBzbyBgc2htZW0ub2AgaXMgY29uc2lzdGVudGx5IGJlaW5nIGNvbXBpbGVkLCBkZWNsYXJlZCBhcyBgb2JqLXlgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLiBCdXQgaG9sZCBvbiwgc29tZXRoaW5nIHNlZW1zIG9mZi4gRXZlbiB3aGVuIGBDT05GSUdfU0hNRU1gIGlzICpkaXNhYmxlZCosIEkmIzM5O20gc2VlaW5nIGBtbS9zaG1lbS5jYCBzdGlsbCBiZWluZyBjb21waWxlZC4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHdoeS4KClRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgbW0vc2htZW0uY2AuIEkgbmVlZCB0byBzZWFyY2ggdGhpcyBmaWxlIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBDT05GSUdfU0hNRU1gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBzb21lIG90aGVyIG1lY2hhbmlzbSB0byBleHBsYWluIHdoeSB0aGUgc2htZW0gZmlsZSBpcyBiZWluZyBpbmNsdWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9NTg5Nj1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01ODk5LVxubW0vc2htZW0uYzo1OTAwOiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTkwMS1cbi0tXG5tbS9zaG1lbS5jPTU5Njk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU5NzYtXG5tbS9zaG1lbS5jOjU5Nzc6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01OTc4LVxuLS1cbm1tL3NobWVtLmM9NjEzMT1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNjEzMy17XG5tbS9zaG1lbS5jOjYxMzQ6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy02MTM1LVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUTVBGUy9TSE1FTSBTaHJpbmtlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBDT05GSUdfU0hNRU1gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bGwgdG1wZnMgaW1wbGVtZW50YXRpb24g4oCTIGEgdGlueSBzaG1lbSBpbXBsZW1lbnRhdGlvbiBnZXRzIHVzZWQgb3RoZXJ3aXNlLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIGZvY3VzIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBzZWUsIHdlJiMzOTt2ZSBnb3QgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTUNHYCwgYW5kIGBTSE1FTWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gU3l6a2FsbGVyIHdpbGwgbGlrZWx5IGhhbmRsZSBlbmFibGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTYCBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIGdpdmVuIHRoZSBgbW0vS2NvbmZpZ2Agc3RydWN0dXJlLgoKTm93LCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4uLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2dldF9mb2xpb2AsIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgLiBCdXQsIHNpbmNlIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSB1bmNoYW5nZWQsIHRoZSByZWFsIGltcGFjdCBzZWVtcyB0byBiZSBvbiBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAuIEkga25vdyB0aGlzIGlzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgd2FudCB0byBhdm9pZC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIg4oCTIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGUgc2hyaW5rZXIgbG9naWMgYXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGEgdmFsaWQgc3ltYm9sIGluIGBtbS9zaG1lbS5jYC4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBpdCBhbiBpZGVhbCB0YXJnZXQuIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAgaXMgYWxzbyByZWxldmFudC4KCkxvb2tpbmcgZnVydGhlciwgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgaXMgY2FsbGVkIGJ5IHRoZXNlLCBzbyBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgaXMgdGhlIHdheSB0byBnby4KCk5leHQsIEkgbm90ZWQgdGhhdCBgc2htZW1fZXZpY3RfaW5vZGVgIGlzIG1vZGlmaWVkIHRvIGNhbGwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGFuZCBpdCYjMzk7cyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdGhyb3VnaCBgc2htZW1fb3BzLmV2aWN0X2lub2RlYC4gVGhhdCBtYWtlcyBpdCBhbm90aGVyIGV4Y2VsbGVudCBmb2N1cyBmdW5jdGlvbiBhcyBpdCBpcyBub3QgaW5saW5lZC4KCkZpbmFsbHksIGBzaG1lbV9maWxsX3N1cGVyYCBpcyBtb2RpZmllZCB0byBpbml0aWFsaXplIHRoZSBgbGlzdF9scnVgLCBhbmQsIGxpa2UgYHNobWVtX2V2aWN0X2lub2RlYCwgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gSSYjMzk7bGwgYWRkIHRoaXMgdG8gdGhlIGxpc3QuCgpTbywgaGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6CiogICBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAKKiAgIGBzaG1lbV9ldmljdF9pbm9kZWAKKiAgIGBzaG1lbV9maWxsX3N1cGVyYAoKQW5kIHRoZSBjb25maWd1cmF0aW9uczoKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBNRU1DR2AKKiAgIGBTSE1FTWAKCkkmIzM5O3ZlIHZlcmlmaWVkIHRoZSBkZXBlbmRlbmNpZXM6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgbmVlZHMgYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUYCwgd2hpY2ggaXMgZmluZSwgc3l6a2FsbGVyIHdpbGwgZW5hYmxlIHRoYXQgaWYgaXQgY2FuLiBgTUVNQ0dgIGFuZCBgU0hNRU1gIGhhdmUgbm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBpbnRlZ3JhdGluZyBhIHBlci1tZW1jZyBgbGlzdF9scnVgIGludG8gdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIuIEl0IGFmZmVjdHMgc2hyaW5rZXIgZW50cnkgcG9pbnRzLCBpbm9kZSBldmljdGlvbiwgYW5kIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gZnV6eiwgZXNwZWNpYWxseSB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBtYWtlIHN1cmUgc3l6a2FsbGVyIHRhcmdldHMgdGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NTA9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTUtXG5tbS9LY29uZmlnOjg1NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODU3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBUTVBGUyBhbmQgSHVnZSBQYWdlcyBmb3IgT3B0aW1hbCBNZW1vcnkgTWFuYWdlbWVudCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBjb25zY2lvdXMgZGVjaXNpb24gcG9pbnQgaGVyZS4gSXQmIzM5O3MgYSBjaG9pY2U6IGRvIHdlIGxldmVyYWdlIGh1Z2UgcGFnZXMgZm9yIG91ciB0ZW1wb3JhcnkgZmlsZSBzeXN0ZW1zPyBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQganVtcHMgdG8gbWluZCBpcywgKmNhbiogd2UsIGFuZCBpZiBzbywgKmhvdyogZG8gd2UgZG8gaXQ/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGB0bXBmc2AgYW5kIGh1Z2UgcGFnZXMuIFRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQuCgpOb3csIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIG1vc3QgcmVsZXZhbnQgaGVyZT8gRG8gd2UgbmVlZCB0byBmb3JjZSB0aGlzIGJlaGF2aW91ciBhY3Jvc3MgdGhlIGJvYXJkLCBvciBjYW4gd2UgZG8gdGhpcyBtb3JlIHN1cmdpY2FsbHk/IExldCYjMzk7cyBxdWlja2x5IHJlZnJlc2guIERvIHdlIGdvIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU2AgdG8gZ3VhcmFudGVlIHRoYXQgdG1wZnMgZ2V0cyB0byB1c2UgaHVnZSBwYWdlcywgb3IgZG8gd2UgdXNlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNgIHRvIGZvY3VzIG9uIHRoZSBzaGFyZWQgbWVtb3J5IHNpZGUgb2YgdGhpbmdzPyBCb3RoIG9wdGlvbnMgaGF2ZSB0aGVpciBpbXBsaWNhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgd29ya2xvYWQgYW5kIGhvdyBgdG1wZnNgIGlzIHVzZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gTmVlZCB0byBjb25zaWRlciB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5OC1cbm1tL0tjb25maWc6ODk5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxMjIKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgQXBwcm9hY2ggdG8gU3l6a2FsbGVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIFN5emthbGxlciYjMzk7cyBwcm9iYWJseSBnb2luZyB0byBlbmFibGUgdGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgc29vbiwgd2hpY2ggaXMgZmluZSwgYnV0IEkgdGhpbmsgSSYjMzk7bGwganVzdCBnbyBhaGVhZCBhbmQgZXhwbGljaXRseSBzcGVjaWZ5IHdoYXQgSSBuZWVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcm91bmQgb2YgdGVzdGluZy4gSXQmIzM5O2xsIGdpdmUgbWUgbW9yZSBjb250cm9sIGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIHRob3NlIGRlZmF1bHRzLCBldmVuIGlmIGl0IGlzIGEgYml0IG1vcmUgd29yayB1cGZyb250LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBmb2N1cyBvbiBzZXR0aW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGJlY2F1c2UgdGhhdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyBJIGhhdmUgaW4gbWluZC4gSSYjMzk7bGwgYWxzbyBicmluZyBpbiBgTUVNQ0dgIGZvciBpc29sYXRpbmcgdGhlIHJlc291cmNlcyBiZWluZyB1c2VkLCBhbmQgYFNITUVNYCB3aGljaCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O2xsIG5lZWQgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0IGNhc2UuCgpPbmNlIHRob3NlIGFyZSBzZXQgdXAsIEkmIzM5O2xsIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGRvIHdoYXQgSSBleHBlY3QgYW5kIGdldCB0aGUgcmVzdWx0cyB0cmFja2luZyBpbiB0aGUgd2F5IHRoYXQgSSB0aGluayBpcyBiZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2NvdW50JiMzNDssCiAgICAmIzM0O3NobWVtX2V2aWN0X2lub2RlJiMzNDssCiAgICAmIzM0O3NobWVtX2ZpbGxfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIgdG8gdXNlIGEgcGVyLW1lbWNnIGxpc3RfbHJ1IGluc3RlYWQgb2YgYSBnbG9iYWwgbGlzdC4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHNocmlua2VyIGVudHJ5IHBvaW50cyAoc2htZW1fdW51c2VkX2h1Z2Vfc2Nhbiwgc2htZW1fdW51c2VkX2h1Z2VfY291bnQpLCBpbm9kZSBldmljdGlvbiAoc2htZW1fZXZpY3RfaW5vZGUpLCBhbmQgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiAoc2htZW1fZmlsbF9zdXBlcikuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgd2hlbiB0bXBmcyBpcyB1c2VkIHdpdGggdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhbmQgbWVtb3J5IGNncm91cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2NhbiYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzaG1lbV9ldmljdF9pbm9kZSYjMzQ7LAogICAgJiMzNDtzaG1lbV9maWxsX3N1cGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0bXBmcy9zaG1lbSB1bnVzZWQgaHVnZSBwYWdlIHNocmlua2VyIHRvIHVzZSBhIHBlci1tZW1jZyBsaXN0X2xydSBpbnN0ZWFkIG9mIGEgZ2xvYmFsIGxpc3QuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzaHJpbmtlciBlbnRyeSBwb2ludHMgKHNobWVtX3VudXNlZF9odWdlX3NjYW4sIHNobWVtX3VudXNlZF9odWdlX2NvdW50KSwgaW5vZGUgZXZpY3Rpb24gKHNobWVtX2V2aWN0X2lub2RlKSwgYW5kIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24gKHNobWVtX2ZpbGxfc3VwZXIpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHdoZW4gdG1wZnMgaXMgdXNlZCB3aXRoIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYW5kIG1lbW9yeSBjZ3JvdXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTQuNzE1ODYwMTU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1OTE0MDYyNTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fZXZpY3RfaW5vZGVcIixcbiAgICBcInNobWVtX2ZpbGxfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTQuNzE1ODY4Njk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjc1OTM2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMjk5ZTViZWY0NmU5YjA3YjAyOTJmY2FjNGUwZDgyOTgwNDgxY2I3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTc6NTg6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCA1ZmVlY2Y1ZDkwMzhkLi4zNmIyNDlmMDAyYTlhIDEwMDY0NFxcbi0tLSBhL2ZzL3N1cGVyLmNcXG4rKysgYi9mcy9zdXBlci5jXFxuQEAgLTE3MSwxOSArMTcxLDYgQEAgc3RhdGljIHZvaWQgc3VwZXJfd2FrZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZylcXG4gXFx0d2FrZV91cF92YXIoXFx1MDAyNnNiLVxcdTAwM2VzX2ZsYWdzKTtcXG4gfVxcbiBcXG4tLypcXG4tICogVGhlIHNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpXFxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cXHUwMDNlbWVtY2cuIERyaXZpbmcgdGhlbVxcbi0gKiBmcm9tIHBlci1tZW1jZyBzaHJpbmtfc2xhYl9tZW1jZygpIGludm9jYXRpb25zIG9ubHkgYnVybnMgQ1BVIHdhbGtpbmdcXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXFxuLSAqIHRoZSBnbG9iYWwgcGF0aCAoa3N3YXBkIG9yIHJvb3QgZGlyZWN0IHJlY2xhaW0pIHJlZ2FyZGxlc3MuIFJlc3RyaWN0IHRoZW1cXG4tICogdG8gdGhhdCBwYXRoLlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSBib29sIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4te1xcbi1cXHRyZXR1cm4gIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKTtcXG4tfVxcbi1cXG4gLypcXG4gICogT25lIHRoaW5nIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBvZiB3aXRoIGEgcGVyLXNiIHNocmlua2VyIGlzIHRoYXQgd2UgZG9uJ3RcXG4gICogZHJvcCB0aGUgbGFzdCBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoZSBzdXBlcmJsb2NrIGZyb20gd2l0aGluIHRoZSBzaHJpbmtlci5cXG5AQCAtMjEzLDcgKzIwMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuIFxcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxcbiBcXHRcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuIFxcbi1cXHRpZiAoc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFxcdTAwMjZcXHUwMDI2IHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxcbitcXHRpZiAoc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxcbiBcXHRcXHRmc19vYmplY3RzID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XFxuIFxcbiBcXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xydSwgc2MpO1xcbkBAIC0yNzQsOCArMjYxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRzbXBfcm1iKCk7XFxuIFxcbi1cXHRpZiAoc2ItXFx1MDAzZXNfb3AgXFx1MDAyNlxcdTAwMjYgc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcXG4rXFx0aWYgKHNiLVxcdTAwM2VzX29wIFxcdTAwMjZcXHUwMDI2IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcXG4gXFx0XFx0dG90YWxfb2JqZWN0cyA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xcbiBcXG4gXFx0dG90YWxfb2JqZWN0cyArPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXFx1MDAyNnNiLVxcdTAwM2VzX2RlbnRyeV9scnUsIHNjKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXFxuaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiBcXG4gLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi9cXG4gXFxuQEAgLTU0LDYgKzU1LDExIEBAIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvIHtcXG4gXFx0c3RydWN0IGRxdW90IF9fcmN1XFx0KmlfZHF1b3RbTUFYUVVPVEFTXTtcXG4gI2VuZGlmXFxuIFxcdHN0cnVjdCBpbm9kZVxcdFxcdHZmc19pbm9kZTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHQqc2hyaW5rbGlzdF9tZW1jZztcXG4rXFx0aW50XFx0XFx0XFx0c2hyaW5rbGlzdF9uaWQ7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gI2RlZmluZSBTSE1FTV9GTF9VU0VSX1ZJU0lCTEVcXHRcXHQoRlNfRkxfVVNFUl9WSVNJQkxFIHwgRlNfQ0FTRUZPTERfRkwpXFxuQEAgLTgzLDkgKzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8ge1xcbiBcXHRpbm9fdCBuZXh0X2lubztcXHRcXHQgICAgLyogVGhlIG5leHQgcGVyLXNiIGlub2RlIG51bWJlciB0byB1c2UgKi9cXG4gXFx0aW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xcbiBcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sOyAgICAgLyogZGVmYXVsdCBtZW1vcnkgcG9saWN5IGZvciBtYXBwaW5ncyAqL1xcbi1cXHRzcGlubG9ja190IHNocmlua2xpc3RfbG9jazsgICAvKiBQcm90ZWN0cyBzaHJpbmtsaXN0ICovXFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIHNocmlua2xpc3RfbGVuOyAvKiBMZW5ndGggb2Ygc2hyaW5rbGlzdCAqL1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHN0cnVjdCBsaXN0X2xydSBzaHJpbmtsaXN0OyAvKiBMaXN0IG9mIHNocmlua2FibGUgaW5vZGVzICovXFxuKyNlbmRpZlxcbiBcXHRzdHJ1Y3Qgc2htZW1fcXVvdGFfbGltaXRzIHFsaW1pdHM7IC8qIERlZmF1bHQgcXVvdGEgbGltaXRzICovXFxuIFxcdHN0cnVjdCBzaW1wbGVfeGF0dHJfY2FjaGUgeGFfY2FjaGU7XFxuIH07XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNzRkYzNkOTAwMDY3YS4uNzA0MzUzODUyYWUyNiAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC03MjQsNTEgKzcyNCwyMzcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnNobWVtX2Zvcm1hdF9odWdlKGludCBodWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuLVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXFxuIHtcXG4tXFx0TElTVF9IRUFEKGxpc3QpLCAqcG9zLCAqbmV4dDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFxuK1xcdHJldHVybiBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCA9PSAtMTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxcbit7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWVtY2c7XFxuK31cXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4rc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgZ2ZwKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBtZW1jZztcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XFxuK1xcbitcXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xcbitcXHRpZiAoSVNfRVJSKG1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbitcXHRcXHQvKiBpc29sYXRlZCBvbiBzY2FuIGxpc3QsIGxldCBzaHJpbmsgaGFuZGxlIGl0ICovXFxuK1xcdFxcdGlmIChpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKSlcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gbmlkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID09IG1lbWNnKVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdFxcdGxpc3RfbHJ1X2RlbChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCxcXG4rXFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyk7XFxuK1xcdFxcdG9sZF9tZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XFxuK1xcdH1cXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBtZW1jZztcXG4rXFx0aW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSBuaWQ7XFxuK1xcdGxpc3RfbHJ1X2FkZChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgbmlkLCBtZW1jZyk7XFxuK1xcdG1lbWNnID0gTlVMTDtcXG4rdW5sb2NrOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG9sZF9tZW1jZyk7XFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4rXFx0XFx0bGlzdF9scnVfZGVsKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LFxcbitcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnKTtcXG4rXFx0XFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rfVxcbitcXG4rc3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4ge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2M7XFxuK307XFxuK1xcbitzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiAqc2NhbiA9IGFyZztcXG4gXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmF0Y2ggPSBzYyA/IHNjLVxcdTAwM2Vucl90b19zY2FuIDogMTI4O1xcbi1cXHR1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbiBcXG4tXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpXFxuLVxcdFxcdHJldHVybiBTSFJJTktfU1RPUDtcXG4rXFx0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpIHtcXG4tXFx0XFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB0cnlsb2NrIHRvIGF2b2lkIEFCQkEgZGVhZGxvY2s6IGFkZC9kZWwgcGF0aCB0YWtlcyBpbmZvLVxcdTAwM2Vsb2NrXFxuK1xcdCAqIGJlZm9yZSB0aGUgbGlzdF9scnUgYnVja2V0IGxvY2ssIHdoaWxlIGhlcmUgdGhlIG9yZGVyIGlzIHJldmVyc2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFzcGluX3RyeWxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spKVxcbitcXHRcXHRyZXR1cm4gTFJVX1NLSVA7XFxuIFxcbi1cXHRcXHQvKiBwaW4gdGhlIGlub2RlICovXFxuLVxcdFxcdGlub2RlID0gaWdyYWIoXFx1MDAyNmluZm8tXFx1MDAzZXZmc19pbm9kZSk7XFxuK1xcdC8qIHBpbiB0aGUgaW5vZGUgKi9cXG4rXFx0aW5vZGUgPSBpZ3JhYihcXHUwMDI2aW5mby1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xcbitcXHRpZiAoIWlub2RlKSB7XFxuK1xcdFxcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcXG4rXFx0XFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFx0XFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbitcXHR9XFxuIFxcbi1cXHRcXHQvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovXFxuLVxcdFxcdGlmICghaW5vZGUpIHtcXG4tXFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdFxcdGdvdG8gbmV4dDtcXG4tXFx0XFx0fVxcbitcXHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XFxuK1xcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcXG4rXFx0c2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKGluZm8pO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2c2Nhbi1cXHUwMDNlbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXG4tXFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2bGlzdCk7XFxuLW5leHQ6XFxuLVxcdFxcdHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcXG4tXFx0XFx0aWYgKCEtLWJhdGNoKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbitcXHRib29sIG1hdGNoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdFxcbitcXHQgKiBzYy1cXHUwMDNlbWVtY2cuIFNraXAgdGhlIGZvbGlvIG1lbWNnIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOlxcbitcXHQgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKVxcbitcXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxcbitcXHQgKiAzLiByb290IG1lbWNnIHJlY2xhaW1cXG4rXFx0ICovXFxuK1xcdGlmICghc2MgfHwgIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy1cXHUwMDNlbmlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbitcXHRtYXRjaCA9IG1lbWNnID09IHNjLVxcdTAwM2VtZW1jZztcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuIG1hdGNoO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbitcXG4rXFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XFxuK1xcdGlmIChJU19FUlIobWVtY2cpKSB7XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFxcdTAwMjZsaXN0KSB7XFxuLVxcdFxcdHBnb2ZmX3QgbmV4dCwgZW5kO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHQvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovXFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRsaXN0X2xydV9hZGQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbitcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3BsaXQgPSAwLCBmcmVlZCA9IDA7XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2Nhbi5saXN0KTtcXG4rXFx0c2Nhbi5zYyA9IHNjO1xcbitcXHRpZiAoc2MpXFxuK1xcdFxcdGxpc3RfbHJ1X3Nocmlua193YWxrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjLFxcbitcXHRcXHRcXHRcXHQgICAgIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsIFxcdTAwMjZzY2FuKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsaXN0X2xydV93YWxrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZzY2FuLCAxMjgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXFx1MDAyNnNjYW4ubGlzdCkge1xcbitcXHRcXHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xcbiBcXHRcXHRsb2ZmX3QgaV9zaXplO1xcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XFxuIFxcdFxcdGlub2RlID0gXFx1MDAyNmluZm8tXFx1MDAzZXZmc19pbm9kZTtcXG4gXFxuLVxcdFxcdGlmIChucl90b19mcmVlIFxcdTAwMjZcXHUwMDI2IGZyZWVkIFxcdTAwM2U9IG5yX3RvX2ZyZWUpXFxuLVxcdFxcdFxcdGdvdG8gbW92ZV9iYWNrO1xcbi1cXG4gXFx0XFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiBcXHRcXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGlfc2l6ZSAvIFBBR0VfU0laRSk7XFxuIFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKVxcbkBAIC03ODEsMTMgKzk2NywxOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqL1xcbi1cXHRcXHRuZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xcbiBcXHRcXHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xcbi1cXHRcXHRpZiAoZW5kIFxcdTAwM2M9IGZvbGlvLVxcdTAwM2VpbmRleCB8fCBlbmQgXFx1MDAzZT0gbmV4dCkge1xcbitcXHRcXHRpZiAoZW5kIFxcdTAwM2M9IGZvbGlvLVxcdTAwM2VpbmRleCB8fCBlbmQgXFx1MDAzZT0gZm9saW9fZW5kKSB7XFxuIFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpXFxuK1xcdFxcdFxcdGdvdG8gbW92ZV9iYWNrO1xcbitcXG4rXFx0XFx0aWYgKG5yX3RvX2ZyZWUgXFx1MDAyNlxcdTAwMjYgZnJlZWQgXFx1MDAzZT0gbnJfdG9fZnJlZSlcXG4rXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBNb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgaWYgd2UgZmFpbGVkXFxuIFxcdFxcdCAqIHRvIGxvY2sgdGhlIHBhZ2UgYXQgdGhpcyB0aW1lLlxcbkBAIC03OTUsMzUgKzk4NywzMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcXG4gXFx0XFx0ICogV2FpdGluZyBmb3IgdGhlIGxvY2sgbWF5IGxlYWQgdG8gZGVhZGxvY2sgaW4gdGhlXFxuIFxcdFxcdCAqIHJlY2xhaW0gcGF0aC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4rXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuK1xcbitcXHRcXHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xcbitcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRcXHRnb3RvIG1vdmVfYmFjaztcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXG4gXFx0XFx0LyogSWYgc3BsaXQgZmFpbGVkIG1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCAqL1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG1vdmVfYmFjaztcXG4gXFxuLVxcdFxcdGZyZWVkICs9IG5leHQgLSBlbmQ7XFxuK1xcdFxcdGZyZWVkICs9IGZvbGlvX2VuZCAtIGVuZDtcXG4gXFx0XFx0c3BsaXQrKztcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gZHJvcDpcXG4tXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xcbiBcXHRcXHRnb3RvIHB1dDtcXG4gbW92ZV9iYWNrOlxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIGVpdGhlciBvbiB0aGUgZ2xvYmFsIGxpc3Qgb3IgZGVsZXRlZFxcbi1cXHRcXHQgKiBmcm9tIGFueSBsb2NhbCBsaXN0IGJlZm9yZSBpcHV0KCkgc2luY2UgaXQgY291bGQgYmUgZGVsZXRlZFxcbi1cXHRcXHQgKiBpbiBhbm90aGVyIHRocmVhZCBvbmNlIHdlIHB1dCB0aGUgaW5vZGUgKHRoZW4gdGhlIGxvY2FsIGxpc3RcXG4tXFx0XFx0ICogaXMgY29ycnVwdGVkKS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xcbi1cXHRcXHRsaXN0X21vdmUoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi1cXHRcXHRzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuKys7XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gcHV0OlxcbiBcXHRcXHRpcHV0KGlub2RlKTtcXG4gXFx0fVxcbkBAIC04MzYsNyArMTAyMyw3IEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xcbiBcXG4tXFx0aWYgKCFSRUFEX09OQ0Uoc2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbikpXFxuK1xcdGlmICghbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjKSlcXG4gXFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbiBcXG4gXFx0cmV0dXJuIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzYmluZm8sIHNjLCAwKTtcXG5AQCAtODQ3LDIxICsxMDM0LDIxIEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIHtcXG4gXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxcbi1cXHQgKiBob25vdXIgc2MtXFx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXFxuLVxcdCAqIHJvb3QgZGlyZWN0IHJlY2xhaW0pIHNocmluayBwYXRoLiBTa2lwIHRoZSBwZXItbWVtY2cgaXRlcmF0aW9ucyBvZlxcbi1cXHQgKiBzaHJpbmtfc2xhYl9tZW1jZygpIHRvIGF2b2lkIHF1ZXVlaW5nIGR1cGxpY2F0ZSBnbG9iYWwgd29yay5cXG4tXFx0ICovXFxuLVxcdGlmICghbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzYykpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIFJFQURfT05DRShzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuKTtcXG4rXFx0cmV0dXJuIGxpc3RfbHJ1X3Nocmlua19jb3VudChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYyk7XFxuIH1cXG4gI2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4gI2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWVxcbiBcXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuIHtcXG5AQCAtMTQxNywxNCArMTYwNCw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSAwO1xcbiBcXHRcXHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXHRcXHRzaG1lbV90cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7XFxuLVxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4tXFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdFxcdFxcdHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2RlbChpbm9kZSk7XFxuIFxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc3dhcGxpc3QpKSB7XFxuIFxcdFxcdFxcdC8qIFdhaXQgd2hpbGUgc2htZW1fdW51c2UoKSBpcyBzY2FubmluZyB0aGlzIGlub2RlLi4uICovXFxuIFxcdFxcdFxcdHdhaXRfdmFyX2V2ZW50KFxcdTAwMjZpbmZvLVxcdTAwM2VzdG9wX2V2aWN0aW9uLFxcbkBAIC0yNTM1LDI3ICsyNzE1LDYgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIFxcbiBhbGxvY2VkOlxcbiBcXHRhbGxvY2VkID0gdHJ1ZTtcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpIFxcdTAwM2NcXG4tXFx0XFx0XFx0XFx0XFx0Zm9saW9fbmV4dF9pbmRleChmb2xpbykpIHtcXG4tXFx0XFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxcbi1cXHRcXHQgKiB0byBzaHJpbmsgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xcbi1cXHRcXHQgKiAtXFx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobGlzdF9lbXB0eV9jYXJlZnVsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbi1cXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LFxcbi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KTtcXG4tXFx0XFx0XFx0c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbisrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdH1cXG4gXFxuIFxcdGlmIChzZ3AgPT0gU0dQX1dSSVRFKVxcbiBcXHRcXHRmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XFxuQEAgLTI1ODUsNiArMjc0NCwyMCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogUXVldWUgdGhlIGlub2RlIG9uIHRoZSBzaHJpbmsgbGlzdCBvbmx5IGFmdGVyIGFsbCBjaGVja3MgdGhhdCBtaWdodFxcbitcXHQgKiByZW1vdmUgdGhlIGZvbGlvIGhhdmUgcGFzc2VkLiBPdGhlcndpc2UgdGhlIGlub2RlIGNvdWxkIGJlIGxlZnQgb25cXG4rXFx0ICogdGhlIHNocmlua2VyIGxpc3Qgd2l0aCBhIHN0YWxlIGZvbGlvLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFsbG9jZWQgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXFx1MDAzYyBmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XFxuK1xcdFxcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApO1xcbitcXHR9XFxuIG91dDpcXG4gXFx0KmZvbGlvcCA9IGZvbGlvO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzA2MSw2ICszMjM0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlZnNmbGFncylcXG4gXFx0XFx0c2htZW1fc2V0X2lub2RlX2ZsYWdzKGlub2RlLCBpbmZvLVxcdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xcbisjZW5kaWZcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXN3YXBsaXN0KTtcXG4gXFx0Y2FjaGVfbm9fYWNsKGlub2RlKTtcXG4gXFx0aWYgKHNiaW5mby1cXHUwMDNlbm9zd2FwKVxcbkBAIC00OTI3LDYgKzUxMDQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gI2VuZGlmXFxuIFxcdGZyZWVfcGVyY3B1KHNiaW5mby1cXHUwMDNlaW5vX2JhdGNoKTtcXG4gXFx0cGVyY3B1X2NvdW50ZXJfZGVzdHJveShcXHUwMDI2c2JpbmZvLVxcdTAwM2V1c2VkX2Jsb2Nrcyk7XFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KTtcXG4rI2VuZGlmXFxuIFxcdG1wb2xfcHV0KHNiaW5mby1cXHUwMDNlbXBvbCk7XFxuICNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG4gXFx0c2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoXFx1MDAyNnNiaW5mby1cXHUwMDNleGFfY2FjaGUpO1xcbkBAIC01MDIwLDggKzUyMDAsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZzYmluZm8tXFx1MDAzZXN0YXRfbG9jayk7XFxuIFxcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFxcdTAwMjZzYmluZm8tXFx1MDAzZXVzZWRfYmxvY2tzLCAwLCBHRlBfS0VSTkVMKSlcXG4gXFx0XFx0Z290byBmYWlsZWQ7XFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYi1cXHUwMDNlc19zaHJpbmspKVxcbitcXHRcXHRnb3RvIGZhaWxlZDtcXG4rI2VuZGlmXFxuIFxcbiBcXHRzYi1cXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuIFxcdHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSA9IFBBR0VfU0laRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTUuMDQ0NjE3OTkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzY1NTg1MjkzNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fZXZpY3RfaW5vZGVcIixcbiAgICBcInNobWVtX2ZpbGxfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjI5OWU1YmVmNDZlOWIwN2IwMjkyZmNhYzRlMGQ4Mjk4MDQ4MWNiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6NTg6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uMzZiMjQ5ZjAwMmE5YSAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xNzEsMTkgKzE3MSw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX2ZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBUaGUgc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cdTAwM2VtZW1jZy4gRHJpdmluZyB0aGVtXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXG4tICogdGhlIGdsb2JhbCBwYXRoIChrc3dhcGQgb3Igcm9vdCBkaXJlY3QgcmVjbGFpbSkgcmVnYXJkbGVzcy4gUmVzdHJpY3QgdGhlbVxuLSAqIHRvIHRoYXQgcGF0aC5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbi19XG4tXG4gLypcbiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24ndFxuICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuXG5AQCAtMjEzLDcgKzIwMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRpZiAoIXN1cGVyX3RyeWxvY2tfc2hhcmVkKHNiKSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuLVx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMgXHUwMDI2XHUwMDI2IHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuK1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXG4gXHRcdGZzX29iamVjdHMgPSBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XG4gXG4gXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcbkBAIC0yNzQsOCArMjYxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4gXHRcdHJldHVybiAwO1xuIFx0c21wX3JtYigpO1xuIFxuLVx0aWYgKHNiLVx1MDAzZXNfb3AgXHUwMDI2XHUwMDI2IHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMgXHUwMDI2XHUwMDI2XG4tXHQgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4rXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcbiBcdFx0dG90YWxfb2JqZWN0cyA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoc2IsIHNjKTtcbiBcbiBcdHRvdGFsX29iamVjdHMgKz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSwgc2MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZS4uYWViNTk5MDFhODQwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdF9scnUuaFx1MDAzZVxuIFxuIC8qIGlub2RlIGluLWtlcm5lbCBkYXRhICovXG4gXG5AQCAtNTQsNiArNTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8ge1xuIFx0c3RydWN0IGRxdW90IF9fcmN1XHQqaV9kcXVvdFtNQVhRVU9UQVNdO1xuICNlbmRpZlxuIFx0c3RydWN0IGlub2RlXHRcdHZmc19pbm9kZTtcbitcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzdHJ1Y3QgbWVtX2Nncm91cFx0KnNocmlua2xpc3RfbWVtY2c7XG4rXHRpbnRcdFx0XHRzaHJpbmtsaXN0X25pZDtcbisjZW5kaWZcbiB9O1xuIFxuICNkZWZpbmUgU0hNRU1fRkxfVVNFUl9WSVNJQkxFXHRcdChGU19GTF9VU0VSX1ZJU0lCTEUgfCBGU19DQVNFRk9MRF9GTClcbkBAIC04Myw5ICs4OSw5IEBAIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHtcbiBcdGlub190IG5leHRfaW5vO1x0XHQgICAgLyogVGhlIG5leHQgcGVyLXNiIGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdGlub190IF9fcGVyY3B1ICppbm9fYmF0Y2g7ICAvKiBUaGUgbmV4dCBwZXItY3B1IGlub2RlIG51bWJlciB0byB1c2UgKi9cbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXG4tXHRzcGlubG9ja190IHNocmlua2xpc3RfbG9jazsgICAvKiBQcm90ZWN0cyBzaHJpbmtsaXN0ICovXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua2xpc3Q7ICAvKiBMaXN0IG9mIHNoaW5rYWJsZSBpbm9kZXMgKi9cbi1cdHVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0c3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3Q7IC8qIExpc3Qgb2Ygc2hyaW5rYWJsZSBpbm9kZXMgKi9cbisjZW5kaWZcbiBcdHN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi9cbiBcdHN0cnVjdCBzaW1wbGVfeGF0dHJfY2FjaGUgeGFfY2FjaGU7XG4gfTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNzRkYzNkOTAwMDY3YS4uNzA0MzUzODUyYWUyNiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC03MjQsNTEgKzcyNCwyMzcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnNobWVtX2Zvcm1hdF9odWdlKGludCBodWdlKVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbi1cdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuK3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxuIHtcbi1cdExJU1RfSEVBRChsaXN0KSwgKnBvcywgKm5leHQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1xuK1x0cmV0dXJuIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2c7XG4rXG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuK31cbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbitzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGludCByZXQ7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIGdmcCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbitcbitcdHJldHVybiBtZW1jZztcbit9XG4rI2Vsc2VcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdCAgICBnZnBfdCBnZnApXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICBnZnBfdCBnZnApXG4re1xuK1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbitcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xuK1x0aWYgKElTX0VSUihtZW1jZykpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0LyogaXNvbGF0ZWQgb24gc2NhbiBsaXN0LCBsZXQgc2hyaW5rIGhhbmRsZSBpdCAqL1xuK1x0XHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuK1x0fVxuK1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuK1x0bGlzdF9scnVfYWRkKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xuK1x0bWVtY2cgPSBOVUxMO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rXHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRtZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjO1xuK307XG4rXG4rc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbitcdFx0XHRcdFx0XHQgdm9pZCAqYXJnKVxuK3tcbitcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0dW5zaWduZWQgbG9uZyBiYXRjaCA9IHNjID8gc2MtXHUwMDNlbnJfdG9fc2NhbiA6IDEyODtcbi1cdHVuc2lnbmVkIGxvbmcgc3BsaXQgPSAwLCBmcmVlZCA9IDA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiBcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KSlcbi1cdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuK1x0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpIHtcbi1cdFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4rXHQvKlxuK1x0ICogVXNlIHRyeWxvY2sgdG8gYXZvaWQgQUJCQSBkZWFkbG9jazogYWRkL2RlbCBwYXRoIHRha2VzIGluZm8tXHUwMDNlbG9ja1xuK1x0ICogYmVmb3JlIHRoZSBsaXN0X2xydSBidWNrZXQgbG9jaywgd2hpbGUgaGVyZSB0aGUgb3JkZXIgaXMgcmV2ZXJzZWQuXG4rXHQgKi9cbitcdGlmICghc3Bpbl90cnlsb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jaykpXG4rXHRcdHJldHVybiBMUlVfU0tJUDtcbiBcbi1cdFx0LyogcGluIHRoZSBpbm9kZSAqL1xuLVx0XHRpbm9kZSA9IGlncmFiKFx1MDAyNmluZm8tXHUwMDNldmZzX2lub2RlKTtcbitcdC8qIHBpbiB0aGUgaW5vZGUgKi9cbitcdGlub2RlID0gaWdyYWIoXHUwMDI2aW5mby1cdTAwM2V2ZnNfaW5vZGUpO1xuK1x0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xuK1x0aWYgKCFpbm9kZSkge1xuK1x0XHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4rXHRcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1x0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4rXHR9XG4gXG4tXHRcdC8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi9cbi1cdFx0aWYgKCFpbm9kZSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRnb3RvIG5leHQ7XG4tXHRcdH1cbitcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbitcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZzY2FuLVx1MDAzZWxpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2bGlzdCk7XG4tbmV4dDpcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuLS07XG4tXHRcdGlmICghLS1iYXRjaClcbi1cdFx0XHRicmVhaztcbitcdHJldHVybiBMUlVfUkVNT1ZFRDtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4rXHRib29sIG1hdGNoO1xuK1xuK1x0LypcbitcdCAqIE9ubHkgbm9uLXJvb3QgbWVtY2cgcmVjbGFpbSBuZWVkcyB0byBtYXRjaCB0aGUgZm9saW8gY2hhcmdlIGFnYWluc3RcbitcdCAqIHNjLVx1MDAzZW1lbWNnLiBTa2lwIHRoZSBmb2xpbyBtZW1jZyBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbitcdCAqIDEuIHNobWVtIHF1b3RhIHJlY2xhaW0gKHNjID09IE5VTEwpXG4rXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxuK1x0ICogMy4gcm9vdCBtZW1jZyByZWNsYWltXG4rXHQgKi9cbitcdGlmICghc2MgfHwgIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGZvbGlvX25pZChmb2xpbykgIT0gc2MtXHUwMDNlbmlkKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0bWF0Y2ggPSBtZW1jZyA9PSBzYy1cdTAwM2VtZW1jZztcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBHRlBfTk9XQUlUKTtcbitcdGlmIChJU19FUlIobWVtY2cpKSB7XG4rXHRcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNmxpc3QpIHtcbi1cdFx0cGdvZmZfdCBuZXh0LCBlbmQ7XG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdC8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi9cbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbitcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnO1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IG5pZDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuK1x0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4re1xuK1x0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBzcGxpdCA9IDAsIGZyZWVkID0gMDtcbitcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjYW4ubGlzdCk7XG4rXHRzY2FuLnNjID0gc2M7XG4rXHRpZiAoc2MpXG4rXHRcdGxpc3RfbHJ1X3Nocmlua193YWxrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyxcbitcdFx0XHRcdCAgICAgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSwgXHUwMDI2c2Nhbik7XG4rXHRlbHNlXG4rXHRcdGxpc3RfbHJ1X3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUsXG4rXHRcdFx0ICAgICAgXHUwMDI2c2NhbiwgMTI4KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNnNjYW4ubGlzdCkge1xuK1x0XHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xuIFx0XHRsb2ZmX3QgaV9zaXplO1xuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiBcdFx0aW5vZGUgPSBcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZTtcbiBcbi1cdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbi1cbiBcdFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFx0XHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXG5AQCAtNzgxLDEzICs5NjcsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdH1cbiBcbiBcdFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqL1xuLVx0XHRuZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4rXHRcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuIFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xuLVx0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gbmV4dCkge1xuK1x0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gZm9saW9fZW5kKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbitcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpXG4rXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4rXG4rXHRcdGlmIChucl90b19mcmVlIFx1MDAyNlx1MDAyNiBmcmVlZCBcdTAwM2U9IG5yX3RvX2ZyZWUpXG4rXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIE1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCBpZiB3ZSBmYWlsZWRcbiBcdFx0ICogdG8gbG9jayB0aGUgcGFnZSBhdCB0aGlzIHRpbWUuXG5AQCAtNzk1LDM1ICs5ODcsMzAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdCAqIFdhaXRpbmcgZm9yIHRoZSBsb2NrIG1heSBsZWFkIHRvIGRlYWRsb2NrIGluIHRoZVxuIFx0XHQgKiByZWNsYWltIHBhdGguXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbitcdFx0XHRnb3RvIG1vdmVfYmFjaztcbitcbitcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbitcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRcdGdvdG8gbW92ZV9iYWNrO1xuIFx0XHR9XG4gXG4gXHRcdHJldCA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcbiBcdFx0LyogSWYgc3BsaXQgZmFpbGVkIG1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCAqL1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gbW92ZV9iYWNrO1xuIFxuLVx0XHRmcmVlZCArPSBuZXh0IC0gZW5kO1xuK1x0XHRmcmVlZCArPSBmb2xpb19lbmQgLSBlbmQ7XG4gXHRcdHNwbGl0Kys7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gZHJvcDpcbi1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiBcdFx0Z290byBwdXQ7XG4gbW92ZV9iYWNrOlxuLVx0XHQvKlxuLVx0XHQgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIGVpdGhlciBvbiB0aGUgZ2xvYmFsIGxpc3Qgb3IgZGVsZXRlZFxuLVx0XHQgKiBmcm9tIGFueSBsb2NhbCBsaXN0IGJlZm9yZSBpcHV0KCkgc2luY2UgaXQgY291bGQgYmUgZGVsZXRlZFxuLVx0XHQgKiBpbiBhbm90aGVyIHRocmVhZCBvbmNlIHdlIHB1dCB0aGUgaW5vZGUgKHRoZW4gdGhlIGxvY2FsIGxpc3Rcbi1cdFx0ICogaXMgY29ycnVwdGVkKS5cbi1cdFx0ICovXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4rKztcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4rXHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICsxMDIzLDcgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIHtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XG4gXG4tXHRpZiAoIVJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pKVxuK1x0aWYgKCFsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjKSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuIFx0cmV0dXJuIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzYmluZm8sIHNjLCAwKTtcbkBAIC04NDcsMjEgKzEwMzQsMjEgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0Lypcbi1cdCAqIFRoZSBwZXItc3VwZXJibG9jayBzaHJpbmtsaXN0IGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxuLVx0ICogaG9ub3VyIHNjLVx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXG4tXHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2Zcbi1cdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxuLVx0ICovXG4tXHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKTtcbitcdHJldHVybiBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuICNkZWZpbmUgc2htZW1faHVnZSBTSE1FTV9IVUdFX0RFTllcbiBcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuK3tcbit9XG4rXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuIHtcbkBAIC0xNDE3LDE0ICsxNjA0LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0bWFwcGluZ19zZXRfZXhpdGluZyhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFx0XHRzaG1lbV90cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7XG4tXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4tXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4tXHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdFx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdH1cbitcdFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpKSB7XG4gXHRcdFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cbiBcdFx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZpbmZvLVx1MDAzZXN0b3BfZXZpY3Rpb24sXG5AQCAtMjUzNSwyNyArMjcxNSw2IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIGFsbG9jZWQ6XG4gXHRhbGxvY2VkID0gdHJ1ZTtcbi1cdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpIFx1MDAzY1xuLVx0XHRcdFx0XHRmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xuLVx0XHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4tXHRcdC8qXG4tXHRcdCAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3Rcbi1cdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbi1cdFx0ICovXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0Lypcbi1cdFx0ICogX2NhcmVmdWwgdG8gZGVmZW5kIGFnYWluc3QgdW5sb2NrZWQgYWNjZXNzIHRvXG4tXHRcdCAqIC1cdTAwM2VzaHJpbmtfbGlzdCBpbiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoKVxuLVx0XHQgKi9cbi1cdFx0aWYgKGxpc3RfZW1wdHlfY2FyZWZ1bChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4tXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKys7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHR9XG4gXG4gXHRpZiAoc2dwID09IFNHUF9XUklURSlcbiBcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xuQEAgLTI1ODUsNiArMjc0NCwyMCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBRdWV1ZSB0aGUgaW5vZGUgb24gdGhlIHNocmluayBsaXN0IG9ubHkgYWZ0ZXIgYWxsIGNoZWNrcyB0aGF0IG1pZ2h0XG4rXHQgKiByZW1vdmUgdGhlIGZvbGlvIGhhdmUgcGFzc2VkLiBPdGhlcndpc2UgdGhlIGlub2RlIGNvdWxkIGJlIGxlZnQgb25cbitcdCAqIHRoZSBzaHJpbmtlciBsaXN0IHdpdGggYSBzdGFsZSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGFsbG9jZWQgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3RcbitcdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbitcdFx0ICovXG4rXHRcdHNobWVtX3VudXNlZF9odWdlX2FkZChpbm9kZSwgZm9saW8sIGdmcCk7XG4rXHR9XG4gb3V0OlxuIFx0KmZvbGlvcCA9IGZvbGlvO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzA2MSw2ICszMjM0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGluZm8tXHUwMDNlZnNmbGFncylcbiBcdFx0c2htZW1fc2V0X2lub2RlX2ZsYWdzKGlub2RlLCBpbmZvLVx1MDAzZWZzZmxhZ3MsIE5VTEwpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xuKyNlbmRpZlxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2Vzd2FwbGlzdCk7XG4gXHRjYWNoZV9ub19hY2woaW5vZGUpO1xuIFx0aWYgKHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtNDkyNyw2ICs1MTA0LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gI2VuZGlmXG4gXHRmcmVlX3BlcmNwdShzYmluZm8tXHUwMDNlaW5vX2JhdGNoKTtcbiBcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzKTtcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbisjZW5kaWZcbiBcdG1wb2xfcHV0KHNiaW5mby1cdTAwM2VtcG9sKTtcbiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG4gXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcdTAwMjZzYmluZm8tXHUwMDNleGFfY2FjaGUpO1xuQEAgLTUwMjAsOCArNTIwMCwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnNiaW5mby1cdTAwM2VzdGF0X2xvY2spO1xuIFx0aWYgKHBlcmNwdV9jb3VudGVyX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzLCAwLCBHRlBfS0VSTkVMKSlcbiBcdFx0Z290byBmYWlsZWQ7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2ItXHUwMDNlc19zaHJpbmspKVxuK1x0XHRnb3RvIGZhaWxlZDtcbisjZW5kaWZcbiBcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19ibG9ja3NpemUgPSBQQUdFX1NJWkU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODo1NS4wNDQ2MjA4MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEzMTI5ODYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgU2htZW0gSHVnZSBQYWdlIFNocmlua2VyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNobWVtYCAoc3BlY2lmaWNhbGx5IHRtcGZzKSBkZWFscyB3aXRoIHVudXNlZCBodWdlIHBhZ2VzLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgZnJvbSBhIGdsb2JhbCBsaXN0IGZvciB0aGUgc2hyaW5rZXIgdG8gYSBwZXItbWVtY2cgYGxpc3RfbHJ1YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBpbXByb3ZlZCBtZW1vcnkgYWNjb3VudGluZyBmb3Igc2hhcmVkIG1lbW9yeSBzeXN0ZW1zLiBUaGUgcmVtb3ZhbCBvZiBgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZWAgZnJvbSBgZnMvc3VwZXIuY2AgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcmVsYXhhdGlvbiBvZiB0aGUgcmVzdHJpY3Rpb24gb24gYG5yX2NhY2hlZF9vYmplY3RzYCB0byB0aGUgcm9vdCBtZW1jZywgd2hpY2ggaXMgbm93IGJlaW5nIGhhbmRsZWQgYnkgdGhlIGBsaXN0X2xydWAgZGVzaWduLiBUaGlzIHBvaW50cyB0byBwb3RlbnRpYWxseSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgYW5kIGEgbW92ZSB0b3dhcmRzIG1vcmUgYWNjdXJhdGUgdHJhY2tpbmcgYWNyb3NzIG1lbWNncy5cblxuVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgcmVzaWRlcyBpbiB0aGUgYG1tL3NobWVtLmNgIG1vZGlmaWNhdGlvbnM6IGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHN3aXRjaCB0byBgbGlzdF9scnVfc2hyaW5rX3dhbGtgIGFuZCBgbGlzdF9scnVfd2Fsa2AgaXMgdGhlIGtleS4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgc2hyaW5rZXIgb3BlcmF0ZXMuIFdlJ3ZlIGdvdCBhIHNsZXcgb2YgbmV3IGZ1bmN0aW9ucyBoZXJlIHRvIG1hbmFnZSB0aGlzOiBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYCwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYCwgYGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIG1hbmFnaW5nIHRoZSBlbnRyaWVzIHdpdGhpbiB0aGUgYGxpc3RfbHJ1YC4gVGhlIGZhY3QgdGhhdCBgc2htZW1fc2JfaW5mb2Agbm93IHVzZXMgYSBgc3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3RgIGluc3RlYWQgb2YgYSBgc3RydWN0IGxpc3RfaGVhZCBzaHJpbmtsaXN0YCwgYW5kIHRoYXQgYHNobWVtX2lub2RlX2luZm9gIGhhcyBgc2hyaW5rbGlzdF9tZW1jZ2AgYW5kIGBzaHJpbmtsaXN0X25pZGAsIGNvbmZpcm1zIHRoaXMgbWVtY2ctYXdhcmUgYXBwcm9hY2guXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiB0byBgbW0vc2htZW0uY2AgYW5kIHRoYXQgdG1wZnMgaXMgdWJpcXVpdG91cywgdGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSBpbXBhY3RmdWwuIEl0J3MgaW4gYSBjcml0aWNhbCBwYXRoIGFuZCByZXF1aXJlcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhbmQgbW9kaWZpZWQ6XG4qICAgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2BcbiogICBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgXG4qICAgYHNobWVtX3VudXNlZF9odWdlX2FkZGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYFxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYFxuKiAgIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWBcbiogICBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgKG1vZGlmaWVkKVxuKiAgIGBzaG1lbV9ldmljdF9pbm9kZWAgKG1vZGlmaWVkKVxuKiAgIGBzaG1lbV9maWxsX3N1cGVyYCAobW9kaWZpZWQpXG4qICAgYHNobWVtX3B1dF9zdXBlcmAgKG1vZGlmaWVkKVxuXG5XYWl0LCBob2xkIG9uLi4uIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIGFyZSBzdGF0aWMuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYXJlIGJlaW5nIHVzZWQuIEFoLCBnb3QgaXQgLSB0aGV5IGFyZSBiZWluZyBhc3NpZ25lZCB0byBgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0c2AgYW5kIGBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWVfY2FjaGVkX29iamVjdHNgIHdpdGhpbiBgc2htZW1fZmlsbF9zdXBlcmAuIFNvLCBgc2htZW1fZmlsbF9zdXBlcmAgYW5kIGluZGlyZWN0bHkgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzaG1lbV9zb3BzYCBpbiBgbW0vc2htZW0uY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gYXNzaWdubWVudCBhbmQgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OTowNi4xNzU5MjMxMTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNzg3ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3NvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MDYuMjIwMTEwNDgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1Nzg0NjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgbWVtb3J5IGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IG15IGJlYXJpbmdzLiBMZXQncyBzZWUuLi4gd2hhdCdzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzPyBSaWdodCwgSSBzaG91bGQgc3RhcnQgd2l0aCBhIHNwZWNpZmljIHBvaW50IG9mIGludGVyZXN0LiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBjb2RlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgd29yayB0byBiZSBkb25lIG9uIHRoZSBzaGFyZWQgbWVtb3J5LiBNeSBzZWFyY2ggdGVybSB3aWxsIGJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYC4gVGhpcyBmdW5jdGlvbiBuYW1lLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIGl0LCBtaWdodCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcHJvYmxlbXMgb3Igb3B0aW1pemF0aW9ucyByZWdhcmRpbmcgdW51c2VkIGh1Z2UgcGFnZXMgd2l0aGluIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMuIEhvcGVmdWxseSwgdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MTAuNzc3OTU5NjgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjgxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3VudXNlZF9odWdlX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtODI5LVxcbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcXG5tbS9zaG1lbS5jLTgzMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5tbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL3NobWVtLmMtODM4LXtcXG5tbS9zaG1lbS5jOjgzOTpcXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiAqc2NhbiA9IGFyZztcXG5tbS9zaG1lbS5jLTg0MC1cXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcXG4tLVxcbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbi0tXFxubW0vc2htZW0uYy05MzMte1xcbm1tL3NobWVtLmM6OTM0OlxcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47XFxubW0vc2htZW0uYy05MzUtXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tLVxcbm1tL3NobWVtLmMtMTAyMC1cXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbm1tL3NobWVtLmMtMTAyMi1cXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vc2htZW0uYz01NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTU0MjYtXFx0Lm5yX2NhY2hlZF9vYmplY3RzXFx0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcXG5tbS9zaG1lbS5jOjU0Mjc6XFx0LmZyZWVfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXFxubW0vc2htZW0uYy01NDI4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToxMC44MjY2NDgwNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA1NjczMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2htZW0gRmlsZXN5c3RlbSdzIENhY2hlZCBPYmplY3QgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBsaW5rZWQgdG8gYGZyZWVfY2FjaGVkX29iamVjdHNgIHdpdGhpbiB0aGUgYHNobWVtX29wc2Agc3RydWN0dXJlLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBzZWVtcyB0byBiZSB0b3VjaGluZyBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGFyZSBpbnZva2VkIHRocm91Z2ggdGhlIGBzYi1cdTAwM2VzX29wYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB2aWEgYG5yX2NhY2hlZF9vYmplY3RzYCBhbmQgYGZyZWVfY2FjaGVkX29iamVjdHNgLiBOb3csIHdoZXJlIGRvIHRoZXNlIGVudHJ5IHBvaW50cyBsaXZlPyBBaCwgdGhhdCdzIHJpZ2h0LCBgc3VwZXJfY2FjaGVfc2NhbmAgYW5kIGBzdXBlcl9jYWNoZV9jb3VudGAgaW4gYGZzL3N1cGVyLmNgLlxuXG5XYWl0IGEgbWludXRlLCBgc3VwZXJfY2FjaGVfc2NhbmAgYW5kIGBzdXBlcl9jYWNoZV9jb3VudGAuLi4gdGhvc2UgYXJlIHRoZSBzaHJpbmtlciBjYWxsYmFja3MgZm9yIHRoZSBzdXBlciBibG9jayBzaHJpbmtlciwgYXJlbid0IHRoZXk/IFRoYXQgbWVhbnMgdGhlIGZpbGVzeXN0ZW0gc2hyaW5rZXIgbWVjaGFuaXNtIGlzIGtleSBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbiBgZnMvc3VwZXIuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBodWdlIHBhZ2UgY2FjaGluZyBpbiBzaG1lbSBpcyBtYW5hZ2VkIGFuZCBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhhdCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToxNS41MzIzMjU0ODlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTQyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3VwZXJfY2FjaGVfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmM9MTU0PXN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXFxuLS1cXG5mcy9zdXBlci5jLTE4MC0gKi9cXG5mcy9zdXBlci5jOjE4MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbmZzL3N1cGVyLmMtMTgyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5mcy9zdXBlci5jPTIzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbmZzL3N1cGVyLmMtMjUwLVxcdCAqIGxpc3RfbHJ1X3Nocmlua19jb3VudCgpIG9yIHNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkuIENvdW50cyBjYW5cXG5mcy9zdXBlci5jOjI1MTpcXHQgKiBjaGFuZ2UgYmV0d2VlbiBzdXBlcl9jYWNoZV9jb3VudCBhbmQgc3VwZXJfY2FjaGVfc2Nhbiwgc28gd2UgcmVhbGx5XFxuZnMvc3VwZXIuYy0yNTItXFx0ICogZG9uJ3QgbmVlZCBsb2NrcyBoZXJlLlxcbi0tXFxuZnMvc3VwZXIuYz0zMjM9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4tLVxcbmZzL3N1cGVyLmMtMzkxLVxcbmZzL3N1cGVyLmM6MzkyOlxcdHMtXFx1MDAzZXNfc2hyaW5rLVxcdTAwM2VzY2FuX29iamVjdHMgPSBzdXBlcl9jYWNoZV9zY2FuO1xcbmZzL3N1cGVyLmMtMzkzLVxcdHMtXFx1MDAzZXNfc2hyaW5rLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gc3VwZXJfY2FjaGVfY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU5OjE1LjU3Nzg4NTk4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzIyNjQ2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTaG1lbSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhpcywgYW5kIGl0IHNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBzdXBlcl9jYWNoZV9zY2FuYCBhbmQgYHN1cGVyX2NhY2hlX2NvdW50YC4gVGhlc2UgYXJlIHByZXR0eSBnZW5lcmljLCBzbyB0aGF0IGRvZXNuJ3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgdG8gYmUgaGFwcGVuaW5nIHdpdGhpbiBgbW0vc2htZW0uY2AuIEknbSBzcGVjaWZpY2FsbHkgc2VlaW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBtZW50aW9uZWQsIHdoaWNoIHN1Z2dlc3RzIHRoZSBhZGp1c3RtZW50cyBhcmUgZm9jdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gSSBuZWVkIHRvIGJlIHN1cmUsIHRob3VnaC4gSXMgdGhpcyB0aGUgb25seSBwbGFjZT9cblxuSSBoYXZlIHRvIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGltcGFjdGVkLiBMZXQncyBkaWcgZGVlcGVyLiBBaCwgSSBzZWUgdGhhdCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgYWxzbyBjYWxsZWQgb3V0LiBIbW0sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl04oCZcyBzdGF0aWMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBjaGFuZ2VzICpyZWFsbHkqIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToyMy44MTAxNTQ3ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDIzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX2dldF9mb2xpb19nZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTIyMjI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjUyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxcbm1tL3NobWVtLmM6MjI1MzogKiB1c3VhbCBzd2FwaW4gb2Ygc2htZW1fZ2V0X2ZvbGlvX2dmcCgpLCBvciBieSB0aGUgbGVzcyBjb21tb24gc3dhcG9mZiBvZlxcbm1tL3NobWVtLmMtMjI1NC0gKiBzaG1lbV91bnVzZV9pbm9kZSgpKSwgaXQgbWF5IGhhdmUgYmVlbiByZWFkIGluIGVhcmxpZXIgZnJvbSBzd2FwLCBpblxcbi0tXFxubW0vc2htZW0uYz0yNDMzPXN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI1OTgtLypcXG5tbS9zaG1lbS5jOjI1OTk6ICogc2htZW1fZ2V0X2ZvbGlvX2dmcCAtIGZpbmQgcGFnZSBpbiBjYWNoZSwgb3IgZ2V0IGZyb20gc3dhcCwgb3IgYWxsb2NhdGVcXG5tbS9zaG1lbS5jLTI2MDAtICpcXG4tLVxcbm1tL3NobWVtLmMtMjYwNi0gKi9cXG5tbS9zaG1lbS5jOjI2MDc6c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0yNjA4LVxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXFxuLS1cXG5tbS9zaG1lbS5jPTI4MDM9aW50IHNobWVtX2dldF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLFxcbi0tXFxubW0vc2htZW0uYy0yODA1LXtcXG5tbS9zaG1lbS5jOjI4MDY6XFx0cmV0dXJuIHNobWVtX2dldF9mb2xpb19nZnAoaW5vZGUsIGluZGV4LCB3cml0ZV9lbmQsIGZvbGlvcCwgc2dwLFxcbm1tL3NobWVtLmMtMjgwNy1cXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpLCBOVUxMLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9Mjg4Mj1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL3NobWVtLmMtMjkwMC1cXHRXQVJOX09OX09OQ0Uodm1mLVxcdTAwM2VwYWdlICE9IE5VTEwpO1xcbm1tL3NobWVtLmM6MjkwMTpcXHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXFx1MDAzZXBnb2ZmLCAwLCBcXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcXG5tbS9zaG1lbS5jLTI5MDItXFx0XFx0XFx0XFx0ICBnZnAsIHZtZiwgXFx1MDAyNnJldCk7XFxuLS1cXG5tbS9zaG1lbS5jPTYxMzE9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNjEzOC1cXG5tbS9zaG1lbS5jOjYxMzk6XFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgaV9zaXplX3JlYWQoaW5vZGUpLFxcbm1tL3NobWVtLmMtNjE0MC1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsIGdmcCwgTlVMTCwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU5OjIzLjg1NjE4NTUwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMzNTQ3NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgc2htZW0gRnVuY3Rpb24gVmlzaWJpbGl0eSBhbmQgQ2FsbCBQYXRocyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGBzaG1lbWAgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVzIHRvIHVzZSBhcyBlbnRyeSBwb2ludHMuIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBzdHJhaWdodGZvcndhcmQsIHRoZXkncmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyB0aGVtIGVhc3kgdG8gdGFyZ2V0LiBgc2htZW1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGl0J3MgY2FsbGVkIHZpYSB0aGUgYHZtX29wZXJhdGlvbnNfc3RydWN0YCwgc28gaXQgKm1pZ2h0KiBiZSBhY2Nlc3NpYmxlLCBidXQgbGVzcyBpZGVhbC4gYHNobWVtX2V2aWN0X2lub2RlYCwgYHNobWVtX2ZpbGxfc3VwZXJgLCBhbmQgYHNobWVtX3B1dF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBzbyBsZXNzIGludGVyZXN0aW5nIGZyb20gYSB0YXJnZXRpbmcgcGVyc3BlY3RpdmUuXG5cblRoZSB0cmlja3kgb25lIGlzIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyBiZWNhdXNlIGl0IG1pZ2h0IGJlIGlubGluZWQgYW5kIG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sLiBCdXQsIGl0J3MgYXNzaWduZWQgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYHNobWVtX29wcy5mcmVlX2NhY2hlZF9vYmplY3RzYC4gVGhhdCBtZWFucyBpdCAqbXVzdCogaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBidXQgdGhpcyBvbmUgaXMgbm90IGlubGluZWQsIHNpbmNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gU28sIGl0IHNob3VsZCBiZSB0YXJnZXRhYmxlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBub24tc3RhdGljIG9uZXM6IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy5cblxuQnV0IHdhaXQsIGhvdyBpcyBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgKmFjdHVhbGx5KiBjYWxsZWQ/IEl0J3MgcGFydCBvZiB0aGUgc2hyaW5rZXIsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUuIENhbiB3ZSB0cmlnZ2VyIGl0IHdpdGggYGRyb3BfY2FjaGVzYD8gWWVzLCBgZWNobyAzIFx1MDAzZSAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNgIGNhbGxzIGBkcm9wX3NsYWJgLCB3aGljaCBjYWxscyBgc2hyaW5rX3NsYWJgLiBgc2hyaW5rX3NsYWJgIHRoZW4gY2FsbHMgYHN1cGVyX2NhY2hlX3NjYW5gLCB3aGljaCBmaW5hbGx5IGNhbGxzIGBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWVfY2FjaGVkX29iamVjdHNgLCB3aGljaCBpcyBpbmRlZWQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBFeGNlbGxlbnQuIFRoYXQgZ2l2ZXMgbWUgYSBwYXRoIHRvIHRyaWdnZXIgaXQgaW5kaXJlY3RseS5cblxuT2theSwgbmV4dCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHdob2xlIHNlY3Rpb24gb2YgY29kZSBpcyB3cmFwcGVkIGluIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL3NobWVtLmNgIGFuZCBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYC4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCwgYW5kIGtub3dpbmcgdGhlc2Ugb3B0aW9ucyBtaWdodCBsaW1pdCB0aGUgc2NvcGUgb2Ygd2hhdCBJIGNhbiBkbywgYnV0IGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MzguMTkxNjY0NDUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc4ODA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0zNT1zdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtNTgtXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjU5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtNjAtXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHQqc2hyaW5rbGlzdF9tZW1jZztcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD03Nz1zdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtOTEtXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDsgICAgIC8qIGRlZmF1bHQgbWVtb3J5IHBvbGljeSBmb3IgbWFwcGluZ3MgKi9cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6OTI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC05My1cXHRzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6MzguMjM2NDU4MzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTc3MTA5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBObyBxdWVzdGlvbiBhYm91dCBpdC4gQW5kLCBJIHNlZSwgd2UncmUgYWxzbyBtYWtpbmcgdXNlIG9mIGBDT05GSUdfTUVNQ0dgLCBhcyBpdHMgdXNhZ2UgcG9wcyB1cCBpbiB0aGUgYG1tL3NobWVtLmNgIGZpbGUuIEdvdCBpdC4gVGhpcyBtYWtlcyBzZW5zZSBpbiBjb250ZXh0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTYyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6NDEuODM0MTcyMDI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU4MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTczOD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXFxuLS1cXG5tbS9zaG1lbS5jLTc0Ni1cXG5tbS9zaG1lbS5jOjc0NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2htZW0uYy03NDgtc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTk6NDEuODc4NzY3MzQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzI2MzAxNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IGlmIGBDT05GSUdfU0hNRU1gIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGhlcmUuIEV2ZW4gdGhvdWdoIGl0J3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgaXQncyBhbHdheXMgc21hcnQgdG8gZG91YmxlLWNoZWNrIGFuZCBleHBsaWNpdGx5IGluY2x1ZGUgaXQgaWYgbmVjZXNzYXJ5LiBDYW4ndCBiZSB0b28gY2FyZWZ1bCwgcmlnaHQ/XG5cblRoZW4sIGFoIHllcywgSSByZW1lbWJlciB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX01NVWAuIEkgc2hvdWxkIGhhdmUga25vd24gdGhhdCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBidXQgYSBxdWljayByZXZpZXcgaXMgYWx3YXlzIGdvb2QgcHJhY3RpY2UuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMDo1Ny42MDUwNzI2ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTQ5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzEtXFxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODMzLVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1MD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU1LVxcbm1tL0tjb25maWc6ODU2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg1Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2Mi1cXG5tbS9LY29uZmlnOjg2MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY0LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3MS1cXG5tbS9LY29uZmlnOjg3MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODc5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04ODgtXFxubW0vS2NvbmZpZzo4ODk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5MC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctODk4LVxcbm1tL0tjb25maWc6ODk5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA2LVxcbm1tL0tjb25maWc6OTA3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MDgtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNC1cXG5tbS9LY29uZmlnOjkxNTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxNi1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyND1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTMzLVxcbm1tL0tjb25maWc6OTM0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzUtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0Mi1cXG5tbS9LY29uZmlnOjk0MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0NC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1MC1cXG5tbS9LY29uZmlnOjk1MTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTUyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTgtXFxubW0vS2NvbmZpZzo5NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMDo1Ny42NTQyMzA2NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1OTM1ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOlxuXG4qKkludmVzdGlnYXRpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGhhbmRsZSBvbiB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBkZXBlbmRlbmNpZXMuIFRoaXMgbGlrZWx5IG1lYW5zIEkgbmVlZCB0byBzdGFydCB0cmFjaW5nIHRoaW5ncyBiYWNrIHRvIHVuZGVyc3RhbmQgd2hhdCByZWxpZXMgb24gaXQsIHdoYXQgaXQgZW5hYmxlcywgYW5kIHdoYXQgbWlnaHQgYnJlYWsgaWYgSSB3ZXJlIHRvIGNoYW5nZSBvciBkaXNhYmxlIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyBhbnl0aGluZyBkb3duc3RyZWFtIHRoYXQgbWlnaHQgbGV2ZXJhZ2UgdGhlIGFkdmFudGFnZXMgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCBvciB0aGF0IGNvdWxkIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQgYnkgaXRzIGFic2VuY2Ugb3IgbW9kaWZpY2F0aW9ucy4gUGVyaGFwcyBJJ2xsIG5lZWQgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGtlcm5lbCBtb2R1bGVzLCBvciBhcHBsaWNhdGlvbi1sZXZlbCBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byBnbyBiZXlvbmQgdGhlIHN1cmZhY2UgYW5kIGRldGVybWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIE5VTUEsIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuIEknbGwga2VlcCBhbiBvcGVuIG1pbmQsIGJlY2F1c2UgSSdtIGJldHRpbmcgdGhhdCB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIGNvbXBsZXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MDAuOTEzNTkxNTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyOTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5tbS9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gTU1VIFxcdTAwMjZcXHUwMDI2IEJMT0NLIFxcdTAwMjZcXHUwMDI2ICFBUkNIX05PX1NXQVBcXG5tbS9LY29uZmlnLTE1LVxcdGRlZmF1bHQgeVxcbi0tXFxubW0vS2NvbmZpZz0yMj1jb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxubW0vS2NvbmZpZzoyNDpcXHRkZXBlbmRzIG9uIFNXQVBcXG5tbS9LY29uZmlnLTI1LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm1tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbm1tL0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctMzgtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz00NT1jb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG5tbS9LY29uZmlnOjQ3OlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTQ4LVxcdGRlZmF1bHQgblxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG5tbS9LY29uZmlnLTYwLVxcdHByb21wdCBcXFwiRGVmYXVsdCBjb21wcmVzc29yXFxcIlxcbm1tL0tjb25maWc6NjE6XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctNjItXFx0ZGVmYXVsdCBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxuLS1cXG5tbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcbm1tL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIFpTV0FQXFxubW0vS2NvbmZpZy0xMTctICAgICAgIGRlZmF1bHQgXFxcImRlZmxhdGVcXFwiIGlmIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxuLS1cXG5tbS9LY29uZmlnPTEyOD1tZW51IFxcXCJac21hbGxvYyBhbGxvY2F0b3Igb3B0aW9uc1xcXCJcXG5tbS9LY29uZmlnOjEyOTpcXHRkZXBlbmRzIG9uIFpTTUFMTE9DXFxubW0vS2NvbmZpZy0xMzAtXFxuLS1cXG5tbS9LY29uZmlnPTE2OD1jb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXFxubW0vS2NvbmZpZy0xNjktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTcwOlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcXHUwMDI2XFx1MDAyNiAhVElOWV9SQ1VcXG5tbS9LY29uZmlnOjE3MTpcXHRkZXBlbmRzIG9uICFSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbm1tL0tjb25maWctMTcyLVxcbm1tL0tjb25maWc9MTczPWNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG5tbS9LY29uZmlnOjE3NTpcXHRkZXBlbmRzIG9uIEVYUEVSVCBcXHUwMDI2XFx1MDAyNiAhQ09NUElMRV9URVNUXFxubW0vS2NvbmZpZy0xNzYtXFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZz0yMDA9Y29uZmlnIFNMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vS2NvbmZpZy0yMDEtXFx0Ym9vbCBcXFwiUmFuZG9taXplIHNsYWIgZnJlZWxpc3RcXFwiXFxubW0vS2NvbmZpZzoyMDI6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yMDMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0yMDg9Y29uZmlnIFNMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJIYXJkZW4gc2xhYiBmcmVlbGlzdCBtZXRhZGF0YVxcXCJcXG5tbS9LY29uZmlnOjIxMDpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTIxMS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTIxNz1jb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcbm1tL0tjb25maWc6MjE5OlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjIwLVxcdGRlZmF1bHQgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbi0tXFxubW0vS2NvbmZpZz0yMzQ9Y29uZmlnIFNMVUJfU1RBVFNcXG4tLVxcbm1tL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXFxcIlxcbm1tL0tjb25maWc6MjM3OlxcdGRlcGVuZHMgb24gU1lTRlMgXFx1MDAyNlxcdTAwMjYgIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjQ3PWNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnOjI0ODpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJQYXJ0aXRpb25lZCBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTI2Mz1jaG9pY2VcXG5tbS9LY29uZmlnLTI2NC1cXHRwcm9tcHQgXFxcIlBhcnRpdGlvbmVkIHNsYWIgY2FjaGUgbW9kZVxcXCJcXG5tbS9LY29uZmlnOjI2NTpcXHRkZXBlbmRzIG9uIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFU1xcbm1tL0tjb25maWctMjY2LVxcdGRlZmF1bHQgS01BTExPQ19QQVJUSVRJT05fVFlQRUQgaWYgQ0NfSEFTX0FMTE9DX1RPS0VOXFxuLS1cXG5tbS9LY29uZmlnPTI4Mz1jb25maWcgS01BTExPQ19QQVJUSVRJT05fVFlQRURcXG5tbS9LY29uZmlnLTI4NC1cXHRib29sIFxcXCJUeXBlIGJhc2VkIHNsYWIgY2FjaGUgc2VsZWN0aW9uIGZvciBub3JtYWwga21hbGxvY1xcXCJcXG5tbS9LY29uZmlnOjI4NTpcXHRkZXBlbmRzIG9uIENDX0hBU19BTExPQ19UT0tFTlxcbm1tL0tjb25maWctMjg2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MzU0PWNvbmZpZyBNTUFQX0FMTE9XX1VOSU5JVElBTElaRURcXG5tbS9LY29uZmlnLTM1NS1cXHRib29sIFxcXCJBbGxvdyBtbWFwcGVkIGFub255bW91cyBtZW1vcnkgdG8gYmUgdW5pbml0aWFsaXplZFxcXCJcXG5tbS9LY29uZmlnOjM1NjpcXHRkZXBlbmRzIG9uIEVYUEVSVCBcXHUwMDI2XFx1MDAyNiAhTU1VXFxubW0vS2NvbmZpZy0zNTctXFx0ZGVmYXVsdCBuXFxuLS1cXG5tbS9LY29uZmlnPTM3Nj1jb25maWcgU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzc3LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjM3ODpcXHRkZXBlbmRzIG9uIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzc5LVxcbm1tL0tjb25maWc9MzgwPWNob2ljZVxcbm1tL0tjb25maWctMzgxLVxcdHByb21wdCBcXFwiTWVtb3J5IG1vZGVsXFxcIlxcbm1tL0tjb25maWc6MzgyOlxcdGRlcGVuZHMgb24gU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzgzLVxcdGRlZmF1bHQgU1BBUlNFTUVNX01BTlVBTCBpZiBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUXFxuLS1cXG5tbS9LY29uZmlnPTM5MT1jb25maWcgRkxBVE1FTV9NQU5VQUxcXG5tbS9LY29uZmlnLTM5Mi1cXHRib29sIFxcXCJGbGF0IE1lbW9yeVxcXCJcXG5tbS9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uICFBUkNIX1NQQVJTRU1FTV9FTkFCTEUgfHwgQVJDSF9GTEFUTUVNX0VOQUJMRVxcbm1tL0tjb25maWctMzk0LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDA2PWNvbmZpZyBTUEFSU0VNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy00MDctXFx0Ym9vbCBcXFwiU3BhcnNlIE1lbW9yeVxcXCJcXG5tbS9LY29uZmlnOjQwODpcXHRkZXBlbmRzIG9uIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbm1tL0tjb25maWctNDA5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDIxPWNvbmZpZyBTUEFSU0VNRU1cXG5tbS9LY29uZmlnLTQyMi1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0MjM6XFx0ZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgXFx1MDAyNlxcdTAwMjYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy00MjQtXFxubW0vS2NvbmZpZz00MjU9Y29uZmlnIEZMQVRNRU1cXG5tbS9LY29uZmlnLTQyNi1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0Mjc6XFx0ZGVwZW5kcyBvbiAhU1BBUlNFTUVNIHx8IEZMQVRNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy00MjgtXFxuLS1cXG5tbS9LY29uZmlnPTQ0Nz1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcXG5tbS9LY29uZmlnLTQ0OC1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0NDk6XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU0gXFx1MDAyNlxcdTAwMjYgIVNQQVJTRU1FTV9TVEFUSUNcXG5tbS9LY29uZmlnLTQ1MC1cXG4tLVxcbm1tL0tjb25maWc9NDU0PWNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU1LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjQ1NjpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTSBcXHUwMDI2XFx1MDAyNiBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcXG5tbS9LY29uZmlnLTQ1Ny1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTQ4MD1jb25maWcgSEFWRV9HVVBfRkFTVFxcbm1tL0tjb25maWc6NDgxOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy00ODItXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz01MDQ9Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxubW0vS2NvbmZpZy01MDUtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NTA2OlxcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXFxubW0vS2NvbmZpZy01MDctXFxuLS1cXG5tbS9LY29uZmlnPTUxMj1tZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxuLS1cXG5tbS9LY29uZmlnLTUxNC1cXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWc6NTE1OlxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnOjUxNjpcXHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZzo1MTc6XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbm1tL0tjb25maWctNTE4LVxcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXFxuLS1cXG5tbS9LY29uZmlnPTU4ND1jb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG5tbS9LY29uZmlnLTU4NS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo1ODY6XFx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbm1tL0tjb25maWctNTg3LVxcbi0tXFxubW0vS2NvbmZpZz01OTA9Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuLS1cXG5tbS9LY29uZmlnLTU5Ni0jIERlZmF1bHQgdG8gNCBmb3Igd2lkZXIgdGVzdGluZywgdGhvdWdoIDggbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS5cXG5tbS9LY29uZmlnOjU5NzojIEFSTSdzIGFkanVzdF9wdGUgKHVudXNlZCBpZiBWSVBUKSBkZXBlbmRzIG9uIG1tLXdpZGUgcGFnZV90YWJsZV9sb2NrLlxcbm1tL0tjb25maWctNTk4LSMgUEEtUklTQyA3eHh4J3Mgc3BpbmxvY2tfdCB3b3VsZCBlbmxhcmdlIHN0cnVjdCBwYWdlIGZyb20gMzIgdG8gNDQgYnl0ZXMuXFxuLS1cXG5tbS9LY29uZmlnPTYwND1jb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYwNS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo2MDY6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjYwNzpcXHRkZXBlbmRzIG9uIFNNUFxcbm1tL0tjb25maWc6NjA4OlxcdGRlcGVuZHMgb24gTlJfQ1BVUyBcXHUwMDNlPSA0XFxubW0vS2NvbmZpZzo2MDk6XFx0ZGVwZW5kcyBvbiAhQVJNIHx8IENQVV9DQUNIRV9WSVBUXFxubW0vS2NvbmZpZzo2MTA6XFx0ZGVwZW5kcyBvbiAhUEFSSVNDIHx8IFBBMjBcXG5tbS9LY29uZmlnOjYxMTpcXHRkZXBlbmRzIG9uICFTUEFSQzMyXFxubW0vS2NvbmZpZzo2MTI6XFx0ZGVwZW5kcyBvbiAhVU1MXFxubW0vS2NvbmZpZy02MTMtXFxuLS1cXG5tbS9LY29uZmlnPTYxNz1jb25maWcgU1BMSVRfUE1EX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYxOC1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo2MTk6XFx0ZGVwZW5kcyBvbiBTUExJVF9QVEVfUFRMT0NLUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLXFxubW0vS2NvbmZpZy02MjAtXFxuLS1cXG5tbS9LY29uZmlnPTYyOD1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjMwLVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6NjMxOlxcdGRlcGVuZHMgb24gTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IEJBTExPT05cXG5tbS9LY29uZmlnLTYzMi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTY0MD1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NDMtXFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWc6NjQ0OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy02NDUtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz02NTU9Y29uZmlnIENPTVBBQ1RfVU5FVklDVEFCTEVfREVGQVVMVFxcbm1tL0tjb25maWctNjU2LVxcdGludFxcbm1tL0tjb25maWc6NjU3OlxcdGRlcGVuZHMgb24gQ09NUEFDVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlZmF1bHQgMCBpZiBQUkVFTVBUX1JUXFxuLS1cXG5tbS9LY29uZmlnPTY3MT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjczLVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6Njc0OlxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnLTY3NS1cXHRzZWxlY3QgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTY4Mj1jb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODMtXFx0Ym9vbFxcbm1tL0tjb25maWc6Njg0OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy02ODUtXFxuLS1cXG5tbS9LY29uZmlnPTcyNj1jb25maWcgS1NNXFxubW0vS2NvbmZpZy03MjctXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcbm1tL0tjb25maWc6NzI4OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy03MjktXFx0c2VsZWN0IFhYSEFTSFxcbi0tXFxubW0vS2NvbmZpZz03NDE9Y29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUlxcbm1tL0tjb25maWctNzQyLVxcdGludCBcXFwiTG93IGFkZHJlc3Mgc3BhY2UgdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvblxcXCJcXG5tbS9LY29uZmlnOjc0MzpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNzQ0LVxcdGRlZmF1bHQgNDA5Nlxcbi0tXFxubW0vS2NvbmZpZz03NjM9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZzo3NjQ6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjc2NTpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2Ni1cXHRib29sIFxcXCJFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXFxcIlxcbi0tXFxubW0vS2NvbmZpZz03NzQ9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbm1tL0tjb25maWctNzc1LVxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG5tbS9LY29uZmlnOjc3NjpcXHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubW0vS2NvbmZpZy03NzctXFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuLS1cXG5tbS9LY29uZmlnPTc3OT1jb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbm1tL0tjb25maWctNzgwLVxcdGludCBcXFwiVHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXFxcIlxcbm1tL0tjb25maWc6NzgxOlxcdGRlcGVuZHMgb24gIU1NVVxcbm1tL0tjb25maWctNzgyLVxcdGRlZmF1bHQgMVxcbi0tXFxubW0vS2NvbmZpZz04MTM9Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxubW0vS2NvbmZpZy04MTQtXFx0Ym9vbCBcXFwiQWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcXFwiXFxubW0vS2NvbmZpZzo4MTU6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODE2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9ODMyPW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbm1tL0tjb25maWc6ODM0OlxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxubW0vS2NvbmZpZy04MzUtXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWc9OTY4PWNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTY5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjk3MDpcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXFx1MDAyNlxcdTAwMjYgU1dBUCBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbm1tL0tjb25maWctOTcxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTAxND1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxcbm1tL0tjb25maWctMTAxNS1cXHRkZWZfYm9vbCBuXFxubW0vS2NvbmZpZzoxMDE2OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTEwMTctXFxubW0vS2NvbmZpZz0xMDE4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMTktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTAyMDpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy0xMDIxLVxcbm1tL0tjb25maWc9MTAyMj1jb25maWcgQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDIzLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMjQ6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9LY29uZmlnLTEwMjUtXFxuLS1cXG5tbS9LY29uZmlnPTEwMzY9Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxcbm1tL0tjb25maWc6MTAzNzpcXHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxcbm1tL0tjb25maWctMTAzOC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTEwNTM9Y29uZmlnIENNQVxcbm1tL0tjb25maWctMTA1NC1cXHRib29sIFxcXCJDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcXFwiXFxubW0vS2NvbmZpZzoxMDU1OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xMDU2LVxcdHNlbGVjdCBNSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWc9MTA2OD1jb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwNjktXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbm1tL0tjb25maWc6MTA3MDpcXHRkZXBlbmRzIG9uIENNQSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbm1tL0tjb25maWctMTA3MS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwNzQ9Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA3NS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vS2NvbmZpZzoxMDc2OlxcdGRlcGVuZHMgb24gQ01BIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vS2NvbmZpZy0xMDc3LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTA4MT1jb25maWcgQ01BX0FSRUFTXFxubW0vS2NvbmZpZy0xMDgyLVxcdGludCBcXFwiTWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXFxcIlxcbm1tL0tjb25maWc6MTA4MzpcXHRkZXBlbmRzIG9uIENNQVxcbm1tL0tjb25maWctMTA4NC1cXHRkZWZhdWx0IDIwIGlmIE5VTUFcXG4tLVxcbm1tL0tjb25maWc9MTEyOD1jb25maWcgTUVNX1NPRlRfRElSVFlcXG5tbS9LY29uZmlnLTExMjktXFx0Ym9vbCBcXFwiVHJhY2sgbWVtb3J5IGNoYW5nZXNcXFwiXFxubW0vS2NvbmZpZzoxMTMwOlxcdGRlcGVuZHMgb24gQ0hFQ0tQT0lOVF9SRVNUT1JFIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9TT0ZUX0RJUlRZIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5tbS9LY29uZmlnLTExMzEtXFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuLS1cXG5tbS9LY29uZmlnPTExNDM9Y29uZmlnIFNUQUNLX01BWF9ERUZBVUxUX1NJWkVfTUJcXG4tLVxcbm1tL0tjb25maWctMTE0Ni1cXHRyYW5nZSA4IDIwNDhcXG5tbS9LY29uZmlnOjExNDc6XFx0ZGVwZW5kcyBvbiBTVEFDS19HUk9XU1VQIFxcdTAwMjZcXHUwMDI2ICghNjRCSVQgfHwgQ09NUEFUKVxcbm1tL0tjb25maWctMTE0OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTExNTU9Y29uZmlnIERFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVRcXG5tbS9LY29uZmlnLTExNTYtXFx0Ym9vbCBcXFwiRGVmZXIgaW5pdGlhbGlzYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIGt0aHJlYWRzXFxcIlxcbm1tL0tjb25maWc6MTE1NzpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTVxcbm1tL0tjb25maWc6MTE1ODpcXHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cXG5tbS9LY29uZmlnOjExNTk6XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbm1tL0tjb25maWc6MTE2MDpcXHRkZXBlbmRzIG9uICFLTVNBTlxcbm1tL0tjb25maWctMTE2MS1cXHRzZWxlY3QgUEFEQVRBXFxuLS1cXG5tbS9LY29uZmlnPTExNzk9Y29uZmlnIElETEVfUEFHRV9UUkFDS0lOR1xcbm1tL0tjb25maWctMTE4MC1cXHRib29sIFxcXCJFbmFibGUgaWRsZSBwYWdlIHRyYWNraW5nXFxcIlxcbm1tL0tjb25maWc6MTE4MTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWctMTE4Mi1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4tLVxcbm1tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxcbm1tL0tjb25maWctMTIxOC1cXHRib29sIFxcXCJTdXBwb3J0IERNQTMyIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbm1tL0tjb25maWc6MTIxOTpcXHRkZXBlbmRzIG9uICFYODZfMzJcXG5tbS9LY29uZmlnLTEyMjAtXFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuLS1cXG5tbS9LY29uZmlnPTEyMjI9Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjIzLVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxubW0vS2NvbmZpZzoxMjI0OlxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctMTIyNS1cXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuLS1cXG5tbS9LY29uZmlnPTEyNDQ9Y29uZmlnIEhNTV9NSVJST1JcXG5tbS9LY29uZmlnLTEyNDUtXFx0Ym9vbFxcbm1tL0tjb25maWc6MTI0NjpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTI0Ny1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnPTEyNTI9Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUzLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5tbS9LY29uZmlnOjEyNTQ6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTI1NS1cXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnPTEyOTE9Y29uZmlnIEdVUF9URVNUXFxubW0vS2NvbmZpZy0xMjkyLVxcdGJvb2wgXFxcIkVuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcXFwiXFxubW0vS2NvbmZpZzoxMjkzOlxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG5tbS9LY29uZmlnLTEyOTQtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMzExPWNvbW1lbnQgXFxcIkdVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZFxcXCJcXG5tbS9LY29uZmlnOjEzMTI6XFx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0ZTXFxubW0vS2NvbmZpZy0xMzEzLVxcbi0tXFxubW0vS2NvbmZpZz0xMzE3PWNvbmZpZyBETUFQT09MX1RFU1RcXG5tbS9LY29uZmlnLTEzMTgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBhIG1vZHVsZSB0byBydW4gdGltZSB0ZXN0cyBvbiBkbWFfcG9vbFxcXCJcXG5tbS9LY29uZmlnOjEzMTk6XFx0ZGVwZW5kcyBvbiBIQVNfRE1BXFxubW0vS2NvbmZpZy0xMzIwLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTM0MT1jb25maWcgU0VDUkVUTUVNXFxuLS1cXG5tbS9LY29uZmlnLTEzNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG5tbS9LY29uZmlnOjEzNDQ6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxcbm1tL0tjb25maWctMTM0NS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEzNTA9Y29uZmlnIEFOT05fVk1BX05BTUVcXG5tbS9LY29uZmlnLTEzNTEtXFx0Ym9vbCBcXFwiQW5vbnltb3VzIFZNQSBuYW1lIHN1cHBvcnRcXFwiXFxubW0vS2NvbmZpZzoxMzUyOlxcdGRlcGVuZHMgb24gUFJPQ19GUyBcXHUwMDI2XFx1MDAyNiBBRFZJU0VfU1lTQ0FMTFMgXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vS2NvbmZpZy0xMzUzLVxcbi0tXFxubW0vS2NvbmZpZz0xMzc0PWNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzNzUtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTM3NjpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcXG5tbS9LY29uZmlnLTEzNzctXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMzgzPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG5tbS9LY29uZmlnLTEzODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcXFwiXFxubW0vS2NvbmZpZzoxMzg1OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xMzg2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTItXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzoxMzkzOlxcdGRlcGVuZHMgb24gVVNFUkZBVUxURkQgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxubW0vS2NvbmZpZy0xMzk0LVxcbi0tXFxubW0vS2NvbmZpZz0xNDAxPWNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxubW0vS2NvbmZpZzoxNDAzOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xNDA0LVxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG5tbS9LY29uZmlnOjE0MDU6XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZy0xNDA2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQxMD1jb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDExLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbm1tL0tjb25maWc6MTQxMjpcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MTMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xNDE2PWNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE3LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG5tbS9LY29uZmlnOjE0MTg6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDE5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQyNT1jb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjYtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQyNzpcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxubW0vS2NvbmZpZy0xNDI4LSMgfVxcbi0tXFxubW0vS2NvbmZpZz0xNDMzPWNvbmZpZyBQRVJfVk1BX0xPQ0tcXG5tbS9LY29uZmlnLTE0MzQtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQzNTpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBTTVBcXG5tbS9LY29uZmlnLTE0MzYtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xNDQyPWNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbm1tL0tjb25maWctMTQ0My1cXHRib29sXFxubW0vS2NvbmZpZzoxNDQ0OlxcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcXG5tbS9LY29uZmlnLTE0NDUtXFxuLS1cXG5tbS9LY29uZmlnPTE0NTU9Y29uZmlnIE5VTUFfRU1VXFxubW0vS2NvbmZpZy0xNDU2LVxcdGJvb2wgXFxcIk5VTUEgZW11bGF0aW9uXFxcIlxcbm1tL0tjb25maWc6MTQ1NzpcXHRkZXBlbmRzIG9uIE5VTUFfTUVNQkxLU1xcbm1tL0tjb25maWc6MTQ1ODpcXHRkZXBlbmRzIG9uIFg4NiB8fCBHRU5FUklDX0FSQ0hfTlVNQVxcbm1tL0tjb25maWctMTQ1OS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0NzM9Y29uZmlnIFBUX1JFQ0xBSU1cXG5tbS9LY29uZmlnLTE0NzQtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQ3NTpcXHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXFx1MDAyNlxcdTAwMjYgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXFxubW0vS2NvbmZpZy0xNDc2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQ5Mj1jb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXFxubW0vS2NvbmZpZy0xNDkzLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIGxhenkgTU1VIG1vZGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9LY29uZmlnOjE0OTQ6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19MQVpZX01NVV9NT0RFXFxubW0vS2NvbmZpZzoxNDk1OlxcdGRlcGVuZHMgb24gS1VOSVRcXG5tbS9LY29uZmlnLTE0OTYtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MDAuOTYzMjI4OTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2ODUwNTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgVEhQIGFuZCBNRU1DRyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXRzIGF2YWlsYWJpbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IGJvdGggYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIHRoZSBhYnNlbmNlIG9mIGBQUkVFTVBUX1JUYC4gVGhlcmVmb3JlLCB3aGVuIGRvY3VtZW50aW5nIHRoZXNlLCBJIHNob3VsZCBqdXN0IGxpc3QgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTUNHYC4gV2FpdCBhIG1pbnV0ZSwgd2hlcmUgaXMgYE1FTUNHYCBkZWZpbmVkPyBBaCwgcmlnaHQsIHRoYXQncyBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgLiBJIHNob3VsZCBnbyBjaGVjayB0aGF0IGZpbGUgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTowNC44MzE3Mzg2MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjI2NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4My1cXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4NS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDYtXFxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDgtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MDQuODc4OTc0MDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODI3ODI1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgRnVuY3Rpb24gU2VsZWN0aW9uIGZvciB0bXBmcy9zaG1lbSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBiZXN0IGZvY3VzIGZ1bmN0aW9ucyBmb3IgdGhpcyB0bXBmcy9zaG1lbSBjaGFuZ2UsIGNvbnNpZGVyaW5nIGBNRU1DR2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRmlyc3QsIEkgcnVsZWQgb3V0IGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIHF1aWNrbHksIGRlc3BpdGUgdGhlaXIgQVBJIGVudHJ5IHBvaW50IHN0YXR1cy4gIGBzaG1lbV9nZXRfZm9saW9gIGlzIGEgaG90IHBhdGg7IGl0J3MgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSB3aGljaCBjb3VsZCBza2V3IHRoZSByZXN1bHRzLCB3aGljaCBpcyB1bmRlc2lyYWJsZS4gV2Ugd2FudCBhIG1vcmUgdGFyZ2V0ZWQgdGVzdC5cblxuVGhlbiwgSSBsb29rZWQgYXQgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGJ1dCBpdCdzIHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgZnVuY3Rpb25zLCBidXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgb25seSBhIHByb2JsZW0gaWYgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIE5PVCBpbmxpbmVkLCB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBhbmQgKmNhbiogYmUgdXNlZC4gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIHN0YXRpYywgYnV0IGlzIGFzc2lnbmVkIHRvIGBzaG1lbV9vcHMuZnJlZV9jYWNoZWRfb2JqZWN0c2AsIHNvIGl04oCZcyBsaWtlbHkgbm90IGlubGluZWQgYmVjYXVzZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWFrZXMgaXQgcHJvbWlzaW5nLiBBbmQgeWVzLCBpdCBsb29rcyBsaWtlIHRoZSBtb2RpZmllZCBsb2dpYydzIGVudHJ5IHBvaW50IGlzIGV4YWN0bHkgaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQncyBhIHN0cm9uZyBjb250ZW5kZXIuIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuXG5cbkkgcmV2aWV3ZWQgdGhlIG90aGVyIGZ1bmN0aW9ucywgYnV0IGZvdW5kIHRoYXQgYHNobWVtX2V2aWN0X2lub2RlYCwgYW5kIGBzaG1lbV9maWxsX3N1cGVyYCBhcmUgYWxzbyBzdGF0aWMsIGJ1dCBjYWxsZWQgaW5kaXJlY3RseSB2aWEgZnVuY3Rpb24gcG9pbnRlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBTbywgdGhlc2UgYXJlIGFsc28gbm90IGlubGluZWQuXG5cblRoZSBiZXN0IGZvY3VzIGZ1bmN0aW9ucywgSSd2ZSBjb25jbHVkZWQsIGFyZSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIFRoZXkncmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgc2hyaW5rZXIgbG9naWMgbW9kaWZpY2F0aW9ucy5cblxuRmluYWxseSwgSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgc2htZW1fZ2V0X2ZvbGlvYCBhcyBpdCBpcyBhbiBlbnRyeSBwb2ludCwgYW5kIHRoZSBhbGxvY2F0aW9uIHBhdGggaW50ZXJhY3RzIHdpdGggdGhlIHNocmlua2xpc3Q6XG5gYGBjXG5cdGlmIChhbGxvY2VkIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcblx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG5cdFx0Lypcblx0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG5cdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cblx0XHQgKi9cblx0XHRzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApO1xuXHR9XG5gYGBcbkhvd2V2ZXIsIHRoZSBhbGxvY2F0aW9uIG9mIGZvbGlvcyB0byB0aGUgc2hyaW5rbGlzdCBvbmx5IG9jY3VycyBmb3IgaHVnZSBmb2xpb3Mgb24gdG1wZnMsIHNvIGl0J3Mgbm90IGEgZ2VuZXJhbCBob3QgcGF0aC4gVGhlIGZ1bmN0aW9uIGBzaG1lbV9nZXRfZm9saW9gIGl0c2VsZiwgaG93ZXZlciwgaXMgY2FsbGVkIG9uIEFMTCBwYWdlIGZhdWx0cy4gV2hpbGUgYHNobWVtX2dldF9mb2xpb2Agd291bGQgaGl0IHRoYXQgYWxsb2NhdGlvbiBwYXRoIGFuZCBiZSByZWxldmFudCwgaXQncyBhIHZlcnkgaG90IHBhdGgsIHNvIEknbGwgc3RpY2sgd2l0aCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAgZm9yIG5vdywgdG8gZW5zdXJlIHNwZWNpZmljaXR5LiBJJ2xsIGFsc28gaW5jbHVkZSBgc2htZW1fZXZpY3RfaW5vZGVgIGFzIGl0IGNhbGxzIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLiBJIGp1c3QgY2hlY2tlZCB0aGF0IEkgc3BlbGxlZCBhbGwgdGhlIGZ1bmN0aW9uIG5hbWVzIGNvcnJlY3RseS4uLiBZZXMsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBpdCBpcy5cblxuVGhlIHBhdGNoIGFsc28gc3BlY2lmaWVzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSB1c2VkLCBidXQgYENPTkZJR19TSE1FTWAgaXMgdXN1YWxseSBlbmFibGVkIHNvIG5vIG5lZWQgdG8gdmVyaWZ5IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA0NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MTguMTYxNzU5NTQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTM0MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjE4LjIwNzMwOTc3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ2NDc2MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsJ3MgaW5pdGlhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSXQncyB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFNITUVNYCBpcyBhIHByZXR0eSBzcGVjaWZpYyB0ZXJtIHRoYXQgc2hvdWxkIHlpZWxkIHJlbGV2YW50IHJlc3VsdHMgaWYgSSB1c2UgaXQgYXMgYSBzZWFyY2ggdGVybS4gTXkgYWltIGlzIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgaG93IHNoYXJlZCBtZW1vcnkgaXMgY29uZmlndXJlZCwgY29udHJvbGxlZCBhbmQgc3VwcG9ydGVkLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIHN5bWJvbHMgYXJlIHNvIHRoYXQgSSBjYW4gdGhlbiB0cmFjZSB0aGVpciBkZXBlbmRlbmN5IHRyZWVzLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBzZXR0aW5ncy4gTGV0J3Mgc2VlIHdoYXQgYGluaXQvS2NvbmZpZ2AgcmV2ZWFscy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk0NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjIyLjg1Mzc4ODY2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTQ4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkzMT1jb25maWcgRVZFTlRGRFxcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIFNITUVNXFxuaW5pdC9LY29uZmlnLTE5NDEtXFx0Ym9vbCBcXFwiVXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjIyLjkwMTIxMTg3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTIzOTk0ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNoYXJlZCBNZW1vcnkgSHVnZSBQYWdlIFNocmlua2VyIFBhdGNoKipcblxuT2theSwgc28gYFNITUVNYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYWNjb3JkaW5nIHRvIGBpbml0L0tjb25maWdgLCB3aGljaCBpcyBnb29kIG5ld3MuIEFuZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgYWxsIGJlaW5nIGVuYWJsZWQgdG9vLCB0aGluZ3MgYXJlIGxvb2tpbmcgcHJvbWlzaW5nLlxuXG5MZXQncyBkaXZlIGJhY2sgaW50byB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBtb3ZpbmcgdGhlIHNocmlua2VyIGZyb20gYSBnbG9iYWwgbGlzdCB0byBhIHBlci1tZW1jZyBgbGlzdF9scnVgLiBUaGUgd2F5IGl0IHVzZXMgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgaXMgY2hhbmdpbmcgdG8gdXNlIGBsaXN0X2xydV9zaHJpbmtfd2Fsa2AgYW5kIGBsaXN0X2xydV93YWxrYC4gVGhlcmUncyBhIHdob2xlIHN1aXRlIG9mIG5ldyBmdW5jdGlvbnMgYWRkZWQ6IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIHdoaWNoIGFyZSBhbGwgcGFydCBvZiB0aGF0IG5ldyBgbGlzdF9scnVgIGJhc2VkIHNocmlua2VyIGltcGxlbWVudGF0aW9uLlxuXG5JdCBhbHNvIGFwcGVhcnMgdGhhdCBgc2htZW1fc2JfaW5mb2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdGAgaW5zdGVhZCBvZiB0aGUgb2xkIGBzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua2xpc3RgLiBTaW1pbGFybHksIGBzaG1lbV9pbm9kZV9pbmZvYCBpcyBub3cgaW5jbHVkaW5nIGBzaHJpbmtsaXN0X21lbWNnYCBhbmQgYHNocmlua2xpc3RfbmlkYC5cblxuVGhlIGxvZ2ljICpsb29rcyogZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIHJlYWNoYWJsZS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2V2aWN0X2lub2RlYCwgYW5kIGBzaG1lbV9maWxsX3N1cGVyYC4gSGFuZyBvbiBhIHNlY29uZC4uLiBgc2htZW1fZXZpY3RfaW5vZGVgIGFuZCBgc2htZW1fZmlsbF9zdXBlcmAgYXJlIGFsc28gc3RhdGljLCBidXQgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLiBJbnRlcmVzdGluZy4gQXJlIHRoZXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zPyBZZXMsIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSBub24tc3RhdGljLiBCdXQsIEkgdGhpbmsgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBpbmNsdWRlIHdpbGwgYmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIHNpbmNlIHRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBtb2RpZmllZCBzaHJpbmtlciBsb2dpYy5cblxuTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzbid0IGRlZmluZWQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozMS4wMjUyMTA0MTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg2MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3VudXNlZF9odWdlX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTgxMz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtODI5LVxcbm1tL3NobWVtLmM6ODMwOnN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcXG5tbS9zaG1lbS5jLTgzMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5tbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL3NobWVtLmMtODM4LXtcXG5tbS9zaG1lbS5jOjgzOTpcXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiAqc2NhbiA9IGFyZztcXG5tbS9zaG1lbS5jLTg0MC1cXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcXG4tLVxcbm1tL3NobWVtLmM9OTMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbi0tXFxubW0vc2htZW0uYy05MzMte1xcbm1tL3NobWVtLmM6OTM0OlxcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47XFxubW0vc2htZW0uYy05MzUtXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tLVxcbm1tL3NobWVtLmMtMTAyMC1cXG5tbS9zaG1lbS5jOjEwMjE6c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbm1tL3NobWVtLmMtMTAyMi1cXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vc2htZW0uYz01NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTU0MjYtXFx0Lm5yX2NhY2hlZF9vYmplY3RzXFx0PSBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCxcXG5tbS9zaG1lbS5jOjU0Mjc6XFx0LmZyZWVfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX3NjYW4sXFxubW0vc2htZW0uYy01NDI4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozMS4wNzMwMDIxOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2Nzk3OTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEZWNvZGluZyB0aGUgQ29tcGlsYXRpb24gQ29udGV4dCoqXG5cbkhtbSwgc28gSSd2ZSBzcG90dGVkIGEgY3J1Y2lhbCBkZXRhaWwgaGVyZTogdGhhdCBgI2VuZGlmYCByaWdodCBhZnRlciB0aGUgYXNzaWdubWVudCB0byBgZnJlZV9jYWNoZWRfb2JqZWN0c2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiAgVGhlIGZhY3QgdGhhdCBpdCdzICphZnRlciogdGhlIGFzc2lnbm1lbnQgaXMgaW1wb3J0YW50LCBhcyBpdCBzdWdnZXN0cyB0aGUgZGVmaW5pdGlvbiBvciBhc3NpZ25tZW50IG1pZ2h0IG9ubHkgYmUgcHJlc2VudCB1bmRlciBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9ucy4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyBpbW1lZGlhdGVseSBwaXF1ZWQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gcGxheS4gTGV0IG1lIHNlZS4uLiBJIG5lZWQgdG8gY2hlY2sgcHJlY2lzZWx5IHdoaWNoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgc3Vycm91bmQgdGhlIGRlZmluaXRpb24gb2YgYHNobWVtX29wc2AsIGJlY2F1c2UgdGhhdCdzIHdoYXQgc2VlbXMgdG8gY29udHJvbCB3aGV0aGVyIGBmcmVlX2NhY2hlZF9vYmplY3RzYCBpcyBhc3NpZ25lZCB0byBhIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIuIFRoZSBgI2lmZGVmYHMgYXJlIHRoZSBrZXkuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgcmV2ZWFsIHRoZSBkaWZmZXJlbnQgYnVpbGQgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MzQuODQwOTg0NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTcwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MjU0PXN0YXRpYyB2b2lkIHNobWVtX2lub2RlX3VuYWNjdF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBwYWdlcylcXG4tLVxcbm1tL3NobWVtLmMtMjY2LVxcbm1tL3NobWVtLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHM7XFxubW0vc2htZW0uYy0yNjgtc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcztcXG4tLVxcbm1tL3NobWVtLmM9NTEyNT1zdGF0aWMgaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxubW0vc2htZW0uYy01MjEyLVxcdHNiLVxcdTAwM2VzX21hZ2ljID0gVE1QRlNfTUFHSUM7XFxubW0vc2htZW0uYzo1MjEzOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnNobWVtX29wcztcXG5tbS9zaG1lbS5jLTUyMTQtXFx0c2ItXFx1MDAzZXNfdGltZV9ncmFuID0gMTtcXG4tLVxcbm1tL3NobWVtLmM9NTQwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxubW0vc2htZW0uYy01NDEwLVxcbm1tL3NobWVtLmM6NTQxMTpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xcbm1tL3NobWVtLmMtNTQxMi1cXHQuYWxsb2NfaW5vZGVcXHQ9IHNobWVtX2FsbG9jX2lub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozNC44ODk1NjA4MTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzE2Mjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vc2htZW0uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGBtbS9zaG1lbS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU0MTEuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IHBvaW50IGluIHRoZSBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgYXJlYSB0byBiZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBwZXJoYXBzIHNvbWUgc29ydCBvZiBtZXRhZGF0YSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3Mg4oCTIGNvdWxkIGJlIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGJlaW5nIHVzZWQsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGNhY2hlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBJIGFudGljaXBhdGUgdGhlIGltbWVkaWF0ZSBjb250ZXh0IHdpbGwgcHJvdmlkZSB0aGUga2V5IGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDE6MzguNjA2NzI4NTMzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG41NDEyOlxcdFxcdC5hbGxvY19pbm9kZVxcdD0gc2htZW1fYWxsb2NfaW5vZGUsXFxuNTQxMzpcXHRcXHQuZnJlZV9pbm9kZVxcdD0gc2htZW1fZnJlZV9pbl9jb3JlX2lub2RlLFxcbjU0MTQ6XFx0XFx0LmRlc3Ryb3lfaW5vZGVcXHQ9IHNobWVtX2Rlc3Ryb3lfaW5vZGUsXFxuNTQxNTpcXHQjaWZkZWYgQ09ORklHX1RNUEZTXFxuNTQxNjpcXHRcXHQuc3RhdGZzXFx0XFx0PSBzaG1lbV9zdGF0ZnMsXFxuNTQxNzpcXHRcXHQuc2hvd19vcHRpb25zXFx0PSBzaG1lbV9zaG93X29wdGlvbnMsXFxuNTQxODpcXHQjZW5kaWZcXG41NDE5OlxcdCNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG41NDIwOlxcdFxcdC5nZXRfZHF1b3RzXFx0PSBzaG1lbV9nZXRfZHF1b3RzLFxcbjU0MjE6XFx0I2VuZGlmXFxuNTQyMjpcXHRcXHQuZXZpY3RfaW5vZGVcXHQ9IHNobWVtX2V2aWN0X2lub2RlLFxcbjU0MjM6XFx0XFx0LmRyb3BfaW5vZGVcXHQ9IGlub2RlX2p1c3RfZHJvcCxcXG41NDI0OlxcdFxcdC5wdXRfc3VwZXJcXHQ9IHNobWVtX3B1dF9zdXBlcixcXG41NDI1OlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG41NDI2OlxcdFxcdC5ucl9jYWNoZWRfb2JqZWN0c1xcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXFxuNTQyNzpcXHRcXHQuZnJlZV9jYWNoZWRfb2JqZWN0c1xcdD0gc2htZW1fdW51c2VkX2h1Z2Vfc2NhbixcXG41NDI4OlxcdCNlbmRpZlxcbjU0Mjk6XFx0fTtcXG41NDMwOlxcdFxcbjU0MzE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHMgPSB7XFxuNTQzMjpcXHRcXHQuZmF1bHRcXHRcXHQ9IHNobWVtX2ZhdWx0LFxcbjU0MzM6XFx0XFx0Lm1hcF9wYWdlc1xcdD0gZmlsZW1hcF9tYXBfcGFnZXMsXFxuNTQzNDpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG41NDM1OlxcdFxcdC5zZXRfcG9saWN5ICAgICA9IHNobWVtX3NldF9wb2xpY3ksXFxuNTQzNjpcXHRcXHQuZ2V0X3BvbGljeSAgICAgPSBzaG1lbV9nZXRfcG9saWN5LFxcbjU0Mzc6XFx0I2VuZGlmXFxuNTQzODpcXHQjaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXFxuNTQzOTpcXHRcXHQudWZmZF9vcHNcXHQ9IFxcdTAwMjZzaG1lbV91ZmZkX29wcyxcXG41NDQwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowMTozOC42MDY5NTE2OTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MDg4MTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVucGFja2luZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgIGFuZCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAuLi4gSSBzZWUgdGhleSdyZSBvbmx5ICphY3R1YWxseSogYXNzaWduZWQgYSB2YWx1ZSB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFzIGV4cGVjdGVkLiBUaGV5J3JlIHBhcnQgb2YgdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZSBtYWNoaW5lcnksIHNvIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGFyZSB0aGV5IGV2ZW4gKmRlZmluZWQqIHdoZW4gVEhQIGlzICpkaXNhYmxlZCo/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgc29tZWhvdyBwb2xsdXRpbmcgdGhlIG5hbWVzcGFjZSB3aGVuIHRoZXkgc2hvdWxkbid0IGJlLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYCNpZmRlZmAgY29uZGl0aW9ucyBhcm91bmQgdGhlaXIgZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGJlaGF2aW5nIGFzIGl0IHNob3VsZCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIExldCdzIHNlZS4uLiBhIHF1aWNrIGNoZWNrIHNob3VsZCBzZXR0bGUgaXQuIEdvdHRhIGJlIGNhcmVmdWwgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjQyLjQ5NzgzNjQ5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2htZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDMwOlxcdH1cXG4xMDMxOlxcdFxcbjEwMzI6XFx0c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4xMDMzOlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuMTAzNDpcXHR7XFxuMTAzNTpcXHRcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xcbjEwMzY6XFx0XFxuMTAzNzpcXHRcXHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjKTtcXG4xMDM4OlxcdH1cXG4xMDM5OlxcdCNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4xMDQwOlxcdFxcbjEwNDE6XFx0I2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4xMDQ0OlxcdFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwKVxcbjEwNDU6XFx0e1xcbjEwNDY6XFx0fVxcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4xMDQ5OlxcdHtcXG4xMDUwOlxcdH1cXG4xMDUxOlxcdFxcbjEwNTI6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuMTA1MzpcXHRcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuMTA1NDpcXHR7XFxuMTA1NTpcXHRcXHRyZXR1cm4gMDtcXG4xMDU2OlxcdH1cXG4xMDU3OlxcdFxcbjEwNTg6XFx0c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuMTA1OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjAxOjQyLjQ5ODEwNDE1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA0OTU4NDU5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0J3MgYmVjb21lIGNsZWFyOiBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqZGlzYWJsZWQqLCB0aGVzZSBlbGVtZW50cywgd2hhdGV2ZXIgdGhleSBhcmUsIGFyZW4ndCBldmVuIGRlZmluZWQuIFRoYXQgbWVhbnMgdGhlaXIgdmVyeSBleGlzdGVuY2UgaGluZ2VzIG9uIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGJlaW5nIGVuYWJsZWQuIE5vIGFtYmlndWl0eSB0aGVyZS4gSXQgZGVmaW5pdGl2ZWx5IGVzdGFibGlzaGVzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYSBtYW5kYXRvcnkgcHJlcmVxdWlzaXRlLlxuXG5Ob3csIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgQ09ORklHX01FTUNHYCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZXBhZ2UgY29uZmlndXJhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEknbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtbS9zaG1lbS5jYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MDk6MjIuOTkzOTUzNzM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc0MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnO1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcXG4gNzQzOlxcdFxcbiA3NDQ6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA3NDU6XFx0fVxcbiA3NDY6XFx0XFxuIDc0NzpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDc0ODpcXHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbiA3NDk6XFx0c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDc1MDpcXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbiA3NTE6XFx0e1xcbiA3NTI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiA3NTM6XFx0XFx0aW50IHJldDtcXG4gNzU0OlxcdFxcbiA3NTU6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gNzU2OlxcdFxcdGlmICghbWVtY2cpXFxuIDc1NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzU4OlxcdFxcbiA3NTk6XFx0XFx0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIGdmcCk7XFxuIDc2MDpcXHRcXHRpZiAocmV0KSB7XFxuIDc2MTpcXHRcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDc2MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiA3NjM6XFx0XFx0fVxcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIDc2NjpcXHR9XFxuIDc2NzpcXHQjZWxzZVxcbiA3Njg6XFx0c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gNzY5OlxcdHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODowOToyMi45OTQzMDgwNTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MzYxNDY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBmb3IgVGVzdGluZyBNZW1jZy1TcGVjaWZpYyBTaHJpbmtlciBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgbmV3IHNocmlua2VyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb24gYSBwZXItbWVtY2cgYmFzaXMuIFRoYXQgbWVhbnMgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LCBiZWNhdXNlLCBpZiBpdCdzIGRpc2FibGVkLCB0aGUgYWxsb2NhdGlvbiB3aWxsIHJldHVybiBOVUxMIGFuZCB0aGUgY29kZSB3aWxsIGZhbGwgYmFjayB0byBhIGdsb2JhbCBvcGVyYXRpb24uICBXZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHZhbGlkYXRlIHRoZSBwZXItbWVtY2cgYmVoYXZpb3IgYXQgYWxsIHdpdGhvdXQgYENPTkZJR19NRU1DR2AgZW5hYmxlZC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgaWYgd2UgbmVlZCBhbnl0aGluZyAqZWxzZSouIEknbSB0aGlua2luZyBhYm91dCBgQ09ORklHX1RNUEZTYCwgYnV0IHRoYXQncyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBDT05GSUdfU0hNRU1gIGlzIHJlcXVpcmVkLiBJIGtub3cgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIGRlZmluZWQgaW4gYG1tL3NobWVtLmNgLlxuXG5BaGEhIE5vdyB0aGUgcXVlc3Rpb24gaXM6IGlzIGBtbS9zaG1lbS5jYCBldmVuICpjb21waWxlZCogaWYgYENPTkZJR19TSE1FTWAgaXMgZGlzYWJsZWQ/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBtbS9zaG1lbS5jYCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQuIElmIGl0J3Mgbm90IGNvbXBpbGVkIHdpdGhvdXQgYENPTkZJR19TSE1FTWAsIHRoZW4gdGhhdCdzIGFub3RoZXIgcHJlcmVxdWlzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ4NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA5OjI4LjEzNzkyNTkyOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZT0xNDY9b2JqLSQoQ09ORklHX0VYRUNNRU0pICs9IGV4ZWNtZW0ub1xcbm1tL01ha2VmaWxlOjE0NzpvYmotJChDT05GSUdfVE1QRlNfUVVPVEEpICs9IHNobWVtX3F1b3RhLm9cXG5tbS9NYWtlZmlsZS0xNDgtb2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgKz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjA5OjI4LjE4NjQ3NDIxOVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc0MDg4MzA1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYHNobWVtLm9gKipcblxuT2theSwgc28gYHNobWVtLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBjb21waWxlZCwgZGVjbGFyZWQgYXMgYG9iai15YC4gVGhhdCdzIHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLiBCdXQgaG9sZCBvbiwgc29tZXRoaW5nIHNlZW1zIG9mZi4gRXZlbiB3aGVuIGBDT05GSUdfU0hNRU1gIGlzICpkaXNhYmxlZCosIEknbSBzZWVpbmcgYG1tL3NobWVtLmNgIHN0aWxsIGJlaW5nIGNvbXBpbGVkLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUgYW5kIEkgbmVlZCB0byB2ZXJpZnkgd2h5LlxuXG5UaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYG1tL3NobWVtLmNgLiBJIG5lZWQgdG8gc2VhcmNoIHRoaXMgZmlsZSBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgcmVsYXRlZCB0byBgQ09ORklHX1NITUVNYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgc29tZSBvdGhlciBtZWNoYW5pc20gdG8gZXhwbGFpbiB3aHkgdGhlIHNobWVtIGZpbGUgaXMgYmVpbmcgaW5jbHVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTc5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6MTUuNTk1MzA3ODY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMwNzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbm1tL3NobWVtLmMtNDctXFxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vc2htZW0uYy00OS0vKlxcbi0tXFxubW0vc2htZW0uYz01ODk2PV9fc2V0dXAoXFxcInRocF9zaG1lbT1cXFwiLCBzZXR1cF90aHBfc2htZW0pO1xcbi0tXFxubW0vc2htZW0uYy01ODk5LVxcbm1tL3NobWVtLmM6NTkwMDojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXFxubW0vc2htZW0uYy01OTAxLVxcbi0tXFxubW0vc2htZW0uYz01OTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTU5NzYtXFxubW0vc2htZW0uYzo1OTc3OiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU5NzgtXFxuLS1cXG5tbS9zaG1lbS5jPTYxMzE9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNjEzMy17XFxubW0vc2htZW0uYzo2MTM0OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTYxMzUtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjE1LjY0MzYyMTA1NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAwOTgyNjk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVE1QRlMvU0hNRU0gU2hyaW5rZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYENPTkZJR19TSE1FTWAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVsbCB0bXBmcyBpbXBsZW1lbnRhdGlvbiDigJMgYSB0aW55IHNobWVtIGltcGxlbWVudGF0aW9uIGdldHMgdXNlZCBvdGhlcndpc2UuIFRoYXQncyBhIGdpdmVuLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCBmb2N1cyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuXG5cbkxldCdzIHNlZSwgd2UndmUgZ290IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgU0hNRU1gIGFzIHRoZSByZWxldmFudCBjb25maWdzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIFN5emthbGxlciB3aWxsIGxpa2VseSBoYW5kbGUgZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU2AgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCBnaXZlbiB0aGUgYG1tL0tjb25maWdgIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4uLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX2dldF9mb2xpb2AsIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgLiBCdXQsIHNpbmNlIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBgc2htZW1fcmVhZF9mb2xpb19nZnBgIGFyZSB1bmNoYW5nZWQsIHRoZSByZWFsIGltcGFjdCBzZWVtcyB0byBiZSBvbiBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAuIEkga25vdyB0aGlzIGlzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgd2FudCB0byBhdm9pZC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIg4oCTIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBzaHJpbmtlciBsb2dpYyBhcmUgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBhIHZhbGlkIHN5bWJvbCBpbiBgbW0vc2htZW0uY2AuIENydWNpYWxseSwgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGlzIG1ha2VzIGl0IGFuIGlkZWFsIHRhcmdldC4gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCBpcyBhbHNvIHJlbGV2YW50LlxuXG5Mb29raW5nIGZ1cnRoZXIsIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGNhbGxlZCBieSB0aGVzZSwgc28gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gIGlzIHRoZSB3YXkgdG8gZ28uXG5cbk5leHQsIEkgbm90ZWQgdGhhdCBgc2htZW1fZXZpY3RfaW5vZGVgIGlzIG1vZGlmaWVkIHRvIGNhbGwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGFuZCBpdCdzIGFsc28gcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0aHJvdWdoIGBzaG1lbV9vcHMuZXZpY3RfaW5vZGVgLiBUaGF0IG1ha2VzIGl0IGFub3RoZXIgZXhjZWxsZW50IGZvY3VzIGZ1bmN0aW9uIGFzIGl0IGlzIG5vdCBpbmxpbmVkLlxuXG5GaW5hbGx5LCBgc2htZW1fZmlsbF9zdXBlcmAgaXMgbW9kaWZpZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYGxpc3RfbHJ1YCwgYW5kLCBsaWtlIGBzaG1lbV9ldmljdF9pbm9kZWAsIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIEknbGwgYWRkIHRoaXMgdG8gdGhlIGxpc3QuXG5cblNvLCBoZXJlJ3MgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOlxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYFxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGBcbiogICBgc2htZW1fZXZpY3RfaW5vZGVgXG4qICAgYHNobWVtX2ZpbGxfc3VwZXJgXG5cbkFuZCB0aGUgY29uZmlndXJhdGlvbnM6XG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBNRU1DR2BcbiogICBgU0hNRU1gXG5cbkkndmUgdmVyaWZpZWQgdGhlIGRlcGVuZGVuY2llczogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBuZWVkcyBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVGAsIHdoaWNoIGlzIGZpbmUsIHN5emthbGxlciB3aWxsIGVuYWJsZSB0aGF0IGlmIGl0IGNhbi4gYE1FTUNHYCBhbmQgYFNITUVNYCBoYXZlIG5vIHNwZWNpYWwgZGVwZW5kZW5jaWVzLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBpbnRlZ3JhdGluZyBhIHBlci1tZW1jZyBgbGlzdF9scnVgIGludG8gdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIuIEl0IGFmZmVjdHMgc2hyaW5rZXIgZW50cnkgcG9pbnRzLCBpbm9kZSBldmljdGlvbiwgYW5kIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gZnV6eiwgZXNwZWNpYWxseSB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEknbGwgbWFrZSBzdXJlIHN5emthbGxlciB0YXJnZXRzIHRoZXNlIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxMTozMC42NTM0NTA0ODNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTczOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg1MD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU1LVxcbm1tL0tjb25maWc6ODU2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg1Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjMwLjcwMjYzMjUzM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMzMjc5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBUTVBGUyBhbmQgSHVnZSBQYWdlcyBmb3IgT3B0aW1hbCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgY29uc2Npb3VzIGRlY2lzaW9uIHBvaW50IGhlcmUuIEl0J3MgYSBjaG9pY2U6IGRvIHdlIGxldmVyYWdlIGh1Z2UgcGFnZXMgZm9yIG91ciB0ZW1wb3JhcnkgZmlsZSBzeXN0ZW1zPyBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQganVtcHMgdG8gbWluZCBpcywgKmNhbiogd2UsIGFuZCBpZiBzbywgKmhvdyogZG8gd2UgZG8gaXQ/IEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYHRtcGZzYCBhbmQgaHVnZSBwYWdlcy4gVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBjb3VsZCBiZSBzaWduaWZpY2FudC5cblxuTm93LCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBtb3N0IHJlbGV2YW50IGhlcmU/IERvIHdlIG5lZWQgdG8gZm9yY2UgdGhpcyBiZWhhdmlvdXIgYWNyb3NzIHRoZSBib2FyZCwgb3IgY2FuIHdlIGRvIHRoaXMgbW9yZSBzdXJnaWNhbGx5PyBMZXQncyBxdWlja2x5IHJlZnJlc2guIERvIHdlIGdvIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU2AgdG8gZ3VhcmFudGVlIHRoYXQgdG1wZnMgZ2V0cyB0byB1c2UgaHVnZSBwYWdlcywgb3IgZG8gd2UgdXNlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNgIHRvIGZvY3VzIG9uIHRoZSBzaGFyZWQgbWVtb3J5IHNpZGUgb2YgdGhpbmdzPyBCb3RoIG9wdGlvbnMgaGF2ZSB0aGVpciBpbXBsaWNhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgd29ya2xvYWQgYW5kIGhvdyBgdG1wZnNgIGlzIHVzZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gTmVlZCB0byBjb25zaWRlciB0aGUgc3lzdGVtJ3MgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjM1LjIzNTkxNTYzNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NzUyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Nzk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5OC1cXG5tbS9LY29uZmlnOjg5OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjExOjM1LjI4NjM5ODc0NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQ3NjQxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipNeSBBcHByb2FjaCB0byBTeXprYWxsZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBTeXprYWxsZXIncyBwcm9iYWJseSBnb2luZyB0byBlbmFibGUgdGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgc29vbiwgd2hpY2ggaXMgZmluZSwgYnV0IEkgdGhpbmsgSSdsbCBqdXN0IGdvIGFoZWFkIGFuZCBleHBsaWNpdGx5IHNwZWNpZnkgd2hhdCBJIG5lZWQgZm9yIHRoaXMgcGFydGljdWxhciByb3VuZCBvZiB0ZXN0aW5nLiBJdCdsbCBnaXZlIG1lIG1vcmUgY29udHJvbCBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCB0aG9zZSBkZWZhdWx0cywgZXZlbiBpZiBpdCBpcyBhIGJpdCBtb3JlIHdvcmsgdXBmcm9udC5cblxuVGhlcmVmb3JlLCBJJ2xsIGZvY3VzIG9uIHNldHRpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYmVjYXVzZSB0aGF0J3MgY3J1Y2lhbCBmb3IgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmcgSSBoYXZlIGluIG1pbmQuIEknbGwgYWxzbyBicmluZyBpbiBgTUVNQ0dgIGZvciBpc29sYXRpbmcgdGhlIHJlc291cmNlcyBiZWluZyB1c2VkLCBhbmQgYFNITUVNYCB3aGljaCBJJ20gcHJldHR5IHN1cmUgSSdsbCBuZWVkIGZvciB0aGlzIHBhcnRpY3VsYXIgdGVzdCBjYXNlLlxuXG5PbmNlIHRob3NlIGFyZSBzZXQgdXAsIEknbGwgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEhvcGVmdWxseSwgdGhhdCdsbCBkbyB3aGF0IEkgZXhwZWN0IGFuZCBnZXQgdGhlIHJlc3VsdHMgdHJhY2tpbmcgaW4gdGhlIHdheSB0aGF0IEkgdGhpbmsgaXMgYmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMjIsIk91dHB1dFRva2VucyI6MTk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTE6NDAuNTM0MDQ0MDA4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4NjMxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fZXZpY3RfaW5vZGVcIixcbiAgICBcInNobWVtX2ZpbGxfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG1wZnMvc2htZW0gdW51c2VkIGh1Z2UgcGFnZSBzaHJpbmtlciB0byB1c2UgYSBwZXItbWVtY2cgbGlzdF9scnUgaW5zdGVhZCBvZiBhIGdsb2JhbCBsaXN0LiBUaGlzIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgc2hyaW5rZXIgZW50cnkgcG9pbnRzIChzaG1lbV91bnVzZWRfaHVnZV9zY2FuLCBzaG1lbV91bnVzZWRfaHVnZV9jb3VudCksIGlub2RlIGV2aWN0aW9uIChzaG1lbV9ldmljdF9pbm9kZSksIGFuZCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIChzaG1lbV9maWxsX3N1cGVyKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB3aGVuIHRtcGZzIGlzIHVzZWQgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGFuZCBtZW1vcnkgY2dyb3Vwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfY291bnRcIixcbiAgICBcInNobWVtX2V2aWN0X2lub2RlXCIsXG4gICAgXCJzaG1lbV9maWxsX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRtcGZzL3NobWVtIHVudXNlZCBodWdlIHBhZ2Ugc2hyaW5rZXIgdG8gdXNlIGEgcGVyLW1lbWNnIGxpc3RfbHJ1IGluc3RlYWQgb2YgYSBnbG9iYWwgbGlzdC4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHNocmlua2VyIGVudHJ5IHBvaW50cyAoc2htZW1fdW51c2VkX2h1Z2Vfc2Nhbiwgc2htZW1fdW51c2VkX2h1Z2VfY291bnQpLCBpbm9kZSBldmljdGlvbiAoc2htZW1fZXZpY3RfaW5vZGUpLCBhbmQgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiAoc2htZW1fZmlsbF9zdXBlcikuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgd2hlbiB0bXBmcyBpcyB1c2VkIHdpdGggdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhbmQgbWVtb3J5IGNncm91cHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowdqqcg[1] Phase: Succeeded StartedAt: 2026-08-03 18:11:51 +0000 UTC FinishedAt: 2026-08-03 18:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 18:11:51 +0000 UTC FinishedAt: 2026-08-03 18:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2] Phase: Succeeded StartedAt: 2026-08-03 18:11:51 +0000 UTC FinishedAt: 2026-08-03 19:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-03 18:11:51 +0000 UTC FinishedAt: 2026-08-03 19:01:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 18:11:51 +0000 UTC FinishedAt: 2026-08-03 18:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 18:11:51 +0000 UTC FinishedAt: 2026-08-03 18:11:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowdqqcg/series-workflowdqqcg-convert-artifact-285759025/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 18:12:01 +0000 UTC FinishedAt: 2026-08-03 18:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 18:12:01 +0000 UTC FinishedAt: 2026-08-03 18:29:32 +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:*b76eab1d-cbb0-446f-b7fb-5e6b2cd5d59e,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-workflowdqqcg/series-workflowdqqcg-convert-artifact-285759025/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": "7c1ffc14-a5fe-4efa-a312-0f5d6e1fac32", "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-workflowdqqcg/series-workflowdqqcg-build-action-553448543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 18:12:01 +0000 UTC FinishedAt: 2026-08-03 18:29:22 +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:*b76eab1d-cbb0-446f-b7fb-5e6b2cd5d59e,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-workflowdqqcg/series-workflowdqqcg-convert-artifact-285759025/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": "7c1ffc14-a5fe-4efa-a312-0f5d6e1fac32", "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-workflowdqqcg/series-workflowdqqcg-build-action-553448543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 18:29:32 +0000 UTC FinishedAt: 2026-08-03 18:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 18:29:32 +0000 UTC FinishedAt: 2026-08-03 18:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 18:29:32 +0000 UTC FinishedAt: 2026-08-03 18:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 18:29:32 +0000 UTC FinishedAt: 2026-08-03 18:29:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowdqqcg/series-workflowdqqcg-convert-artifact-3181288836/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 18:29:42 +0000 UTC FinishedAt: 2026-08-03 19:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 18:29:42 +0000 UTC FinishedAt: 2026-08-03 19:00:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c1ffc14-a5fe-4efa-a312-0f5d6e1fac32,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-workflowdqqcg/series-workflowdqqcg-build-action-553448543/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": false },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-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-08-03 19:00:58 +0000 UTC FinishedAt: 2026-08-03 19:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdqqcg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_scan","shmem_unused_huge_count","shmem_evict_inode","shmem_fill_super"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","SHMEM"],"series_id":"35bdd49d-8ce0-4089-86da-2142dbfc5ba1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-08-03 19:00:58 +0000 UTC FinishedAt: 2026-08-03 19:01:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}