Name: series-workflowhmcp8 Phase: Succeeded StartedAt: 2026-08-09 04:44:25 +0000 UTC FinishedAt: 2026-08-09 09:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[0] Phase: Succeeded StartedAt: 2026-08-09 04:44:25 +0000 UTC FinishedAt: 2026-08-09 05:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 04:44:25 +0000 UTC FinishedAt: 2026-08-09 05:29:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "series_id": "9cc03985-fbf7-4975-86f2-8766df7c689a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2smIzM5O3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB0byBjb25zaWRlciBjcHVzZXQgbWVtcyBhbGxvd2VkIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBmcm96ZW4gZm9saW9zIGZyb20gQ01BLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmNzdkMWU4ZjcyOTRkNDgxYzZmMmQ3MmU4Y2MzNjBiYWRlNWVkZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDA1OjI2OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zYWU5MzQ3MDc4ZTliIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1c2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC0zMCwxMSAmIzQzOzMxLDIzIEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4mIzQzO1x0bm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2s7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4mIzQzO1x0aWYgKCFub2RlbWFzaykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4mIzQzO1x0XHRcdGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiYjNDM7XHRcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xuJiM0MztcbiYjNDM7XHRcdG5vZGVtYXNrID0gXHUwMDI2bG9jYWxfbm9kZV9tYXNrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4gXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Y3N2QxZThmNzI5NGQ0ODFjNmYyZDcyZThjYzM2MGJhZGU1ZWRlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMDU6MjY6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuYwppbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zYWU5MzQ3MDc4ZTliIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2NtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1faW5saW5lLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwpAQCAtMzAsMTEgJiM0MzszMSwyMyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWludCBub2RlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwomIzQzOwlub2RlbWFza190IGxvY2FsX25vZGVfbWFzazsKIAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaHVnZXRsYl9jbWFbbmlkXSkKJiM0MzsJaWYgKCFub2RlbWFzaykgewomIzQzOwkJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKJiM0MzsKJiM0MzsJCWRvIHsKJiM0MzsJCQljcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpOwomIzQzOwkJCWxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDsKJiM0MzsJCX0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpOwomIzQzOwomIzQzOwkJbm9kZW1hc2sgPSAmYW1wO2xvY2FsX25vZGVfbWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vaHVnZXRsYl9jbWEuY2AsIHNwZWNpZmljYWxseSB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBhIG5ldyBhZGRpdGlvbiBvZiBjcHVzZXQgbm9kZW1hc2sgY2hlY2tpbmcgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgZnJvemVuIGZvbGlvIGZyb20gQ01BIGZvciBodWdldGxiLiBUaGF0JiMzOTtzIGEgc2Vuc2libGUgYWRkaXRpb24sIGFuZCBzb21ldGhpbmcgSSYjMzk7dmUgY29uc2lkZXJlZCBpbXBsZW1lbnRpbmcgbXlzZWxmIGluIHRoZSBwYXN0LCBzbyBJJiMzOTttIGludGVyZXN0ZWQgdG8gc2VlIHRoZSBhcHByb2FjaC4KCkVzc2VudGlhbGx5LCB0aGUgbG9naWMgc2VlbXMgdG8gYmU6IHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBpdCYjMzk7cyBkZWZhdWx0aW5nIHRvIHVzaW5nIHRoZSBjdXJyZW50IGNwdXNldCBtZW1zIGFsbG93ZWQuIFRoYXQmIzM5O3MgYSBnb29kIGZhaWwtc2FmZSwgcHJldmVudGluZyBhbGxvY2F0aW9uIGZyb20gbm9kZXMgdGhhdCBhcmVuJiMzOTt0IGFsbG93ZWQgYnkgdGhlIGN1cnJlbnQgY3B1c2V0LiBUaGVuLCBjcnVjaWFsbHksIGl0IGNoZWNrcyBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIGJlZm9yZSB0cnlpbmcgdG8gYWN0dWFsbHkgYWxsb2NhdGUgYW55dGhpbmcgZnJvbSBgaHVnZXRsYl9jbWFbbmlkXWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG5vZGVtYXNrIGVuZm9yY2VtZW50LiBTbywgdG8gYmUgY2xlYXIsIGl0IGlzIHZlcmlmeWluZyBhIG5vZGUgaXMgYWxsb3dlZCBiZWZvcmUgZXZlbiB0cnlpbmcgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IG5vZGUmIzM5O3MgQ01BLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IGNsZWFubHkgaXQmIzM5O3MgaW50ZWdyYXRlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBub2RlbWFzayBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggTlVNQSBzZXR1cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMzY0LVxubW0vaHVnZXRsYi5jOjEzNjU6XHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xubW0vaHVnZXRsYi5jLTEzNjYtXHRpZiAoZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yMj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNy1cbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmg9Nj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5oLTgtXHRcdFx0XHQgICAgICBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzayk7XG4tLVxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5oLTE5LVxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXHRcdGdmcF90IGdmcF9tYXNrLFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlRyYWNpbmcgYSBDcml0aWNhbCBQYXRoIGluIEh1Z2VUTEIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsLi4uIGFoIHllcywgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGlzIHJpZ2h0IHRoZXJlIGluIGBtbS9odWdldGxiLmNgLiBUaGlzIGlzbiYjMzk7dCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uLCB0aGlzIGlzICpjb3JlKiBrZXJuZWwgbG9naWMsIHJpZ2h0IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbi4gSXQgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmcm9tIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSByZXNlcnZlZCBwYWdlcy4gRGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYG1tL2h1Z2V0bGJfY21hLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBhcHByb3ByaWF0ZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gQXJlIHRoZSBuZWNlc3NhcnkgQ01BIG9wdGlvbnMgY29tcGlsZWQgaW4/IEFyZSB0aGUgSHVnZVRMQiBzZXR0aW5ncyBjb3JyZWN0PyBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxhY2UgZm9yIHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBwYXRoIHRvIGZ1bmN0aW9uIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjAyLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1MC1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNC1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDUtXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI3ODp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cbi0tXG5tbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYzoxOTpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmMtMjAtc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNDI9ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xNDMtXG5tbS9odWdldGxiX2NtYS5jOjE0NDpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTQ1LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTQ2Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0Ny19XG5tbS9odWdldGxiX2NtYS5jLTE0OC1cbm1tL2h1Z2V0bGJfY21hLmM6MTQ5OmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE1MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTUxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTU2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTE2NC1cbm1tL2h1Z2V0bGJfY21hLmM6MTY1Olx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG5tbS9odWdldGxiX2NtYS5jLTE2Ni1cdGlmICghb3JkZXIpIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI2OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0yNzAte1xubW0vaHVnZXRsYl9jbWEuYzoyNzE6XHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjcyLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI3OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI4MS1cdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmM6MjgyOlx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG5tbS9odWdldGxiX2NtYS5jLTI4My19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yODU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI4OS1cbm1tL2h1Z2V0bGJfY21hLmM6MjkwOlx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjkxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTMwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGh1Z2V0bGJfY21hLmNgIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vaHVnZXRsYl9jbWEuY2AsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGlzIGZpbGUgb25seSBnZXRzIGJ1aWx0IHdoZW4gYm90aCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgYWN0aXZlIOKAkyBtYWtlcyBzZW5zZS4gVGhlIGtleSBtb2RpZmljYXRpb24gYXBwZWFycyB0byBiZSB3aXRoaW4gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gVGhpcyBjaGFuZ2UgbGV2ZXJhZ2VzIGNwdXNldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uczogYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgLCBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCwgYW5kIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpYC4gVGhlc2UgYXJlLCBvZiBjb3Vyc2UsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvY3B1c2V0LmhgLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYW5kIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUsIGlzIHdoZXRoZXIgdGhpcyBjcHVzZXQgZGVwZW5kZW5jeSBpcyAqc3RyaWN0bHkqIGEgYnVpbGQgcmVxdWlyZW1lbnQuIENhbiB0aGUgY29kZSBmdW5jdGlvbiBjb3JyZWN0bHkgaWYgYENPTkZJR19DUFVTRVRTYCBpcyAqbm90KiBlbmFibGVkLCBvciBpcyBpdCBhIGhhcmQgZGVwZW5kZW5jeT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHRoZSBydW50aW1lIGJlaGF2aW9yIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy4gSXMgaXQgYSBidWlsZC10aW1lIGNvbmRpdGlvbmFsLCBvciBhIHJ1bnRpbWUgcmVxdWlyZW1lbnQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMT1leHRlcm4gYm9vbCBsb2NrZGVwX2lzX2NwdXNldF9oZWxkKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyNzogKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjgtICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0xMzU9ZXh0ZXJuIHZvaWQgY3B1c2V0X3Jlc2V0X3NjaGVkX2RvbWFpbnModm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTM4OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGlzIHJlcXVpcmVkIHdoZW4gbWFraW5nIGRlY2lzaW9ucyBpbnZvbHZpbmdcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM5LSAqIG1lbXNfYWxsb3dlZCBzdWNoIGFzIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIG1lbXNfYWxsb3dlZCBjYW4gYmUgdXBkYXRlZCBpblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDE6ICogY2F1c2luZyBwcm9jZXNzIGZhaWx1cmUuIEEgcmV0cnkgbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGFuZFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDItICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkgcHJldmVudHMgdGhlc2UgYXJ0aWZpY2lhbCBmYWlsdXJlcy5cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQ1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1My0gKiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIG9wZXJhdGlvbiB0aGF0IHRvb2sgcGxhY2UgYWZ0ZXJcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTU0OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIG1heSBoYXZlIGZhaWxlZCBhcnRpZmljaWFsbHkgZHVlIHRvIGEgY29uY3VycmVudFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yODg9c3RhdGljIGlubGluZSB2b2lkIHNldF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCBub2RlbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5MS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjkyOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XG4tLVxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0xMDExLVx0XHRkbyB7XG5tbS9maWxlbWFwLmM6MTAxMjpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vZmlsZW1hcC5jLTEwMTMtXHRcdFx0biA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTtcbi0tXG5tbS9odWdldGxiLmM9MTI3NT1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0OlxubW0vaHVnZXRsYi5jOjEyOTE6XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYi5jLTEyOTItXHRmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBnZnBfem9uZShnZnBfbWFzayksIG5tYXNrKSB7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNDItXHRcdGRvIHtcbm1tL2h1Z2V0bGJfY21hLmM6NDM6XHRcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL2h1Z2V0bGJfY21hLmMtNDQtXHRcdFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTA2LVx0LyogdG8gcHJldmVudCBtaXNjb3VudCB1c2UgdHNrLVx1MDAzZW1lbXNfYWxsb3dlZF9zZXEgdG8gZGV0ZWN0IHJlYmluZCAqL1xubW0vbWVtcG9saWN5LmM6MjEwNzpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9tZW1wb2xpY3kuYy0yMTA4LVx0bm9kZSA9IGN1cnJlbnQtXHUwMDNlaWxfcHJldjtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTIzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vbWVtcG9saWN5LmMtMjEyOS1cdGRvIHtcbm1tL21lbXBvbGljeS5jOjIxMzA6XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9tZW1wb2xpY3kuYy0yMTMxLVx0XHRuaWQgPSBuZXh0X25vZGVfaW4oY3VycmVudC1cdTAwM2VpbF9wcmV2LCBwb2xpY3ktXHUwMDNlbm9kZXMpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI2MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjU1LVx0ZG8ge1xubW0vbWVtcG9saWN5LmM6MjY1NjpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTI2NTctXHRcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcdTAwMjZub2Rlcyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3MjU9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00NzY0LVx0Y29tcGFjdF9wcmlvcml0eSA9IERFRl9DT01QQUNUX1BSSU9SSVRZO1xubW0vcGFnZV9hbGxvYy5jOjQ3NjU6XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vcGFnZV9hbGxvYy5jLTQ3NjYtXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcbi0tXG5tbS9zaG93X21lbS5jPTExOT1zdGF0aWMgYm9vbCBzaG93X21lbV9ub2RlX3NraXAodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9zaG93X21lbS5jLTEyNS1cdCAqIG5vIG5vZGUgbWFzayAtIGFrYSBpbXBsaWNpdCBtZW1vcnkgbnVtYSBwb2xpY3kuIERvIG5vdCBib3RoZXIgd2l0aFxubW0vc2hvd19tZW0uYzoxMjY6XHQgKiB0aGUgc3luY2hyb25pemF0aW9uIC0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gLSBiZWNhdXNlIHdlIGRvIG5vdFxubW0vc2hvd19tZW0uYy0xMjctXHQgKiBoYXZlIHRvIGJlIHByZWNpc2UgaGVyZS5cbi0tXG5tbS9zbHViLmM9Mzg2Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9zbHViLmMtMzg5Ny1cdFx0Lypcbm1tL3NsdWIuYzozODk4Olx0XHQgKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFjY2Vzc2VzIGN1cnJlbnQtXHUwMDNlbWVtc19hbGxvd2VkX3NlcSxcbm1tL3NsdWIuYy0zODk5LVx0XHQgKiBhIHNlcWNvdW50X3NwaW5sb2NrX3QgdGhhdCBpcyBub3QgTk1JLXNhZmUuIERvIG5vdCBhY2Nlc3Ncbi0tXG5tbS9zbHViLmMtMzkwMy1cdFx0aWYgKGFsbG93X3NwaW4pXG5tbS9zbHViLmM6MzkwNDpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jLTM5MDUtXG4tLVxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTcyNDYtXHRkbyB7XG5tbS9zbHViLmM6NzI0NzpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL3NsdWIuYy03MjQ4LVx0XHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIENNQSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IGl0IGhhbmRsZXMgY3B1c2V0IG1lbXMuIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgpgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyB1c2VkIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBmcm96ZW4gZm9saW9zLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIGFjdGl2ZSBhbmQgcmVhY2hhYmxlLiBCYXNlZCBvbiB0aGUgZG9jdW1lbnRhdGlvbiwgaXQgaXMuIFRoZSBjYWxscyBjb21lIGZyb20gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGluIHR1cm4sIGlzIHJlYWNoZWQgdGhyb3VnaCBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgYW5kIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gLiBJIGtub3cgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggaHVnZXRsYmZzLiBTbyB5ZXMsIHRoaXMgaXMgYSByZWFsLCBsaXZlIGNvZGUgcGF0aC4KClRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfQ01BYCwgd2hpY2ggYXJlIGZhaXJseSBzdGFuZGFyZC4gQnV0IGhlcmXigJlzIHNvbWV0aGluZyB0byBub3RlOiBgQ09ORklHX0NQVVNFVFNgIGlzIGFsc28gbmVlZGVkIGZvciB0aGUgY3B1c2V0IGZlYXR1cmVzIHRvIGJlIGFjdGl2ZS4gVGhhdCBtZWFucyB0aGUgdXNlciBuZWVkcyB0byBoYXZlIGNwdXNldHMgZW5hYmxlZCBmb3IgdGhlIHBhdGNoIHRvIGRvIGFueXRoaW5nLiBFdmVuIGlmIGNwdXNldHMgYXJlIGRpc2FibGVkLCB0aGVyZSBhcmUgc3R1YnMgaW4gYGluY2x1ZGUvbGludXgvY3B1c2V0LmhgLiBMZXQgbWUgY2hlY2sgdGhhdCBpbmNsdWRlIGZpbGUgdG8gdmVyaWZ5IGV4YWN0bHkgaG93IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBkaXNhYmxlZCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtsbCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX21lbXNfYWxsb3dlZF9iZWdpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NwdXNldC5oPTIxPWV4dGVybiBib29sIGxvY2tkZXBfaXNfY3B1c2V0X2hlbGQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yNi0gKiBTdGF0aWMgYnJhbmNoIHJld3JpdGVzIGNhbiBoYXBwZW4gaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIGZvciBhIGdpdmVuXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjI3OiAqIGtleS4gSW4gY29kZSBwYXRocyB3aGVyZSB3ZSBuZWVkIHRvIGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFuZFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOC0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpIHRvIGdldCBhIGNvbnNpc3RlbnQgdmlldyBvZiBtZW1zX2FsbG93ZWQsIHdlIG5lZWRcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTEzNT1leHRlcm4gdm9pZCBjcHVzZXRfcmVzZXRfc2NoZWRfZG9tYWlucyh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTEzNy0vKlxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxMzg6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gaXMgcmVxdWlyZWQgd2hlbiBtYWtpbmcgZGVjaXNpb25zIGludm9sdmluZ1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzktICogbWVtc19hbGxvd2VkIHN1Y2ggYXMgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gbWVtc19hbGxvd2VkIGNhbiBiZSB1cGRhdGVkIGluXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0MC0gKiBwYXJhbGxlbCBhbmQgZGVwZW5kaW5nIG9uIHRoZSBuZXcgdmFsdWUgYW4gb3BlcmF0aW9uIGNhbiBmYWlsIHBvdGVudGlhbGx5XG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0MTogKiBjYXVzaW5nIHByb2Nlc3MgZmFpbHVyZS4gQSByZXRyeSBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gYW5kXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0Mi0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDMtICovXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0NDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDUte1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTUzLSAqIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgb3BlcmF0aW9uIHRoYXQgdG9vayBwbGFjZSBhZnRlclxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNTQ6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gbWF5IGhhdmUgZmFpbGVkIGFydGlmaWNpYWxseSBkdWUgdG8gYSBjb25jdXJyZW50XG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1NS0gKiB1cGRhdGUgb2YgbWVtc19hbGxvd2VkLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gaWZcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21lbXNfYWxsb3dlZChub2RlbWFza190IG5vZGVtYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjkxLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjkzLXtcbi0tXG5tbS9maWxlbWFwLmM9OTk5PXN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vZmlsZW1hcC5jLTEwMTEtXHRcdGRvIHtcbm1tL2ZpbGVtYXAuYzoxMDEyOlx0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9maWxlbWFwLmMtMTAxMy1cdFx0XHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xuLS1cbm1tL2h1Z2V0bGIuYz0xMjc1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTI5MC1yZXRyeV9jcHVzZXQ6XG5tbS9odWdldGxiLmM6MTI5MTpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9odWdldGxiLmMtMTI5Mi1cdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGdmcF96b25lKGdmcF9tYXNrKSwgbm1hc2spIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI4PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYl9jbWEuYy00Mi1cdFx0ZG8ge1xubW0vaHVnZXRsYl9jbWEuYzo0MzpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYl9jbWEuYy00NC1cdFx0XHRsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG4tLVxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxuLS1cbm1tL21lbXBvbGljeS5jLTIxMDYtXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXHUwMDNlbWVtc19hbGxvd2VkX3NlcSB0byBkZXRlY3QgcmViaW5kICovXG5tbS9tZW1wb2xpY3kuYzoyMTA3Olx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMDgtXHRub2RlID0gY3VycmVudC1cdTAwM2VpbF9wcmV2O1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMjM9c3RhdGljIHVuc2lnbmVkIGludCBpbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTI5LVx0ZG8ge1xubW0vbWVtcG9saWN5LmM6MjEzMDpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMzEtXHRcdG5pZCA9IG5leHRfbm9kZV9pbihjdXJyZW50LVx1MDAzZWlsX3ByZXYsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NTUtXHRkbyB7XG5tbS9tZW1wb2xpY3kuYzoyNjU2Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vbWVtcG9saWN5LmMtMjY1Ny1cdFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFx1MDAyNm5vZGVzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ3NjQtXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XG5tbS9wYWdlX2FsbG9jLmM6NDc2NTpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cdHpvbmVsaXN0X2l0ZXJfY29va2llID0gem9uZWxpc3RfaXRlcl9iZWdpbigpO1xuLS1cbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Nob3dfbWVtLmMtMTI1LVx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXG5tbS9zaG93X21lbS5jOjEyNjpcdCAqIHRoZSBzeW5jaHJvbml6YXRpb24gLSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiAtIGJlY2F1c2Ugd2UgZG8gbm90XG5tbS9zaG93X21lbS5jLTEyNy1cdCAqIGhhdmUgdG8gYmUgcHJlY2lzZSBoZXJlLlxuLS1cbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zODk3LVx0XHQvKlxubW0vc2x1Yi5jOjM4OTg6XHRcdCAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYWNjZXNzZXMgY3VycmVudC1cdTAwM2VtZW1zX2FsbG93ZWRfc2VxLFxubW0vc2x1Yi5jLTM4OTktXHRcdCAqIGEgc2VxY291bnRfc3BpbmxvY2tfdCB0aGF0IGlzIG5vdCBOTUktc2FmZS4gRG8gbm90IGFjY2Vzc1xuLS1cbm1tL3NsdWIuYy0zOTAzLVx0XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYzozOTA0Olx0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9zbHViLmMtMzkwNS1cbi0tXG5tbS9zbHViLmM9NzIzMT1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI0Ni1cdGRvIHtcbm1tL3NsdWIuYzo3MjQ3Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jLTcyNDgtXHRcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGFzIGEgcHJvbWlzaW5nIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyB0aGVyZSYjMzk7cyBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yIHRvIGJlIGV4cG9zZWQuIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYmFzZWQgb24gdGhlIGNvbnRleHQsIGFyZSBgSFVHRVRMQkZTYCwgYENNQWAsIGFuZCBgQ1BVU0VUU2AuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgZW5hYmxlZCBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBmdW5jdGlvbiBhcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHN5bWJvbC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gQWxyaWdodCwgaXQmIzM5O3Mgbm90IHN0YXRpYzsgaXQmIzM5O3MgZGVjbGFyZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9odWdldGxiX2NtYS5jYCwgc28gdGhhdCYjMzk7cyBnb29kLiBJdCBzaG91bGQgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmb3IgbXkgcHVycG9zZXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjcm9zc2NoZWNrIG9uIHRob3NlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIExvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCwgSSBzZWUgdGhhdCBgb2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJfY21hLm9gIGlzIGluc2lkZSBhbiBgaWZkZWYgQ09ORklHX0NNQWAgYmxvY2suIFRoaXMgY29uZmlybXMgdGhhdCBgSFVHRVRMQkZTYCAqYW5kKiBgQ01BYCBhcmUsIGluIGZhY3QsIHJlcXVpcmVkLiBBbmQsIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoZSBjcHVzZXQtcmVsYXRlZCBsb2dpYywgSSBhbHNvIG5lZWQgYENQVVNFVFNgIGVuYWJsZWQgYmVjYXVzZSwgd2l0aG91dCBpdCwgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luYCBpcyBqdXN0IGEgc3R1Yi4gR29vZCwgSSYjMzk7dmUgZ290IG15IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duLgoKTGV0JiMzOTtzIGFsc28gdGFrZSBhIGxvb2sgYXQgdGhlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uIGluIGBtbS9odWdldGxiLmNgIHRvIHNlZSBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB0YXJnZXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTMyMD1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGIuYy0xMzYxLVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxubW0vaHVnZXRsYi5jLTEzNzgtXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE4NDYtXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxubW0vaHVnZXRsYi5jOjE4NDc6XHRcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XG5tbS9odWdldGxiLmMtMTg0OC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lLiBUaGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCB1bml2ZXJzYWxseSBhdmFpbGFibGUuIEl0JiMzOTtzIG9ubHkgZGVmaW5lZCB3aGVuICpib3RoKiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGFuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AgYXJlIHNldC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyBiYWNrdHJhY2sgYW5kIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4KCkZpcnN0LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhvc2UgdHdvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSG1tLCBhIHF1aWNrIHJlbWluZGVyLi4uIGBDT05GSUdfQ09OVElHX0FMTE9DYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgQ09ORklHX0NNQWAsIGlmIG1lbW9yeSBzZXJ2ZXMuIFRoYXQgc2VlbXMgcmlnaHQuIEFuZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IHRoZSBtb3JlICYjMzQ7bW9kZXJuJiMzNDsgYXJjaGl0ZWN0dXJlcywgdGhpbmdzIGxpa2UgeDg2LCBhcm02NCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBBbHJpZ2h0LCBJJiMzOTttIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUuCgpOb3csIGxldCBtZSBnbyBiYWNrIHRvIGBtbS9odWdldGxiX2NtYS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIElzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHVzZWQgb3V0c2lkZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dD8gSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBjYWxsIHNpdGVzIHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjI9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjctXG5tbS9odWdldGxiX2NtYS5jOjI4OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI5LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIEZ1bmN0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGVuYWJsZWQuIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgIG5lZWQgdG8gYmUgY29uZmlndXJlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBIVUdFVExCRlNgIGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IEtjb25maWcgbmFtZSBmb3IgdGhhdCBmZWF0dXJlLiBJdCYjMzk7cyBlYXN5IHRvIGdldCB0aGVzZSB0aGluZ3MgbWl4ZWQgdXAsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdXNpbmcgdGhlIHByb3BlciB0ZXJtaW5vbG9neSBhbmQgbG9va2luZyBhdCB0aGUgcmlnaHQgY29uZmlncy4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTWVtb3J5IE1hbmFnZW1lbnQgRGVlcCBEaXZlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZCBpcyBgSFVHRVRMQkZTYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2l0dWF0aW9uIHdoZXJlIHdlJiMzOTtyZSBsb29raW5nIHRvIHJlZHVjZSBUTEIgbWlzc2VzIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIGxhdGVuY3kuIFdlJiMzOTtyZSBleHBsaWNpdGx5IHdhbnRpbmcgdG8gd29yayB3aXRoIGh1Z2UgcGFnZXMgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKQnV0LCBiZWZvcmUgd2UgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHJvYWQsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgYW5nbGVzLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiwgbGV0JiMzOTtzIGFsc28gY2hlY2sgYENNQWAuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIG5lZWQgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucywgb3IgaXMgdGhpcyBtb3JlIGFib3V0IHVzZXItc3BhY2UgYWxsb2NhdGlvbiB3aXRoIGxhcmdlIHBhZ2VzLiBUaGlzIGNvdWxkIHJlcXVpcmUgYSBjaGVjayBmb3IgYW4gZW1iZWRkZWQgc3lzdGVtLCBkZXZpY2UgZHJpdmVyLCBvciByZWFsLXRpbWUgYXBwbGljYXRpb24/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgb25lIG1pZ2h0IHJlcXVpcmUgdGhlIG90aGVyIGJ1dCB0aGlzIHdvdWxkIGRlcGVuZCBoZWF2aWx5IG9uIHRoZSBzeXN0ZW0uIEJvdGggaGF2ZSB0aGVpciB0cmFkZSBvZmZzIGJ1dCBpdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgYm90aCBhcyB0aGUgaW50ZXJwbGF5IGlzIGNyaXRpY2FsLiBUaGUgbmVlZCBmb3IgcGh5c2ljYWwgY29udGlndWl0eSBvZnRlbiBkaWN0YXRlcyB0aGUgY2hvaWNlIGJldHdlZW4gYEhVR0VUTEJGU2AgYW5kIG1vcmUgc3RhbmRhcmQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLgoKU28sIGBIVUdFVExCRlNgIGlzIHRoZSBmb2N1cywgYnV0IGEgcXVpY2sgY2hlY2sgb24gYENNQWAgd2lsbCBjb25maXJtIHRoZSBmdWxsIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFwmIzM0O0RlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cdGludCBcJiMzNDtTaXplIGluIE1lZ2EgQnl0ZXNcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cdGludCBcJiMzNDtQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXHRib29sIFwmIzM0O1VzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cdGJvb2wgXCYjMzQ7VXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXHRib29sIFwmIzM0O1VzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVx0Ym9vbCBcJiMzNDtVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cdGludCBcJiMzNDtNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjcwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKUmlnaHQsICpDTUEqLi4uIEdvdCBpdC4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIGxldCYjMzk7cyBpbW1lZGlhdGVseSBwaXZvdCB0byBleHBsb3JpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gKkNQVVNFVFMqLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBhc3Nlc3MsIGNvbnNpZGVyaW5nIHRoZSBsaWtlbHkgcmVzb3VyY2UgYWxsb2NhdGlvbiBpbXBsaWNhdGlvbnMuIE5lZWQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIG9mIHRoZSBwdXp6bGUgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVTRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjg0PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuLS1cbmluaXQvS2NvbmZpZy0xMjk5LVxuaW5pdC9LY29uZmlnOjEzMDA6Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMzAxLVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMzEyLVxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcbmluaXQvS2NvbmZpZy0xMzE0LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBGdW5jdGlvbjogYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ1BVU0VUU2AgaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJcyBpdCB0aGUgb25seSBmdW5jdGlvbiBhZmZlY3RlZCBieSB0aGlzIHBhdGNoPyBTZWVtcyBsaWtlIGl0LCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24uCgpSaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGlubGluZWQuIExvb2tpbmcgYXQgYG1tL2h1Z2V0bGJfY21hLmNgLCB0aGUgZGVmaW5pdGlvbiBzaG93cyBpdCYjMzk7cyBub3Qgc3RhdGljIGFuZCBpdCYjMzk7cyBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCByZWFjaGFibGUgdmlhIHN5c2NhbGxzPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGludm9rZWQgdGhyb3VnaCBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgc2htZ2V0YCB3aXRoIGBTSE1fSFVHRVRMQmAsIG9yIHdyaXRpbmcgdG8gaHVnZXRsYmZzIGZpbGVzLiBTcGVjaWZpY2FsbHksIGFsbG9jYXRpbmcgYSBnaWdhbnRpYyBwYWdlLCBzYXkgYSAxR0IgcGFnZSBvbiB4ODYsIHRyaWdnZXJzIGEgY2FsbCB0byBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgdGhlIGZ1bmN0aW9uIHdlIGFyZSBpbnRlcmVzdGVkIGluLgoKVGhpcyBtZWFucyBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBJdCByZXF1aXJlcyB0aGUgc3lzdGVtIHRvIGhhdmUgZ2lnYW50aWMgcGFnZXMgY29uZmlndXJlZCBhbmQgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGZvciBodWdldGxiIGVuYWJsZWQuIFR5cGljYWxseSwgd2UmIzM5O2QgZW5hYmxlIENNQSBmb3IgaHVnZXRsYiB1c2luZyB0aGUga2VybmVsIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgYGh1Z2V0bGJfY21hPWAsIGFsdGhvdWdoIHNvbWUgYXJjaGl0ZWN0dXJlcyBtaWdodCBhbGxvY2F0ZSBpdCBieSBkZWZhdWx0LiBIb2xkIG9uLCBgaHVnZXRsYl9jbWFfcmVzZXJ2ZSgpYCBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgYm9vdC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgZnVuY3Rpb24gdG8gY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI3LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2N4bC9saW51eC9lYXJseS1ib290LnJzdDoxMjg6ICB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpIHtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI5OD1zdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKmh1Z2VfcHRlX2xvY2soc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzA4LSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DTUEpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA5OmV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxMC0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMxMTpzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTUxPXVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTU1LVxubW0vaHVnZXRsYl9jbWEuYzoxNTY6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTcte1xuLS1cbm1tL21tX2luaXQuYz0yNjk1PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxubW0vbW1faW5pdC5jLTI2OTYte1xubW0vbW1faW5pdC5jOjI2OTc6XHRodWdldGxiX2NtYV9yZXNlcnZlKCk7XG5tbS9tbV9pbml0LmMtMjY5OC1cdGh1Z2V0bGJfYm9vdG1lbV9hbGxvYygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc0OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipFYXJseSBJbml0aWFsaXphdGlvbiBvZiBIdWdlVExCIENNQSBSZXNlcnZlKioKClJpZ2h0LCBzbyBgaHVnZXRsYl9jbWFfcmVzZXJ2ZWAgaXMgdHJpZ2dlcmVkICp3aXRob3V0IGFueSBjb25kaXRpb25zKiBkdXJpbmcgdGhlIGBtbV9jb3JlX2luaXRfZWFybHlgIHN0YWdlIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZXR1cC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IG1lYW5zIHRoZSBzeXN0ZW0gaXMgc2V0dGluZyBhc2lkZSBzb21lIENNQSBtZW1vcnkgZm9yIEh1Z2VUTEJzIHZlcnkgZWFybHkgb24sIGJlZm9yZSBwb3RlbnRpYWxseSBtb3JlIGR5bmFtaWMgYWxsb2NhdGlvbiBjaG9pY2VzIGFyZSBtYWRlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBodWdldGxiX2NtYV9yZXNlcnZlYCBmdW5jdGlvbiBpdHNlbGYgbm93IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBob3cgdGhpcyBpbXBhY3RzIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eS4gVGhpcyBraW5kIG9mIHVwZnJvbnQgcmVzZXJ2YXRpb24gZGVmaW5pdGVseSBoYXMgaW1wbGljYXRpb25zIGZvciBmcmFnbWVudGF0aW9uLCBhbmQgdGhlIGVmZmljaWVuY3kgb2Ygc3Vic2VxdWVudCBtZW1vcnkgcmVxdWVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU2Olx0dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxuIDE1NzpcdHtcbiAxNTg6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVzZXJ2ZWQsIHBlcl9ub2RlLCBvcmRlciwgZ2lnYW50aWNfcGFnZV9zaXplO1xuIDE1OTpcdFx0Ym9vbCBub2RlX3NwZWNpZmljX2NtYV9hbGxvYyA9IGZhbHNlO1xuIDE2MDpcdFx0aW50IG5pZDtcbiAxNjE6XHRcbiAxNjI6XHRcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiAxNjM6XHRcdFx0cmV0dXJuO1xuIDE2NDpcdFxuIDE2NTpcdFx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG4gMTY2Olx0XHRpZiAoIW9yZGVyKSB7XG4gMTY3Olx0XHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IHRoZSBvcHRpb24gaXNuJiMzOTt0IHN1cHBvcnRlZCBieSBjdXJyZW50IGFyY2hcXG5cJiMzNDspO1xuIDE2ODpcdFx0XHRyZXR1cm47XG4gMTY5Olx0XHR9XG4gMTcwOlx0XG4gMTcxOlx0XHQvKlxuIDE3MjpcdFx0ICogSHVnZVRMQiBDTUEgcmVzZXJ2YXRpb24gaXMgcmVxdWlyZWQgZm9yIGdpZ2FudGljXG4gMTczOlx0XHQgKiBodWdlIHBhZ2VzIHdoaWNoIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgdmlhIHRoZVxuIDE3NDpcdFx0ICogcGFnZSBhbGxvY2F0b3IuIEp1c3Qgd2FybiBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlXG4gMTc1Olx0XHQgKiBicmVha2luZyB0aGlzIGFzc3VtcHRpb24uXG4gMTc2Olx0XHQgKi9cbiAxNzc6XHRcdFZNX1dBUk5fT04ob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUik7XG4gMTc4Olx0XHRnaWdhbnRpY19wYWdlX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDE3OTpcdFxuIDE4MDpcdFx0aHVnZXRsYl9ib290bWVtX3NldF9ub2RlcygpO1xuIDE4MTpcdFxuIDE4MjpcdFx0Zm9yIChuaWQgPSAwOyBuaWQgXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkJiM0MzsmIzQzOykge1xuIDE4MzpcdFx0XHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XG4gMTg0Olx0XHRcdGlmIChzaXplID09IDApXG4gMTg1Olx0XHRcdFx0Y29udGludWU7XG4gMTg2Olx0XG4gMTg3Olx0XHRcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcbiAxODg6XHRcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxuXCYjMzQ7LCBuaWQpO1xuIDE4OTpcdFx0XHR9IGVsc2UgaWYgKCFJU19BTElHTkVEKHNpemUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSkpIHtcbiAxOTA6XHRcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiBjbWEgYXJlYSBvZiBub2RlICVkIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxuXCYjMzQ7LFxuIDE5MTpcdFx0XHRcdFx0bmlkLCBnaWdhbnRpY19wYWdlX3NpemUgLyBTWl8xTSk7XG4gMTkyOlx0XHRcdH0gZWxzZSB7XG4gMTkzOlx0XHRcdFx0bm9kZV9zcGVjaWZpY19jbWFfYWxsb2MgPSB0cnVlO1xuIDE5NDpcdFx0XHRcdGNvbnRpbnVlO1xuIDE5NTpcdFx0XHR9XG4gMTk2Olx0XG4gMTk3Olx0XHRcdGh1Z2V0bGJfY21hX3NpemUgLT0gc2l6ZTtcbiAxOTg6XHRcdFx0aHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPSAwO1xuIDE5OTpcdFx0fVxuIDIwMDpcdFxuIDIwMTpcdFx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cbiAyMDI6XHRcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiAyMDM6XHRcdFx0cmV0dXJuO1xuIDIwNDpcdFxuIDIwNTpcdFx0aWYgKCFJU19BTElHTkVEKGh1Z2V0bGJfY21hX3NpemUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGh1Z2V0bGJfY21hX3NpemVgIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGNoZWNraW5nIGBodWdldGxiX2NtYV9zaXplYC4gTXkgZmlyc3QgdGhvdWdodCBpczogd2hlcmUgZG9lcyB0aGlzIHZhcmlhYmxlIGdldCBzZXQ/IEkgcmVtZW1iZXIgc2VlaW5nIGBodWdldGxiX2NtYV9zaXplYCBiZWluZyBpbmZsdWVuY2VkIGJ5IGBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hYCwgd2hpY2ggc2VlbXMgdG8gYmUgZHJpdmVuIGJ5IHRoZSBgaHVnZXRsYl9jbWE9YCBwYXJhbWV0ZXIgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGVhcmx5IG9uLgoKVG8gYWN0dWFsbHkgdGVzdCB0aGlzIHByb3Blcmx5LCB0aGUgZnV6emVyIChTeXprYWxsZXIgaW4gdGhpcyBjYXNlKSB3b3VsZCBuZWVkIHRvIGJlIGJvb3RlZCB3aXRoIHRoYXQgYGh1Z2V0bGJfY21hPWAgcGFyYW1ldGVyLiBOb3csIEkga25vdyBTeXprYWxsZXIgKmNhbiogcGFzcyBib290IHBhcmFtZXRlcnMsIGlmIGl0JiMzOTtzIHNldCB1cCB0byBkbyBzby4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIGZ1enppbmcgd29ya2Zsb3cgdGhhdCBJJiMzOTttIHNldHRpbmcgdXAgZG9lc24mIzM5O3QgZGlyZWN0bHkgY29udHJvbCB0aGUgYm9vdCBwYXJhbWV0ZXJzOyB3ZSBqdXN0IHN1cHBseSB0aGUgY29uZmlndXJhdGlvbnMuCgpTbywgY291bGQgU3l6a2FsbGVyIGFscmVhZHkgaGF2ZSBgaHVnZXRsYl9jbWE9YCBpbiBvbmUgb2YgaXRzIGNvbmZpZ3M/IE9yLCBtYXliZSwgaXMgaXQgYWJsZSB0byBzZXQgaXQgYnkgZGVmYXVsdD8gTGV0JiMzOTtzIHJ1bGUgdGhhdCBvdXQuIEhvbGQgb24sIGBodWdldGxiX2NtYV9zaXplYCBpcyBpbml0aWFsaXplZCB0byAwIGJ5IGRlZmF1bHQuIFNvLCB0aGF0JiMzOTtzIGEgbm8gb24gdGhlIHNlY29uZCBvcHRpb24uCgpPa2F5LCBsZXQgbWUgYmFjayB1cCBhIG1pbnV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgYGh1Z2V0bGJfY21hX3NpemVgIG1pZ2h0IGJlIHNldD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgdHJhY2UgYWxsIHBvc3NpYmxlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY21hLmM9MTc9c3RhdGljIHN0cnVjdCBjbWEgKmh1Z2V0bGJfY21hW01BWF9OVU1OT0RFU10gX19yb19hZnRlcl9pbml0O1xubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmM6MjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9odWdldGxiX2NtYS5jLTIxLVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjg9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiX2NtYS5jLTM1LVxubW0vaHVnZXRsYl9jbWEuYzozNjpcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMzctXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTA1PXN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEoY2hhciAqcClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTEyMS1cdFx0XHR0bXAgPSBtZW1wYXJzZShzLCBcdTAwMjZzKTtcbm1tL2h1Z2V0bGJfY21hLmM6MTIyOlx0XHRcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gdG1wO1xubW0vaHVnZXRsYl9jbWEuYzoxMjM6XHRcdFx0aHVnZXRsYl9jbWFfc2l6ZSAmIzQzOz0gdG1wO1xubW0vaHVnZXRsYl9jbWEuYy0xMjQtXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xMzMtXHRcdH0gZWxzZSB7XG5tbS9odWdldGxiX2NtYS5jOjEzNDpcdFx0XHRodWdldGxiX2NtYV9zaXplID0gbWVtcGFyc2UocCwgXHUwMDI2cCk7XG5tbS9odWdldGxiX2NtYS5jLTEzNS1cdFx0XHRicmVhaztcbi0tXG5tbS9odWdldGxiX2NtYS5jPTE1Nj12b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xNjEtXG5tbS9odWdldGxiX2NtYS5jOjE2MjpcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMTYzLVx0XHRyZXR1cm47XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xODItXHRmb3IgKG5pZCA9IDA7IG5pZCBcdTAwM2MgTUFYX05VTU5PREVTOyBuaWQmIzQzOyYjNDM7KSB7XG5tbS9odWdldGxiX2NtYS5jOjE4MzpcdFx0c2l6ZSA9IGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdO1xubW0vaHVnZXRsYl9jbWEuYy0xODQtXHRcdGlmIChzaXplID09IDApXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xOTYtXG5tbS9odWdldGxiX2NtYS5jOjE5NzpcdFx0aHVnZXRsYl9jbWFfc2l6ZSAtPSBzaXplO1xubW0vaHVnZXRsYl9jbWEuYzoxOTg6XHRcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gMDtcbm1tL2h1Z2V0bGJfY21hLmMtMTk5LVx0fVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjAxLVx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cbm1tL2h1Z2V0bGJfY21hLmM6MjAyOlx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0yMDMtXHRcdHJldHVybjtcbm1tL2h1Z2V0bGJfY21hLmMtMjA0LVxubW0vaHVnZXRsYl9jbWEuYzoyMDU6XHRpZiAoIUlTX0FMSUdORUQoaHVnZXRsYl9jbWFfc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xubW0vaHVnZXRsYl9jbWEuYy0yMDYtXHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IGNtYSBhcmVhIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxuXCYjMzQ7LFxubW0vaHVnZXRsYl9jbWEuYy0yMDctXHRcdFx0Z2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xubW0vaHVnZXRsYl9jbWEuYzoyMDg6XHRcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xubW0vaHVnZXRsYl9jbWEuYy0yMDktXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiX2NtYS5jLTIxNi1cdFx0ICovXG5tbS9odWdldGxiX2NtYS5jOjIxNzpcdFx0cGVyX25vZGUgPSBESVZfUk9VTkRfVVAoaHVnZXRsYl9jbWFfc2l6ZSxcbm1tL2h1Z2V0bGJfY21hLmMtMjE4LVx0XHRcdFx0XHRub2Rlc193ZWlnaHQoaHVnZXRsYl9ib290bWVtX25vZGVzKSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yMjAtXHRcdHByX2luZm8oXCYjMzQ7aHVnZXRsYl9jbWE6IHJlc2VydmUgJWx1IE1pQiwgdXAgdG8gJWx1IE1pQiBwZXIgbm9kZVxcblwmIzM0Oyxcbm1tL2h1Z2V0bGJfY21hLmM6MjIxOlx0XHRcdGh1Z2V0bGJfY21hX3NpemUgLyBTWl8xTSwgcGVyX25vZGUgLyBTWl8xTSk7XG5tbS9odWdldGxiX2NtYS5jLTIyMi1cdH1cbi0tXG5tbS9odWdldGxiX2NtYS5jLTIyOS1cdFx0aWYgKG5vZGVfc3BlY2lmaWNfY21hX2FsbG9jKSB7XG5tbS9odWdldGxiX2NtYS5jOjIzMDpcdFx0XHRpZiAoaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPT0gMClcbm1tL2h1Z2V0bGJfY21hLmMtMjMxLVx0XHRcdFx0Y29udGludWU7XG5tbS9odWdldGxiX2NtYS5jLTIzMi1cbm1tL2h1Z2V0bGJfY21hLmM6MjMzOlx0XHRcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcbm1tL2h1Z2V0bGJfY21hLmMtMjM0LVx0XHR9IGVsc2Uge1xubW0vaHVnZXRsYl9jbWEuYzoyMzU6XHRcdFx0c2l6ZSA9IG1pbihwZXJfbm9kZSwgaHVnZXRsYl9jbWFfc2l6ZSAtIHJlc2VydmVkKTtcbm1tL2h1Z2V0bGJfY21hLmMtMjM2LVx0XHR9XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNTYtXG5tbS9odWdldGxiX2NtYS5jOjI1NzpcdFx0aWYgKHJlc2VydmVkIFx1MDAzZT0gaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMjU4LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYyLVx0XHQvKlxubW0vaHVnZXRsYl9jbWEuYzoyNjM6XHRcdCAqIGh1Z2V0bGJfY21hX3NpemUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYWxsb2NhdGlvbnMgZnJvbVxubW0vaHVnZXRsYl9jbWEuYy0yNjQtXHRcdCAqIGNtYSBhcmUgcG9zc2libGUuICBTZXQgdG8gemVybyBpZiBubyBjbWEgcmVnaW9ucyBhcmUgc2V0IHVwLlxubW0vaHVnZXRsYl9jbWEuYy0yNjUtXHRcdCAqL1xubW0vaHVnZXRsYl9jbWEuYzoyNjY6XHRcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xubW0vaHVnZXRsYl9jbWEuYy0yNjctfVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjc0PXVuc2lnbmVkIGxvbmcgX19pbml0IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUodm9pZClcbm1tL2h1Z2V0bGJfY21hLmMtMjc1LXtcbm1tL2h1Z2V0bGJfY21hLmM6Mjc2Olx0cmV0dXJuIGh1Z2V0bGJfY21hX3NpemU7XG5tbS9odWdldGxiX2NtYS5jLTI3Ny19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yNzk9dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfdmFsaWRhdGVfcGFyYW1zKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI4MC17XG5tbS9odWdldGxiX2NtYS5jOjI4MTpcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMjgyLVx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTczCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3l6a2FsbGVyIEludGVyYWN0aW9uIHdpdGggSHVnZVRMQiBDTUEgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZSBgaHVnZXRsYl9jbWFfc2l6ZWAgc2V0dGluZyBpcyBleGNsdXNpdmVseSBoYW5kbGVkIHRocm91Z2ggYGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFgLiBUaGUga2V5IGlzIHRoYXQgc3l6a2FsbGVyICpjYW4qIGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhpcyB2YWx1ZSB2aWEgdGhlIGNvbW1hbmQgbGluZSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBodWdldGxiX2NtYT1gIHBhcmFtZXRlciBpZiBpdCYjMzk7cyBhd2FyZSBvZiBpdC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4KCkdpdmVuIHRoaXMgaXMgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgdGhlcmVmb3JlIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuCgpUaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgaXMgYWZmZWN0ZWQuIFNvLCBgRm9jdXNTeW1ib2xzYCBpcyBnb2luZyB0byBiZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4KCk5vdywgd2UgbmVlZCB0byB0aGluayBhYm91dCBlbmFibGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBIVUdFVExCRlNgLCBgQ01BYCwgYW5kIGBDUFVTRVRTYCBhcmUgZXNzZW50aWFsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19OVU1BYCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIGBub2RlbWFza2AgdG8gaGF2ZSBpdHMgZnVsbCBtZWFuaW5nLCBidXQgYENQVVNFVFNgIGFuZCBgQ01BYCBhcmUgdGhlIG1haW4gcGllY2VzLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQ1BVU0VUU2AgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlLiBBaGEhIEl0IGRlcGVuZHMgb24gYENHUk9VUFNgLiBJIG5lZWQgdG8gcmV2aWV3IGBpbml0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYENQVVNFVFNgIGFuZCB0byBiZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb25zIGNvcnJlY3RseSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVVNFVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEyODQ9Y29uZmlnIENHUk9VUF9IVUdFVExCXG4tLVxuaW5pdC9LY29uZmlnLTEyOTktXG5pbml0L0tjb25maWc6MTMwMDpjb25maWcgQ1BVU0VUU1xuaW5pdC9LY29uZmlnLTEzMDEtXHRib29sIFwmIzM0O0NwdXNldCBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEzMTItXG5pbml0L0tjb25maWc6MTMxMzpjb25maWcgQ1BVU0VUU19WMVxuaW5pdC9LY29uZmlnLTEzMTQtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgY3B1c2V0cyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIHNldHRpbmcgcmVsYXRlZCB0byBhIGZlYXR1cmUgSSYjMzk7bSBmYW1pbGlhciB3aXRoIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgaW5pdGlhbCwgZnVuZGFtZW50YWwgb3B0aW9ucyBhcmUgZGVmaW5lZC4gTXkgbWVudGFsIG1hcCBvZiB0aGUgS2NvbmZpZyBoaWVyYXJjaHkgc3VnZ2VzdHMgbGluZSAxMzAwIGlzIGEgbGlrZWx5IGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBhbnkgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgcHJvYmxlbS4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gdGhlIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHkgb3IgZm9yIGFueSBpbW1lZGlhdGUgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5NTpcdFx0ICBIdWdlVExCIHBhZ2VzIGJleW9uZCBpdHMgbGltaXQuIFRoaXMgcmVxdWlyZXMgdGhlIGFwcGxpY2F0aW9uIHRvIGtub3dcbjEyOTY6XHRcdCAgYmVmb3JlaGFuZCBob3cgbXVjaCBIdWdlVExCIHBhZ2VzIGl0IHdvdWxkIHJlcXVpcmUgZm9yIGl0cyB1c2UuIFRoZVxuMTI5NzpcdFx0ICBjb250cm9sIGdyb3VwIGlzIHRyYWNrZWQgaW4gdGhlIHRoaXJkIHBhZ2UgbHJ1IHBvaW50ZXIuIFRoaXMgbWVhbnNcbjEyOTg6XHRcdCAgdGhhdCB3ZSBjYW5ub3QgdXNlIHRoZSBjb250cm9sbGVyIHdpdGggaHVnZSBwYWdlIGxlc3MgdGhhbiAzIHBhZ2VzLlxuMTI5OTpcdFxuMTMwMDpcdGNvbmZpZyBDUFVTRVRTXG4xMzAxOlx0XHRib29sIFwmIzM0O0NwdXNldCBjb250cm9sbGVyXCYjMzQ7XG4xMzAyOlx0XHRkZXBlbmRzIG9uIFNNUFxuMTMwMzpcdFx0c2VsZWN0IFVOSU9OX0ZJTkRcbjEzMDQ6XHRcdHNlbGVjdCBDUFVfSVNPTEFUSU9OXG4xMzA1Olx0XHRoZWxwXG4xMzA2Olx0XHQgIFRoaXMgb3B0aW9uIHdpbGwgbGV0IHlvdSBjcmVhdGUgYW5kIG1hbmFnZSBDUFVTRVRzIHdoaWNoXG4xMzA3Olx0XHQgIGFsbG93IGR5bmFtaWNhbGx5IHBhcnRpdGlvbmluZyBhIHN5c3RlbSBpbnRvIHNldHMgb2YgQ1BVcyBhbmRcbjEzMDg6XHRcdCAgTWVtb3J5IE5vZGVzIGFuZCBhc3NpZ25pbmcgdGFza3MgdG8gcnVuIG9ubHkgd2l0aGluIHRob3NlIHNldHMuXG4xMzA5Olx0XHQgIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCBvbiBsYXJnZSBTTVAgb3IgTlVNQSBzeXN0ZW1zLlxuMTMxMDpcdFxuMTMxMTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMzEyOlx0XG4xMzEzOlx0Y29uZmlnIENQVVNFVFNfVjFcbjEzMTQ6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDQKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBIdWdlVExCIGFuZCBDTUEgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gSHVnZVRMQiBhbmQgQ01BLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYENQVVNFVFNgIGRlcGVuZHMgb24gYFNNUGAsIHNvIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgZW5hYmxlZCBpbiBvdXIgY29uZmlndXJhdGlvbnMuIEFkZGl0aW9uYWxseSwgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gQSBxdWVzdGlvbiBwb3BzIHVwOiBpcyBgTlVNQWAgYSByZXF1aXJlbWVudCBoZXJlPyBXZSBjYW4gY2hlY2sgYG5vZGVfaXNzZXRgIGFuZCBgbm9kZW1hc2tfdGAgdG8gZGV0ZXJtaW5lIGlmIGBOVU1BYCBpcyBhIHJlcXVpcmVtZW50LgoKQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYG5vZGVtYXNrX3RgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbm9kZW1hc2suaGAuIEV2ZW4gd2l0aG91dCBgTlVNQWAsIGl0JiMzOTtzIGF2YWlsYWJsZSwgdGhvdWdoIGl0JiMzOTtsbCBiZSBsaW1pdGVkIHRvIGEgc2luZ2xlIG5vZGUgKG5vZGUgMCkuIFRoZSByZWFsIG11bHRpLW5vZGUgYmVoYXZpb3Igb25seSBraWNrcyBpbiB3aGVuIGBOVU1BYCBpcyBlbmFibGVkLiBUaGUgYnVnICpjb3VsZCogYmUgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zLCBidXQgc2luY2UgYE5VTUFgIGlzIHR5cGljYWxseSBlbmFibGVkIGluIG91ciBzeXprYWxsZXIgY29uZmlncywgdGhhdCBzZWVtcyBsZXNzIGxpa2VseS4gTGV0JiMzOTtzIHJldmlzaXQgdGhlIHBhdGNoIGl0c2VsZi4KClRoZSBwYXRjaCYjMzk7cyBjb3JlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIGJlZm9yZSBpdCBldmVuIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGZyb20gYGh1Z2V0bGJfY21hW25pZF1gLiBJZiBgbm9kZW1hc2tgIGlzIE5VTEwsIGl0IGdyYWJzIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLCB3aGljaCBpcyBhIGR5bmFtaWMgdGhpbmcsIGFuZCB1c2VzIHRoYXQgaW5zdGVhZC4gVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgYWxsb2NhdGlvbiBtZWNoYW5pc20uIEl0JiMzOTtzIG5vdyByZXNwZWN0aW5nIHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IGNwdXNldC4KClRoZXJlZm9yZSwgdGhpcyBtZXJpdHMgZm9jdXNlZCBmdXp6aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRvIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLgoKKipEZWNpc2lvbjoqKiBXb3J0aEZ1enppbmc6IHRydWUKKipGb2N1c1N5bWJvbHM6KiogWyYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDtdCioqRW5hYmxlQ29uZmlnczoqKiBbJiMzNDtIVUdFVExCRlMmIzM0OywgJiMzNDtDTUEmIzM0OywgJiMzNDtDUFVTRVRTJiMzNDtdCioqUmVhc29uaW5nOioqICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2smIzM5O3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmNzdkMWU4ZjcyOTRkNDgxYzZmMmQ3MmU4Y2MzNjBiYWRlNWVkZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDA1OjI2OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmMKaW5kZXggMzkzNDRkNmM3OGQ4NC4uM2FlOTM0NzA3OGU5YiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NwdXNldC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tX2lubGluZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTMwLDExICYjNDM7MzEsMjMgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAlpbnQgbm9kZTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKJiM0MzsJbm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2s7CiAKIAlpZiAoIWh1Z2V0bGJfY21hX3NpemUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKGh1Z2V0bGJfY21hW25pZF0pCiYjNDM7CWlmICghbm9kZW1hc2spIHsKJiM0MzsJCXVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJY3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTsKJiM0MzsJCQlsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7CiYjNDM7CQl9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTsKJiM0MzsKJiM0MzsJCW5vZGVtYXNrID0gJmFtcDtsb2NhbF9ub2RlX21hc2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGh1Z2V0bGJfY21hW25pZF0gJmFtcDsmYW1wOyBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSkKIAkJcGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpOwogCiAJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTAKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGluIGBtbS9odWdldGxiX2NtYS5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzIGl0JiMzOTtzIGludHJvZHVjaW5nIGEgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrO2AgdmFyaWFibGUgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlmIHRoZSBgbm9kZW1hc2tgIHBvaW50ZXIgaXMgbnVsbC4gVGhlbiwgaXQgdXNlcyBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIHRvIGRldGVybWluZSBpZiBhbGxvY2F0aW9uIGlzIHBlcm1pdHRlZCBmcm9tIGEgZ2l2ZW4gYGh1Z2V0bGJfY21hW25pZF1gLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGlzIGluaXRpYWxpemF0aW9uIGJsb2NrIGZvciBgbG9jYWxfbm9kZV9tYXNrYC4gSSBzZWUgdGhpczoKCmBgYGMKCWlmICghbm9kZW1hc2spIHsKCQl1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llOwoKCQlkbyB7CgkJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CgkJCWxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDsKCQl9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTsKCgkJbm9kZW1hc2sgPSAmYW1wO2xvY2FsX25vZGVfbWFzazsKCX0KYGBgCgpSaWdodCwgYGxvY2FsX25vZGVfbWFza2AgaXMgYSBgbm9kZW1hc2tfdGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBiaXRtYXAuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgdGhlIGFzc2lnbm1lbnQ6IGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YC4gVGhpcyBpcyBhIHN0cnVjdCBjb3B5LiBUaGUgZW50aXJlIGJpdG1hcCB3aXRoaW4gYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgZ2V0cyBjb3BpZWQgdG8gYGxvY2FsX25vZGVfbWFza2AuICBTbywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIG1lbW9yeS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYC4uLiB0aGF0JiMzOTtzIGVpdGhlciBhIGdsb2JhbCBvciBhIHBlci10YXNrIHZhcmlhYmxlIOKAkyBhIG1hY3JvIGV4cGFuZGluZyB0byBgY3VycmVudC0mZ3Q7bWVtc19hbGxvd2VkYCB0byBiZSBwcmVjaXNlLiBBbmQgY3JpdGljYWxseSwgaXQmIzM5O3MgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGFzc2lnbm1lbnQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUg4oCTIGluY2x1ZGluZyB0aGUgYml0bWFwLiBUaGUgcmVzdWx0aW5nIGBsb2NhbF9ub2RlX21hc2tgIGlzLCB0aGVyZWZvcmUsIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuCgpTbywgaW4gY29uY2x1c2lvbiwgSSBkb24mIzM5O3Qgc2VlICphbnkqIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGhlcmUuIFRoZSBwYXRjaCBzaW1wbHkgYWRkcyBhIG5vZGVtYXNrIGNoZWNrIHRvIHRoZSBodWdldGxiIENNQSBhbGxvY2F0aW9uIHBhdGgsIGNvcnJlY3RseSB1c2luZyBhbiBpbml0aWFsaXplZCBub2RlbWFzayB0byBlbmZvcmNlIG1lbW9yeSBub2RlIHJlc3RyaWN0aW9ucy4gTm8gS01TQU4gZmxhZyBpcyBuZWVkZWQuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2smIzM5O3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IHRoZSB0YXNrJiMzOTtzIGBtZW1zX2FsbG93ZWRgIG5vZGVtYXNrIHdoZW4gYWxsb2NhdGluZyBhIENNQSBmb2xpby4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIGBub2RlbWFza190IGxvY2FsX25vZGVfbWFza2Agd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO2ApLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNjo0Ny4xMjAxMzI1NjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5NTg3NDg2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNQVVNFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2sncyBgbWVtc19hbGxvd2VkYCBub2RlbWFzayB3aGVuIGFsbG9jYXRpbmcgYSBDTUEgZm9saW8uIEl0IGludHJvZHVjZXMgYSBsb2NhbCBgbm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2tgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gdG8gY29uc2lkZXIgY3B1c2V0IG1lbXMgYWxsb3dlZCB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgZnJvemVuIGZvbGlvcyBmcm9tIENNQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI2OjQ3LjEyMDEzNzMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzUzNTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNmNzdkMWU4ZjcyOTRkNDgxYzZmMmQ3MmU4Y2MzNjBiYWRlNWVkZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgOSAwNToyNjo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuY1xcbmluZGV4IDM5MzQ0ZDZjNzhkODQuLjNhZTkzNDcwNzhlOWIgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVzZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuQEAgLTMwLDExICszMSwyMyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRpbnQgbm9kZTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbitcXHRub2RlbWFza190IGxvY2FsX25vZGVfbWFzaztcXG4gXFxuIFxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcXG4rXFx0aWYgKCFub2RlbWFzaykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xcbitcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbitcXHRcXHRcXHRsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxuK1xcdFxcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbitcXG4rXFx0XFx0bm9kZW1hc2sgPSBcXHUwMDI2bG9jYWxfbm9kZV9tYXNrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG4gXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6MjY6NDguNDY0NTM4MzQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUxMzU5MDc0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjc3ZDFlOGY3Mjk0ZDQ4MWM2ZjJkNzJlOGNjMzYwYmFkZTVlZGVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwNToyNjo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zYWU5MzQ3MDc4ZTliIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtMzAsMTEgKzMxLDIzIEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4rXHRub2RlbWFza190IGxvY2FsX25vZGVfbWFzaztcbiBcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbitcdGlmICghbm9kZW1hc2spIHtcbitcdFx0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbitcbitcdFx0ZG8ge1xuK1x0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4rXHRcdFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuK1x0XHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcbitcbitcdFx0bm9kZW1hc2sgPSBcdTAwMjZsb2NhbF9ub2RlX21hc2s7XG4rXHR9XG4rXG4rXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpXG4gXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcbiBcbiBcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNjo0OC40NjQ1Mzk3OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDQ0NDI0MzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEh1Z2V0bGIgQ01BIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdldGxiX2NtYS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGEgbmV3IGFkZGl0aW9uIG9mIGNwdXNldCBub2RlbWFzayBjaGVja2luZyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgYSBmcm96ZW4gZm9saW8gZnJvbSBDTUEgZm9yIGh1Z2V0bGIuIFRoYXQncyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBhbmQgc29tZXRoaW5nIEkndmUgY29uc2lkZXJlZCBpbXBsZW1lbnRpbmcgbXlzZWxmIGluIHRoZSBwYXN0LCBzbyBJJ20gaW50ZXJlc3RlZCB0byBzZWUgdGhlIGFwcHJvYWNoLlxuXG5Fc3NlbnRpYWxseSwgdGhlIGxvZ2ljIHNlZW1zIHRvIGJlOiB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgaXQncyBkZWZhdWx0aW5nIHRvIHVzaW5nIHRoZSBjdXJyZW50IGNwdXNldCBtZW1zIGFsbG93ZWQuIFRoYXQncyBhIGdvb2QgZmFpbC1zYWZlLCBwcmV2ZW50aW5nIGFsbG9jYXRpb24gZnJvbSBub2RlcyB0aGF0IGFyZW4ndCBhbGxvd2VkIGJ5IHRoZSBjdXJyZW50IGNwdXNldC4gVGhlbiwgY3J1Y2lhbGx5LCBpdCBjaGVja3MgYG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spYCBiZWZvcmUgdHJ5aW5nIHRvIGFjdHVhbGx5IGFsbG9jYXRlIGFueXRoaW5nIGZyb20gYGh1Z2V0bGJfY21hW25pZF1gLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIG5vZGVtYXNrIGVuZm9yY2VtZW50LiBTbywgdG8gYmUgY2xlYXIsIGl0IGlzIHZlcmlmeWluZyBhIG5vZGUgaXMgYWxsb3dlZCBiZWZvcmUgZXZlbiB0cnlpbmcgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IG5vZGUncyBDTUEuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IGNsZWFubHkgaXQncyBpbnRlZ3JhdGVkIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhcmUuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIG5vZGVtYXNrIGhhbmRsaW5nIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucywgZXNwZWNpYWxseSBpbiBjb21wbGV4IE5VTUEgc2V0dXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6MTIuOTA4Nzg2MzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE1MTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIyPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjctXFxubW0vaHVnZXRsYl9jbWEuYzoyODpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmgtMTktXFxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcXG5tbS9odWdldGxiX2NtYS5oLTIxLVxcdFxcdGdmcF90IGdmcF9tYXNrLFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzoxNC41MjAzMDgyNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE0MDYzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIGEgQ3JpdGljYWwgUGF0aCBpbiBIdWdlVExCIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIFRoYXQgbmFtZSByaW5ncyBhIGJlbGwuLi4gYWggeWVzLCBpdCdzIGNhbGxlZCBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCB3aGljaCBpcyByaWdodCB0aGVyZSBpbiBgbW0vaHVnZXRsYi5jYC4gVGhpcyBpc24ndCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uLCB0aGlzIGlzICpjb3JlKiBrZXJuZWwgbG9naWMsIHJpZ2h0IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbi4gSXQgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmcm9tIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSByZXNlcnZlZCBwYWdlcy4gRGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCBpcyB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgbW0vaHVnZXRsYl9jbWEuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBBcmUgdGhlIG5lY2Vzc2FyeSBDTUEgb3B0aW9ucyBjb21waWxlZCBpbj8gQXJlIHRoZSBIdWdlVExCIHNldHRpbmdzIGNvcnJlY3Q/IFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzIGFyZSBpbiBwbGFjZSBmb3IgdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHBhdGggdG8gZnVuY3Rpb24gYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzoxOC40MzQzNzM0NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNzgyNjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwNzg6XFx0aHVnZXRsYl9jbWFfb25seT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVxcdFxcdFxcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM4LSNpZmRlZiBDT05GSUdfQ01BXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTQwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwMi1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYzoyMDM6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00NDg9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTAtXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjQ1MTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcXG4tLVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jPTIyNT1ib29sIF9faW5pdCBhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzQtXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MjM1OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTQyPWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ1LVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM6NDY6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNzY9dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNzg6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc5LVxcbi0tXFxubW0vTWFrZWZpbGU9ODI9aWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7XFxubW0vaHVnZXRsYl9jbWEuYzoxOTpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9odWdldGxiX2NtYS5jLTIwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xNDI9ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hXFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xNDMtXFxubW0vaHVnZXRsYl9jbWEuYzoxNDQ6c3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KGNoYXIgKnApXFxubW0vaHVnZXRsYl9jbWEuYy0xNDUte1xcbm1tL2h1Z2V0bGJfY21hLmM6MTQ2OlxcdHJldHVybiBrc3RydG9ib29sKHAsIFxcdTAwMjZodWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTE0Ny19XFxubW0vaHVnZXRsYl9jbWEuYy0xNDgtXFxubW0vaHVnZXRsYl9jbWEuYzoxNDk6ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hX29ubHlcXFwiLCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTUwLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTUxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTUyLXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTU2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTY0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTY1OlxcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTY2LVxcdGlmICghb3JkZXIpIHtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjY5PWJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yNzAte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjcxOlxcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjcyLX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjc5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yODEtXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmM6MjgyOlxcdFxcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcXG5tbS9odWdldGxiX2NtYS5jLTI4My19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI4NT1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yODktXFxubW0vaHVnZXRsYl9jbWEuYzoyOTA6XFx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjkxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6MjAuNDUyMjA1MTUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MTU1MDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBodWdldGxiX2NtYS5jYCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9odWdldGxiX2NtYS5jYCwgYW5kIGl0J3MgY2xlYXIgdGhpcyBmaWxlIG9ubHkgZ2V0cyBidWlsdCB3aGVuIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFjdGl2ZSDigJMgbWFrZXMgc2Vuc2UuIFRoZSBrZXkgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIFRoaXMgY2hhbmdlIGxldmVyYWdlcyBjcHVzZXQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnM6IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCwgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAsIGFuZCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKWAuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2NwdXNldC5oYC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIGFuZCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBpcyB3aGV0aGVyIHRoaXMgY3B1c2V0IGRlcGVuZGVuY3kgaXMgKnN0cmljdGx5KiBhIGJ1aWxkIHJlcXVpcmVtZW50LiBDYW4gdGhlIGNvZGUgZnVuY3Rpb24gY29ycmVjdGx5IGlmIGBDT05GSUdfQ1BVU0VUU2AgaXMgKm5vdCogZW5hYmxlZCwgb3IgaXMgaXQgYSBoYXJkIGRlcGVuZGVuY3k/IEkgbmVlZCB0byBjaGVjayB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCB0aGUgcnVudGltZSBiZWhhdmlvciB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMuIElzIGl0IGEgYnVpbGQtdGltZSBjb25kaXRpb25hbCwgb3IgYSBydW50aW1lIHJlcXVpcmVtZW50P1xuXG5cbiIsIklucHV0VG9rZW5zIjo1MTMwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjI1LjcxMzc1ODYzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4NTY3NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfbWVtc19hbGxvd2VkX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE9ZXh0ZXJuIGJvb2wgbG9ja2RlcF9pc19jcHVzZXRfaGVsZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6Mjc6ICoga2V5LiBJbiBjb2RlIHBhdGhzIHdoZXJlIHdlIG5lZWQgdG8gbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYW5kXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOC0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpIHRvIGdldCBhIGNvbnNpc3RlbnQgdmlldyBvZiBtZW1zX2FsbG93ZWQsIHdlIG5lZWRcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTM1PWV4dGVybiB2b2lkIGNwdXNldF9yZXNldF9zY2hlZF9kb21haW5zKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjEzODogKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBpcyByZXF1aXJlZCB3aGVuIG1ha2luZyBkZWNpc2lvbnMgaW52b2x2aW5nXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzktICogbWVtc19hbGxvd2VkIHN1Y2ggYXMgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gbWVtc19hbGxvd2VkIGNhbiBiZSB1cGRhdGVkIGluXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQxOiAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0Mi0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQ0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTMtICogSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBvcGVyYXRpb24gdGhhdCB0b29rIHBsYWNlIGFmdGVyXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNTQ6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gbWF5IGhhdmUgZmFpbGVkIGFydGlmaWNpYWxseSBkdWUgdG8gYSBjb25jdXJyZW50XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21lbXNfYWxsb3dlZChub2RlbWFza190IG5vZGVtYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XFxuLS1cXG5tbS9maWxlbWFwLmM9OTk5PXN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTAxMS1cXHRcXHRkbyB7XFxubW0vZmlsZW1hcC5jOjEwMTI6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9maWxlbWFwLmMtMTAxMy1cXHRcXHRcXHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0Olxcbm1tL2h1Z2V0bGIuYzoxMjkxOlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vaHVnZXRsYi5jLTEyOTItXFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwgZ2ZwX3pvbmUoZ2ZwX21hc2spLCBubWFzaykge1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy00Mi1cXHRcXHRkbyB7XFxubW0vaHVnZXRsYl9jbWEuYzo0MzpcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtNDQtXFx0XFx0XFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEwNi1cXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEgdG8gZGV0ZWN0IHJlYmluZCAqL1xcbm1tL21lbXBvbGljeS5jOjIxMDc6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTA4LVxcdG5vZGUgPSBjdXJyZW50LVxcdTAwM2VpbF9wcmV2O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEyMz1zdGF0aWMgdW5zaWduZWQgaW50IGludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEyOS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjEzMDpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTIxMzEtXFx0XFx0bmlkID0gbmV4dF9ub2RlX2luKGN1cnJlbnQtXFx1MDAzZWlsX3ByZXYsIHBvbGljeS1cXHUwMDNlbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY1NS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjY1NjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTI2NTctXFx0XFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFxcdTAwMjZub2Rlcyk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDc2NC1cXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XFxubW0vcGFnZV9hbGxvYy5jOjQ3NjU6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcXG4tLVxcbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vc2hvd19tZW0uYy0xMjUtXFx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXFxubW0vc2hvd19tZW0uYzoxMjY6XFx0ICogdGhlIHN5bmNocm9uaXphdGlvbiAtIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIC0gYmVjYXVzZSB3ZSBkbyBub3RcXG5tbS9zaG93X21lbS5jLTEyNy1cXHQgKiBoYXZlIHRvIGJlIHByZWNpc2UgaGVyZS5cXG4tLVxcbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM4OTctXFx0XFx0LypcXG5tbS9zbHViLmM6Mzg5ODpcXHRcXHQgKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFjY2Vzc2VzIGN1cnJlbnQtXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEsXFxubW0vc2x1Yi5jLTM4OTktXFx0XFx0ICogYSBzZXFjb3VudF9zcGlubG9ja190IHRoYXQgaXMgbm90IE5NSS1zYWZlLiBEbyBub3QgYWNjZXNzXFxuLS1cXG5tbS9zbHViLmMtMzkwMy1cXHRcXHRpZiAoYWxsb3dfc3BpbilcXG5tbS9zbHViLmM6MzkwNDpcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL3NsdWIuYy0zOTA1LVxcbi0tXFxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzI0Ni1cXHRkbyB7XFxubW0vc2x1Yi5jOjcyNDc6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9zbHViLmMtNzI0OC1cXHRcXHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzoyNy4yNTIzMzE5MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAwNTg0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBpbiBob3cgaXQgaGFuZGxlcyBjcHVzZXQgbWVtcy4gVGhhdCBtZWFucyB0aGVyZSdzIGEgZGVmaW5pdGUgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVzZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGV2ZW4gYWN0aXZlIGFuZCByZWFjaGFibGUuIEJhc2VkIG9uIHRoZSBkb2N1bWVudGF0aW9uLCBpdCBpcy4gVGhlIGNhbGxzIGNvbWUgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiwgaXMgcmVhY2hlZCB0aHJvdWdoIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBhbmQgYGFsbG9jX3Bvb2xfaHVnZV9mb2xpb2AuIEkga25vdyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBodWdldGxiZnMuIFNvIHllcywgdGhpcyBpcyBhIHJlYWwsIGxpdmUgY29kZSBwYXRoLlxuXG5UaGUgY29uZmlncyBpbnZvbHZlZCBhcmUgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0NNQWAsIHdoaWNoIGFyZSBmYWlybHkgc3RhbmRhcmQuIEJ1dCBoZXJl4oCZcyBzb21ldGhpbmcgdG8gbm90ZTogYENPTkZJR19DUFVTRVRTYCBpcyBhbHNvIG5lZWRlZCBmb3IgdGhlIGNwdXNldCBmZWF0dXJlcyB0byBiZSBhY3RpdmUuIFRoYXQgbWVhbnMgdGhlIHVzZXIgbmVlZHMgdG8gaGF2ZSBjcHVzZXRzIGVuYWJsZWQgZm9yIHRoZSBwYXRjaCB0byBkbyBhbnl0aGluZy4gRXZlbiBpZiBjcHVzZXRzIGFyZSBkaXNhYmxlZCwgdGhlcmUgYXJlIHN0dWJzIGluIGBpbmNsdWRlL2xpbnV4L2NwdXNldC5oYC4gTGV0IG1lIGNoZWNrIHRoYXQgaW5jbHVkZSBmaWxlIHRvIHZlcmlmeSBleGFjdGx5IGhvdyBgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW5gIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgZGlzYWJsZWQgY29uZmlndXJhdGlvbi4gVGhhdCdsbCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDE5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjMzLjA1MjkxOTgyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2Nzg3NjQzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWFkX21lbXNfYWxsb3dlZF9iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NwdXNldC5oPTIxPWV4dGVybiBib29sIGxvY2tkZXBfaXNfY3B1c2V0X2hlbGQodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI2LSAqIFN0YXRpYyBicmFuY2ggcmV3cml0ZXMgY2FuIGhhcHBlbiBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgZm9yIGEgZ2l2ZW5cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjI3OiAqIGtleS4gSW4gY29kZSBwYXRocyB3aGVyZSB3ZSBuZWVkIHRvIGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFuZFxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjgtICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTEzNT1leHRlcm4gdm9pZCBjcHVzZXRfcmVzZXRfc2NoZWRfZG9tYWlucyh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM3LS8qXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxMzg6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gaXMgcmVxdWlyZWQgd2hlbiBtYWtpbmcgZGVjaXNpb25zIGludm9sdmluZ1xcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM5LSAqIG1lbXNfYWxsb3dlZCBzdWNoIGFzIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIG1lbXNfYWxsb3dlZCBjYW4gYmUgdXBkYXRlZCBpblxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQwLSAqIHBhcmFsbGVsIGFuZCBkZXBlbmRpbmcgb24gdGhlIG5ldyB2YWx1ZSBhbiBvcGVyYXRpb24gY2FuIGZhaWwgcG90ZW50aWFsbHlcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0MTogKiBjYXVzaW5nIHByb2Nlc3MgZmFpbHVyZS4gQSByZXRyeSBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gYW5kXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDItICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkgcHJldmVudHMgdGhlc2UgYXJ0aWZpY2lhbCBmYWlsdXJlcy5cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0My0gKi9cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0NDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQ1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTUzLSAqIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgb3BlcmF0aW9uIHRoYXQgdG9vayBwbGFjZSBhZnRlclxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTU0OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIG1heSBoYXZlIGZhaWxlZCBhcnRpZmljaWFsbHkgZHVlIHRvIGEgY29uY3VycmVudFxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTU1LSAqIHVwZGF0ZSBvZiBtZW1zX2FsbG93ZWQuIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yODg9c3RhdGljIGlubGluZSB2b2lkIHNldF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCBub2RlbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjkxLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjkyOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTMte1xcbi0tXFxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTEwMTEtXFx0XFx0ZG8ge1xcbm1tL2ZpbGVtYXAuYzoxMDEyOlxcdFxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vZmlsZW1hcC5jLTEwMTMtXFx0XFx0XFx0biA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMjc1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjkwLXJldHJ5X2NwdXNldDpcXG5tbS9odWdldGxiLmM6MTI5MTpcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL2h1Z2V0bGIuYy0xMjkyLVxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGdmcF96b25lKGdmcF9tYXNrKSwgbm1hc2spIHtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjg9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtNDItXFx0XFx0ZG8ge1xcbm1tL2h1Z2V0bGJfY21hLmM6NDM6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9odWdldGxiX2NtYS5jLTQ0LVxcdFxcdFxcdGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxMDYtXFx0LyogdG8gcHJldmVudCBtaXNjb3VudCB1c2UgdHNrLVxcdTAwM2VtZW1zX2FsbG93ZWRfc2VxIHRvIGRldGVjdCByZWJpbmQgKi9cXG5tbS9tZW1wb2xpY3kuYzoyMTA3OlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vbWVtcG9saWN5LmMtMjEwOC1cXHRub2RlID0gY3VycmVudC1cXHUwMDNlaWxfcHJldjtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMjM9c3RhdGljIHVuc2lnbmVkIGludCBpbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxMjktXFx0ZG8ge1xcbm1tL21lbXBvbGljeS5jOjIxMzA6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTMxLVxcdFxcdG5pZCA9IG5leHRfbm9kZV9pbihjdXJyZW50LVxcdTAwM2VpbF9wcmV2LCBwb2xpY3ktXFx1MDAzZW5vZGVzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI2MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NTUtXFx0ZG8ge1xcbm1tL21lbXBvbGljeS5jOjI2NTY6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yNjU3LVxcdFxcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcXHUwMDI2bm9kZXMpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ3MjU9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ3NjQtXFx0Y29tcGFjdF9wcmlvcml0eSA9IERFRl9DT01QQUNUX1BSSU9SSVRZO1xcbm1tL3BhZ2VfYWxsb2MuYzo0NzY1OlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vcGFnZV9hbGxvYy5jLTQ3NjYtXFx0em9uZWxpc3RfaXRlcl9jb29raWUgPSB6b25lbGlzdF9pdGVyX2JlZ2luKCk7XFxuLS1cXG5tbS9zaG93X21lbS5jPTExOT1zdGF0aWMgYm9vbCBzaG93X21lbV9ub2RlX3NraXAodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Nob3dfbWVtLmMtMTI1LVxcdCAqIG5vIG5vZGUgbWFzayAtIGFrYSBpbXBsaWNpdCBtZW1vcnkgbnVtYSBwb2xpY3kuIERvIG5vdCBib3RoZXIgd2l0aFxcbm1tL3Nob3dfbWVtLmM6MTI2OlxcdCAqIHRoZSBzeW5jaHJvbml6YXRpb24gLSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiAtIGJlY2F1c2Ugd2UgZG8gbm90XFxubW0vc2hvd19tZW0uYy0xMjctXFx0ICogaGF2ZSB0byBiZSBwcmVjaXNlIGhlcmUuXFxuLS1cXG5tbS9zbHViLmM9Mzg2Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zODk3LVxcdFxcdC8qXFxubW0vc2x1Yi5jOjM4OTg6XFx0XFx0ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhY2Nlc3NlcyBjdXJyZW50LVxcdTAwM2VtZW1zX2FsbG93ZWRfc2VxLFxcbm1tL3NsdWIuYy0zODk5LVxcdFxcdCAqIGEgc2VxY291bnRfc3BpbmxvY2tfdCB0aGF0IGlzIG5vdCBOTUktc2FmZS4gRG8gbm90IGFjY2Vzc1xcbi0tXFxubW0vc2x1Yi5jLTM5MDMtXFx0XFx0aWYgKGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jOjM5MDQ6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9zbHViLmMtMzkwNS1cXG4tLVxcbm1tL3NsdWIuYz03MjMxPV9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTcyNDYtXFx0ZG8ge1xcbm1tL3NsdWIuYzo3MjQ3OlxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vc2x1Yi5jLTcyNDgtXFx0XFx0em9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG1lbXBvbGljeV9zbGFiX25vZGUoKSwgZ2ZwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6MzQuNjIwODAzMjY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjE2MjE0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBhcyBhIHByb21pc2luZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyB0aGVyZSdzIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IgdG8gYmUgZXhwb3NlZC4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgYXJlIGBIVUdFVExCRlNgLCBgQ01BYCwgYW5kIGBDUFVTRVRTYC4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJJ20gZm9jdXNpbmcgb24gdGhhdCBmdW5jdGlvbiBhcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHN5bWJvbC5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIGdsb2JhbGx5IGFjY2Vzc2libGUuIEFscmlnaHQsIGl0J3Mgbm90IHN0YXRpYzsgaXQncyBkZWNsYXJlZCBpbiBgbW0vaHVnZXRsYl9jbWEuaGAgYW5kIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyB0aGF0J3MgZ29vZC4gSXQgc2hvdWxkIGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZm9yIG15IHB1cnBvc2VzLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNyb3NzY2hlY2sgb24gdGhvc2UgY29uZmlnIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCBgbW0vTWFrZWZpbGVgLCBJIHNlZSB0aGF0IGBvYmotJChDT05GSUdfSFVHRVRMQkZTKSArPSBodWdldGxiX2NtYS5vYCBpcyBpbnNpZGUgYW4gYGlmZGVmIENPTkZJR19DTUFgIGJsb2NrLiBUaGlzIGNvbmZpcm1zIHRoYXQgYEhVR0VUTEJGU2AgKmFuZCogYENNQWAgYXJlLCBpbiBmYWN0LCByZXF1aXJlZC4gQW5kLCB0byBwcm9wZXJseSBleGVyY2lzZSB0aGUgY3B1c2V0LXJlbGF0ZWQgbG9naWMsIEkgYWxzbyBuZWVkIGBDUFVTRVRTYCBlbmFibGVkIGJlY2F1c2UsIHdpdGhvdXQgaXQsIGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbmAgaXMganVzdCBhIHN0dWIuIEdvb2QsIEkndmUgZ290IG15IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duLlxuXG5MZXQncyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vaHVnZXRsYi5jYCB0byBzZWUgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdGFyZ2V0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODU4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjQwLjk0MjQyNzczN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMjg2MTY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMTM2MS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xcbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbm1tL2h1Z2V0bGIuYy0xMzc4LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODQ2LVxcdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXFxubW0vaHVnZXRsYi5jOjE4NDc6XFx0XFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMTg0OC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjQzLjY1NTI5MzgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDcwMDEyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGp1bXBzIG91dCBhdCBtZS4gVGhpcyBmdW5jdGlvbiBpc24ndCB1bml2ZXJzYWxseSBhdmFpbGFibGUuIEl0J3Mgb25seSBkZWZpbmVkIHdoZW4gKmJvdGgqIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYCBhcmUgc2V0LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgYmFja3RyYWNrIGFuZCBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMuXG5cbkZpcnN0LCBJJ2xsIGRvdWJsZS1jaGVjayB0aG9zZSB0d28gY29uZmlndXJhdGlvbiBvcHRpb25zLiBIbW0sIGEgcXVpY2sgcmVtaW5kZXIuLi4gYENPTkZJR19DT05USUdfQUxMT0NgIGlzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBDT05GSUdfQ01BYCwgaWYgbWVtb3J5IHNlcnZlcy4gVGhhdCBzZWVtcyByaWdodC4gQW5kIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgdHlwaWNhbGx5IGVuYWJsZWQgYnkgdGhlIG1vcmUgXCJtb2Rlcm5cIiBhcmNoaXRlY3R1cmVzLCB0aGluZ3MgbGlrZSB4ODYsIGFybTY0LCB0aGF0IHNvcnQgb2YgdGhpbmcuIEFscmlnaHQsIEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLlxuXG5Ob3csIGxldCBtZSBnbyBiYWNrIHRvIGBtbS9odWdldGxiX2NtYS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdXNlZCBvdXRzaWRlIG9mIHRoaXMgcGFydGljdWxhciBjb250ZXh0PyBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMgd2l0aGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6NDcuODAyMjk3Mzk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1Mjc0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzY0LVxcbm1tL2h1Z2V0bGIuYzoxMzY1OlxcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxubW0vaHVnZXRsYi5jLTEzNjYtXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yMj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI3LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5jLTI5LVxcdFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuaC04LVxcdFxcdFxcdFxcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTE5LVxcbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cXHRcXHRnZnBfdCBnZnBfbWFzayxcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6NDkuMjc3NTc4MTY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Mjg1NDYwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGVuYWJsZWQuIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgIG5lZWQgdG8gYmUgY29uZmlndXJlZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYEhVR0VUTEJGU2AgaXMgYWN0dWFsbHkgdGhlIGNvcnJlY3QgS2NvbmZpZyBuYW1lIGZvciB0aGF0IGZlYXR1cmUuIEl0J3MgZWFzeSB0byBnZXQgdGhlc2UgdGhpbmdzIG1peGVkIHVwLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gdXNpbmcgdGhlIHByb3BlciB0ZXJtaW5vbG9neSBhbmQgbG9va2luZyBhdCB0aGUgcmlnaHQgY29uZmlncy4gSSdsbCBkb3VibGUgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzo1NC4yMDYxMjc0MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzc0ODAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzo1NS42ODM2MTIzNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNDExODA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNZW1vcnkgTWFuYWdlbWVudCBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZCBpcyBgSFVHRVRMQkZTYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRpb24gb2YgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzaXR1YXRpb24gd2hlcmUgd2UncmUgbG9va2luZyB0byByZWR1Y2UgVExCIG1pc3NlcyBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZSBsYXRlbmN5LiBXZSdyZSBleHBsaWNpdGx5IHdhbnRpbmcgdG8gd29yayB3aXRoIGh1Z2UgcGFnZXMgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5CdXQsIGJlZm9yZSB3ZSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcm9hZCwgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBhbmdsZXMuIEkgbmVlZCB0byB0aGluayBhYm91dCBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uLCBsZXQncyBhbHNvIGNoZWNrIGBDTUFgLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBuZWVkIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMsIG9yIGlzIHRoaXMgbW9yZSBhYm91dCB1c2VyLXNwYWNlIGFsbG9jYXRpb24gd2l0aCBsYXJnZSBwYWdlcy4gVGhpcyBjb3VsZCByZXF1aXJlIGEgY2hlY2sgZm9yIGFuIGVtYmVkZGVkIHN5c3RlbSwgZGV2aWNlIGRyaXZlciwgb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9uPyBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIG9uZSBtaWdodCByZXF1aXJlIHRoZSBvdGhlciBidXQgdGhpcyB3b3VsZCBkZXBlbmQgaGVhdmlseSBvbiB0aGUgc3lzdGVtLiBCb3RoIGhhdmUgdGhlaXIgdHJhZGUgb2ZmcyBidXQgaXQgaXMgbmVjZXNzYXJ5IHRvIGNoZWNrIGJvdGggYXMgdGhlIGludGVycGxheSBpcyBjcml0aWNhbC4gVGhlIG5lZWQgZm9yIHBoeXNpY2FsIGNvbnRpZ3VpdHkgb2Z0ZW4gZGljdGF0ZXMgdGhlIGNob2ljZSBiZXR3ZWVuIGBIVUdFVExCRlNgIGFuZCBtb3JlIHN0YW5kYXJkIGFsbG9jYXRpb24gc3RyYXRlZ2llcy5cblxuU28sIGBIVUdFVExCRlNgIGlzIHRoZSBmb2N1cywgYnV0IGEgcXVpY2sgY2hlY2sgb24gYENNQWAgd2lsbCBjb25maXJtIHRoZSBmdWxsIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDMsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzo1OS43MTc3MzM1MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjI5MTI3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODUtXFxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiRGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFxcXCJEZWZhdWx0IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc2l6ZTpcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTk4OmNvbmZpZyBDTUFfU0laRV9NQllURVNcXG5rZXJuZWwvZG1hL0tjb25maWctMTk5LVxcdGludCBcXFwiU2l6ZSBpbiBNZWdhIEJ5dGVzXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIwOC1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjA5OmNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cXHRpbnQgXFxcIlBlcmNlbnRhZ2Ugb2YgdG90YWwgbWVtb3J5XFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIyMD1jaG9pY2VcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjMtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNDpjb25maWcgQ01BX1NJWkVfU0VMX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXFx0Ym9vbCBcXFwiVXNlIG1lZ2EgYnl0ZXMgdmFsdWUgb25seVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjI2LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjc6Y29uZmlnIENNQV9TSVpFX1NFTF9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cXHRib29sIFxcXCJVc2UgcGVyY2VudGFnZSB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjktXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMDpjb25maWcgQ01BX1NJWkVfU0VMX01JTlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXFx0Ym9vbCBcXFwiVXNlIGxvd2VyIHZhbHVlIChtaW5pbXVtKVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjMyLVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzM6Y29uZmlnIENNQV9TSVpFX1NFTF9NQVhcXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVxcdGJvb2wgXFxcIlVzZSBoaWdoZXIgdmFsdWUgKG1heGltdW0pXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIzNj1lbmRjaG9pY2VcXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzg6Y29uZmlnIENNQV9BTElHTk1FTlRcXG5rZXJuZWwvZG1hL0tjb25maWctMjM5LVxcdGludCBcXFwiTWF4aW11bSBQQUdFX1NJWkUgb3JkZXIgb2YgYWxpZ25tZW50IGZvciBjb250aWd1b3VzIGJ1ZmZlcnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuLS1cXG5tbS9LY29uZmlnLTEwNjYtXFxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDgxLVxcbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwODMtXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDg3LVxcbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDg5LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5NC1cXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjg6MDEuMTgwNjUxNDk2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQ1ODU5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsICpDTUEqLi4uIEdvdCBpdC4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIGxldCdzIGltbWVkaWF0ZWx5IHBpdm90IHRvIGV4cGxvcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiAqQ1BVU0VUUyouIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gYXNzZXNzLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IHJlc291cmNlIGFsbG9jYXRpb24gaW1wbGljYXRpb25zLiBOZWVkIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyBvZiB0aGUgcHV6emxlIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3MCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjA0LjQ3NTI0MDE3NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzkyODA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVU0VUU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTI4ND1jb25maWcgQ0dST1VQX0hVR0VUTEJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMjk5LVxcbmluaXQvS2NvbmZpZzoxMzAwOmNvbmZpZyBDUFVTRVRTXFxuaW5pdC9LY29uZmlnLTEzMDEtXFx0Ym9vbCBcXFwiQ3B1c2V0IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTMxMi1cXG5pbml0L0tjb25maWc6MTMxMzpjb25maWcgQ1BVU0VUU19WMVxcbmluaXQvS2NvbmZpZy0xMzE0LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgY3B1c2V0cyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyODowNS45MzkxNzE3NTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzNzY0NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBGdW5jdGlvbjogYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYENQVVNFVFNgIGhlcmUuIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSXMgaXQgdGhlIG9ubHkgZnVuY3Rpb24gYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaD8gU2VlbXMgbGlrZSBpdCwgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLlxuXG5SaWdodCwgbGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW5saW5lZC4gTG9va2luZyBhdCBgbW0vaHVnZXRsYl9jbWEuY2AsIHRoZSBkZWZpbml0aW9uIHNob3dzIGl0J3Mgbm90IHN0YXRpYyBhbmQgaXQncyBub3QgaW5saW5lZC4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgcmVhY2hhYmxlIHZpYSBzeXNjYWxscz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGludm9rZWQgdGhyb3VnaCBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgc2htZ2V0YCB3aXRoIGBTSE1fSFVHRVRMQmAsIG9yIHdyaXRpbmcgdG8gaHVnZXRsYmZzIGZpbGVzLiBTcGVjaWZpY2FsbHksIGFsbG9jYXRpbmcgYSBnaWdhbnRpYyBwYWdlLCBzYXkgYSAxR0IgcGFnZSBvbiB4ODYsIHRyaWdnZXJzIGEgY2FsbCB0byBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgdGhlIGZ1bmN0aW9uIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuXG5UaGlzIG1lYW5zIGl0J3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBJdCByZXF1aXJlcyB0aGUgc3lzdGVtIHRvIGhhdmUgZ2lnYW50aWMgcGFnZXMgY29uZmlndXJlZCBhbmQgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGZvciBodWdldGxiIGVuYWJsZWQuIFR5cGljYWxseSwgd2UnZCBlbmFibGUgQ01BIGZvciBodWdldGxiIHVzaW5nIHRoZSBrZXJuZWwgY29tbWFuZC1saW5lIHBhcmFtZXRlciBgaHVnZXRsYl9jbWE9YCwgYWx0aG91Z2ggc29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IGFsbG9jYXRlIGl0IGJ5IGRlZmF1bHQuIEhvbGQgb24sIGBodWdldGxiX2NtYV9yZXNlcnZlKClgIGlzIGFsc28gY2FsbGVkIGR1cmluZyBib290LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiB0byBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjEzLjA3NjgxOTkzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTEyODk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0LTEyNy1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0OjEyODogIHZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZCkge1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjk4PXN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqaHVnZV9wdGVfbG9jayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwOC0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DTUEpXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMwOTpleHRlcm4gdm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEwLSNlbHNlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMxMTpzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEyLXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTUxPXVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xNTUtXFxubW0vaHVnZXRsYl9jbWEuYzoxNTY6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTU3LXtcXG4tLVxcbm1tL21tX2luaXQuYz0yNjk1PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjk2LXtcXG5tbS9tbV9pbml0LmM6MjY5NzpcXHRodWdldGxiX2NtYV9yZXNlcnZlKCk7XFxubW0vbW1faW5pdC5jLTI2OTgtXFx0aHVnZXRsYl9ib290bWVtX2FsbG9jKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjE0LjU1Nzk1MzM1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNzk4Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyB0ZWNobmljYWwgc25pcHBldCwgZXhwcmVzc2VkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipFYXJseSBJbml0aWFsaXphdGlvbiBvZiBIdWdlVExCIENNQSBSZXNlcnZlKipcblxuUmlnaHQsIHNvIGBodWdldGxiX2NtYV9yZXNlcnZlYCBpcyB0cmlnZ2VyZWQgKndpdGhvdXQgYW55IGNvbmRpdGlvbnMqIGR1cmluZyB0aGUgYG1tX2NvcmVfaW5pdF9lYXJseWAgc3RhZ2Ugb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNldHVwLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgbWVhbnMgdGhlIHN5c3RlbSBpcyBzZXR0aW5nIGFzaWRlIHNvbWUgQ01BIG1lbW9yeSBmb3IgSHVnZVRMQnMgdmVyeSBlYXJseSBvbiwgYmVmb3JlIHBvdGVudGlhbGx5IG1vcmUgZHluYW1pYyBhbGxvY2F0aW9uIGNob2ljZXMgYXJlIG1hZGUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGh1Z2V0bGJfY21hX3Jlc2VydmVgIGZ1bmN0aW9uIGl0c2VsZiBub3cgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIGhvdyB0aGlzIGltcGFjdHMgb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5IGRpc3RyaWJ1dGlvbiBhbmQgYXZhaWxhYmlsaXR5LiBUaGlzIGtpbmQgb2YgdXBmcm9udCByZXNlcnZhdGlvbiBkZWZpbml0ZWx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGZyYWdtZW50YXRpb24sIGFuZCB0aGUgZWZmaWNpZW5jeSBvZiBzdWJzZXF1ZW50IG1lbW9yeSByZXF1ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyODoxOC42MjE3NTQ2ODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYl9jbWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTY6XFx0dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbiAxNTc6XFx0e1xcbiAxNTg6XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCByZXNlcnZlZCwgcGVyX25vZGUsIG9yZGVyLCBnaWdhbnRpY19wYWdlX3NpemU7XFxuIDE1OTpcXHRcXHRib29sIG5vZGVfc3BlY2lmaWNfY21hX2FsbG9jID0gZmFsc2U7XFxuIDE2MDpcXHRcXHRpbnQgbmlkO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxuIDE2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xcbiAxNjY6XFx0XFx0aWYgKCFvcmRlcikge1xcbiAxNjc6XFx0XFx0XFx0cHJfd2FybihcXFwiaHVnZXRsYl9jbWE6IHRoZSBvcHRpb24gaXNuJ3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgYXJjaFxcXFxuXFxcIik7XFxuIDE2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDE2OTpcXHRcXHR9XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdC8qXFxuIDE3MjpcXHRcXHQgKiBIdWdlVExCIENNQSByZXNlcnZhdGlvbiBpcyByZXF1aXJlZCBmb3IgZ2lnYW50aWNcXG4gMTczOlxcdFxcdCAqIGh1Z2UgcGFnZXMgd2hpY2ggY291bGQgbm90IGJlIGFsbG9jYXRlZCB2aWEgdGhlXFxuIDE3NDpcXHRcXHQgKiBwYWdlIGFsbG9jYXRvci4gSnVzdCB3YXJuIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2VcXG4gMTc1OlxcdFxcdCAqIGJyZWFraW5nIHRoaXMgYXNzdW1wdGlvbi5cXG4gMTc2OlxcdFxcdCAqL1xcbiAxNzc6XFx0XFx0Vk1fV0FSTl9PTihvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUik7XFxuIDE3ODpcXHRcXHRnaWdhbnRpY19wYWdlX3NpemUgPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdGh1Z2V0bGJfYm9vdG1lbV9zZXRfbm9kZXMoKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0Zm9yIChuaWQgPSAwOyBuaWQgXFx1MDAzYyBNQVhfTlVNTk9ERVM7IG5pZCsrKSB7XFxuIDE4MzpcXHRcXHRcXHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XFxuIDE4NDpcXHRcXHRcXHRpZiAoc2l6ZSA9PSAwKVxcbiAxODU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcXG4gMTg4OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxcXG5cXFwiLCBuaWQpO1xcbiAxODk6XFx0XFx0XFx0fSBlbHNlIGlmICghSVNfQUxJR05FRChzaXplLCBnaWdhbnRpY19wYWdlX3NpemUpKSB7XFxuIDE5MDpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogY21hIGFyZWEgb2Ygbm9kZSAlZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWx1IE1pQlxcXFxuXFxcIixcXG4gMTkxOlxcdFxcdFxcdFxcdFxcdG5pZCwgZ2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xcbiAxOTI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTkzOlxcdFxcdFxcdFxcdG5vZGVfc3BlY2lmaWNfY21hX2FsbG9jID0gdHJ1ZTtcXG4gMTk0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplIC09IHNpemU7XFxuIDE5ODpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9IDA7XFxuIDE5OTpcXHRcXHR9XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdC8qIFZhbGlkYXRlIHRoZSBDTUEgc2l6ZSBhZ2FpbiBpbiBjYXNlIHNvbWUgaW52YWxpZCBub2RlcyBzcGVjaWZpZWQuICovXFxuIDIwMjpcXHRcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxuIDIwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGlmICghSVNfQUxJR05FRChodWdldGxiX2NtYV9zaXplLCBnaWdhbnRpY19wYWdlX3NpemUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjE4LjYyMTgxNzA1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA2Njc3MTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgaHVnZXRsYl9jbWFfc2l6ZWAgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2hlY2tpbmcgYGh1Z2V0bGJfY21hX3NpemVgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGVyZSBkb2VzIHRoaXMgdmFyaWFibGUgZ2V0IHNldD8gSSByZW1lbWJlciBzZWVpbmcgYGh1Z2V0bGJfY21hX3NpemVgIGJlaW5nIGluZmx1ZW5jZWQgYnkgYGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFgLCB3aGljaCBzZWVtcyB0byBiZSBkcml2ZW4gYnkgdGhlIGBodWdldGxiX2NtYT1gIHBhcmFtZXRlciBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgZWFybHkgb24uXG5cblRvIGFjdHVhbGx5IHRlc3QgdGhpcyBwcm9wZXJseSwgdGhlIGZ1enplciAoU3l6a2FsbGVyIGluIHRoaXMgY2FzZSkgd291bGQgbmVlZCB0byBiZSBib290ZWQgd2l0aCB0aGF0IGBodWdldGxiX2NtYT1gIHBhcmFtZXRlci4gTm93LCBJIGtub3cgU3l6a2FsbGVyICpjYW4qIHBhc3MgYm9vdCBwYXJhbWV0ZXJzLCBpZiBpdCdzIHNldCB1cCB0byBkbyBzby4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIGZ1enppbmcgd29ya2Zsb3cgdGhhdCBJJ20gc2V0dGluZyB1cCBkb2Vzbid0IGRpcmVjdGx5IGNvbnRyb2wgdGhlIGJvb3QgcGFyYW1ldGVyczsgd2UganVzdCBzdXBwbHkgdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5TbywgY291bGQgU3l6a2FsbGVyIGFscmVhZHkgaGF2ZSBgaHVnZXRsYl9jbWE9YCBpbiBvbmUgb2YgaXRzIGNvbmZpZ3M/IE9yLCBtYXliZSwgaXMgaXQgYWJsZSB0byBzZXQgaXQgYnkgZGVmYXVsdD8gTGV0J3MgcnVsZSB0aGF0IG91dC4gSG9sZCBvbiwgYGh1Z2V0bGJfY21hX3NpemVgIGlzIGluaXRpYWxpemVkIHRvIDAgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBhIG5vIG9uIHRoZSBzZWNvbmQgb3B0aW9uLlxuXG5Pa2F5LCBsZXQgbWUgYmFjayB1cCBhIG1pbnV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgYGh1Z2V0bGJfY21hX3NpemVgIG1pZ2h0IGJlIHNldD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgdHJhY2UgYWxsIHBvc3NpYmxlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjUxLjY4ODU5MDA3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMjE5MzIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY21hLmM9MTc9c3RhdGljIHN0cnVjdCBjbWEgKmh1Z2V0bGJfY21hW01BWF9OVU1OT0RFU10gX19yb19hZnRlcl9pbml0O1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTtcXG5tbS9odWdldGxiX2NtYS5jLTE5LXN0YXRpYyBib29sIGh1Z2V0bGJfY21hX29ubHkgX19yb19hZnRlcl9pbml0O1xcbm1tL2h1Z2V0bGJfY21hLmM6MjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYy0yMS1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjg9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMzUtXFxubW0vaHVnZXRsYl9jbWEuYzozNjpcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0zNy1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTA1PXN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEoY2hhciAqcClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTIxLVxcdFxcdFxcdHRtcCA9IG1lbXBhcnNlKHMsIFxcdTAwMjZzKTtcXG5tbS9odWdldGxiX2NtYS5jOjEyMjpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9IHRtcDtcXG5tbS9odWdldGxiX2NtYS5jOjEyMzpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplICs9IHRtcDtcXG5tbS9odWdldGxiX2NtYS5jLTEyNC1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTMzLVxcdFxcdH0gZWxzZSB7XFxubW0vaHVnZXRsYl9jbWEuYzoxMzQ6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSA9IG1lbXBhcnNlKHAsIFxcdTAwMjZwKTtcXG5tbS9odWdldGxiX2NtYS5jLTEzNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTU2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTYxLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTYyOlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jLTE2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE4Mi1cXHRmb3IgKG5pZCA9IDA7IG5pZCBcXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkKyspIHtcXG5tbS9odWdldGxiX2NtYS5jOjE4MzpcXHRcXHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XFxubW0vaHVnZXRsYl9jbWEuYy0xODQtXFx0XFx0aWYgKHNpemUgPT0gMClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTk2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTk3OlxcdFxcdGh1Z2V0bGJfY21hX3NpemUgLT0gc2l6ZTtcXG5tbS9odWdldGxiX2NtYS5jOjE5ODpcXHRcXHRodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9IDA7XFxubW0vaHVnZXRsYl9jbWEuYy0xOTktXFx0fVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yMDEtXFx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cXG5tbS9odWdldGxiX2NtYS5jOjIwMjpcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0yMDMtXFx0XFx0cmV0dXJuO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjA0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjA1OlxcdGlmICghSVNfQUxJR05FRChodWdldGxiX2NtYV9zaXplLCBnaWdhbnRpY19wYWdlX3NpemUpKSB7XFxubW0vaHVnZXRsYl9jbWEuYy0yMDYtXFx0XFx0cHJfd2FybihcXFwiaHVnZXRsYl9jbWE6IGNtYSBhcmVhIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxcXG5cXFwiLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjA3LVxcdFxcdFxcdGdpZ2FudGljX3BhZ2Vfc2l6ZSAvIFNaXzFNKTtcXG5tbS9odWdldGxiX2NtYS5jOjIwODpcXHRcXHRodWdldGxiX2NtYV9zaXplID0gMDtcXG5tbS9odWdldGxiX2NtYS5jLTIwOS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTIxNi1cXHRcXHQgKi9cXG5tbS9odWdldGxiX2NtYS5jOjIxNzpcXHRcXHRwZXJfbm9kZSA9IERJVl9ST1VORF9VUChodWdldGxiX2NtYV9zaXplLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjE4LVxcdFxcdFxcdFxcdFxcdG5vZGVzX3dlaWdodChodWdldGxiX2Jvb3RtZW1fbm9kZXMpKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjIwLVxcdFxcdHByX2luZm8oXFxcImh1Z2V0bGJfY21hOiByZXNlcnZlICVsdSBNaUIsIHVwIHRvICVsdSBNaUIgcGVyIG5vZGVcXFxcblxcXCIsXFxubW0vaHVnZXRsYl9jbWEuYzoyMjE6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSAvIFNaXzFNLCBwZXJfbm9kZSAvIFNaXzFNKTtcXG5tbS9odWdldGxiX2NtYS5jLTIyMi1cXHR9XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTIyOS1cXHRcXHRpZiAobm9kZV9zcGVjaWZpY19jbWFfYWxsb2MpIHtcXG5tbS9odWdldGxiX2NtYS5jOjIzMDpcXHRcXHRcXHRpZiAoaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPT0gMClcXG5tbS9odWdldGxiX2NtYS5jLTIzMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5tbS9odWdldGxiX2NtYS5jLTIzMi1cXG5tbS9odWdldGxiX2NtYS5jOjIzMzpcXHRcXHRcXHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XFxubW0vaHVnZXRsYl9jbWEuYy0yMzQtXFx0XFx0fSBlbHNlIHtcXG5tbS9odWdldGxiX2NtYS5jOjIzNTpcXHRcXHRcXHRzaXplID0gbWluKHBlcl9ub2RlLCBodWdldGxiX2NtYV9zaXplIC0gcmVzZXJ2ZWQpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjM2LVxcdFxcdH1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjU2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjU3OlxcdFxcdGlmIChyZXNlcnZlZCBcXHUwMDNlPSBodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjU4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNjItXFx0XFx0LypcXG5tbS9odWdldGxiX2NtYS5jOjI2MzpcXHRcXHQgKiBodWdldGxiX2NtYV9zaXplIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFsbG9jYXRpb25zIGZyb21cXG5tbS9odWdldGxiX2NtYS5jLTI2NC1cXHRcXHQgKiBjbWEgYXJlIHBvc3NpYmxlLiAgU2V0IHRvIHplcm8gaWYgbm8gY21hIHJlZ2lvbnMgYXJlIHNldCB1cC5cXG5tbS9odWdldGxiX2NtYS5jLTI2NS1cXHRcXHQgKi9cXG5tbS9odWdldGxiX2NtYS5jOjI2NjpcXHRcXHRodWdldGxiX2NtYV9zaXplID0gMDtcXG5tbS9odWdldGxiX2NtYS5jLTI2Ny19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI3ND11bnNpZ25lZCBsb25nIF9faW5pdCBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yNzUte1xcbm1tL2h1Z2V0bGJfY21hLmM6Mjc2OlxcdHJldHVybiBodWdldGxiX2NtYV9zaXplO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjc3LX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjc5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjgwLXtcXG5tbS9odWdldGxiX2NtYS5jOjI4MTpcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0yODItXFx0XFx0aHVnZXRsYl9jbWFfb25seSA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyODo1NC41MjA3ODkwNjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI5NTA4MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5emthbGxlciBJbnRlcmFjdGlvbiB3aXRoIEh1Z2VUTEIgQ01BIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYGh1Z2V0bGJfY21hX3NpemVgIHNldHRpbmcgaXMgZXhjbHVzaXZlbHkgaGFuZGxlZCB0aHJvdWdoIGBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hYC4gVGhlIGtleSBpcyB0aGF0IHN5emthbGxlciAqY2FuKiBkaXJlY3RseSBtYW5pcHVsYXRlIHRoaXMgdmFsdWUgdmlhIHRoZSBjb21tYW5kIGxpbmUsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgaHVnZXRsYl9jbWE9YCBwYXJhbWV0ZXIgaWYgaXQncyBhd2FyZSBvZiBpdC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC5cblxuR2l2ZW4gdGhpcyBpcyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCB0aGVyZWZvcmUgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLlxuXG5UaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgaXMgYWZmZWN0ZWQuIFNvLCBgRm9jdXNTeW1ib2xzYCBpcyBnb2luZyB0byBiZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC5cblxuTm93LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IGVuYWJsaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucy4gQ2xlYXJseSwgYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgIGFyZSBlc3NlbnRpYWwuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTlVNQWAgbWlnaHQgYmUgaW1wb3J0YW50IGZvciBgbm9kZW1hc2tgIHRvIGhhdmUgaXRzIGZ1bGwgbWVhbmluZywgYnV0IGBDUFVTRVRTYCBhbmQgYENNQWAgYXJlIHRoZSBtYWluIHBpZWNlcy5cblxuSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDUFVTRVRTYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UuIEFoYSEgSXQgZGVwZW5kcyBvbiBgQ0dST1VQU2AuIEkgbmVlZCB0byByZXZpZXcgYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1BVU0VUU2AgYW5kIHRvIGJlIHN1cmUgSSBoYXZlIGFsbCB0aGUgY29uZmlndXJhdGlvbnMgY29ycmVjdGx5IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyOTowMy44MTU4NzI0MzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDU2NjEwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVVNFVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyODQ9Y29uZmlnIENHUk9VUF9IVUdFVExCXFxuLS1cXG5pbml0L0tjb25maWctMTI5OS1cXG5pbml0L0tjb25maWc6MTMwMDpjb25maWcgQ1BVU0VUU1xcbmluaXQvS2NvbmZpZy0xMzAxLVxcdGJvb2wgXFxcIkNwdXNldCBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzMTItXFxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMxNC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MDUuMzIxNTM3ODA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDc0ODEzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXNzdWUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgYSBzZXR0aW5nIHJlbGF0ZWQgdG8gYSBmZWF0dXJlIEknbSBmYW1pbGlhciB3aXRoIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwsIGZ1bmRhbWVudGFsIG9wdGlvbnMgYXJlIGRlZmluZWQuIE15IG1lbnRhbCBtYXAgb2YgdGhlIEtjb25maWcgaGllcmFyY2h5IHN1Z2dlc3RzIGxpbmUgMTMwMCBpcyBhIGxpa2VseSBsb2NhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBhbnkgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgcHJvYmxlbS4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgY2x1ZXMgcmVsYXRlZCB0byB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eSBvciBmb3IgYW55IGltbWVkaWF0ZSBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTEuMDY5MDIxNTY4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5NTpcXHRcXHQgIEh1Z2VUTEIgcGFnZXMgYmV5b25kIGl0cyBsaW1pdC4gVGhpcyByZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8ga25vd1xcbjEyOTY6XFx0XFx0ICBiZWZvcmVoYW5kIGhvdyBtdWNoIEh1Z2VUTEIgcGFnZXMgaXQgd291bGQgcmVxdWlyZSBmb3IgaXRzIHVzZS4gVGhlXFxuMTI5NzpcXHRcXHQgIGNvbnRyb2wgZ3JvdXAgaXMgdHJhY2tlZCBpbiB0aGUgdGhpcmQgcGFnZSBscnUgcG9pbnRlci4gVGhpcyBtZWFuc1xcbjEyOTg6XFx0XFx0ICB0aGF0IHdlIGNhbm5vdCB1c2UgdGhlIGNvbnRyb2xsZXIgd2l0aCBodWdlIHBhZ2UgbGVzcyB0aGFuIDMgcGFnZXMuXFxuMTI5OTpcXHRcXG4xMzAwOlxcdGNvbmZpZyBDUFVTRVRTXFxuMTMwMTpcXHRcXHRib29sIFxcXCJDcHVzZXQgY29udHJvbGxlclxcXCJcXG4xMzAyOlxcdFxcdGRlcGVuZHMgb24gU01QXFxuMTMwMzpcXHRcXHRzZWxlY3QgVU5JT05fRklORFxcbjEzMDQ6XFx0XFx0c2VsZWN0IENQVV9JU09MQVRJT05cXG4xMzA1OlxcdFxcdGhlbHBcXG4xMzA2OlxcdFxcdCAgVGhpcyBvcHRpb24gd2lsbCBsZXQgeW91IGNyZWF0ZSBhbmQgbWFuYWdlIENQVVNFVHMgd2hpY2hcXG4xMzA3OlxcdFxcdCAgYWxsb3cgZHluYW1pY2FsbHkgcGFydGl0aW9uaW5nIGEgc3lzdGVtIGludG8gc2V0cyBvZiBDUFVzIGFuZFxcbjEzMDg6XFx0XFx0ICBNZW1vcnkgTm9kZXMgYW5kIGFzc2lnbmluZyB0YXNrcyB0byBydW4gb25seSB3aXRoaW4gdGhvc2Ugc2V0cy5cXG4xMzA5OlxcdFxcdCAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIG9uIGxhcmdlIFNNUCBvciBOVU1BIHN5c3RlbXMuXFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEzMTI6XFx0XFxuMTMxMzpcXHRjb25maWcgQ1BVU0VUU19WMVxcbjEzMTQ6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI5OjExLjA2OTE4MjMyOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjgyNDc2NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBIdWdlVExCIGFuZCBDTUEgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgcmVsYXRlZCB0byBIdWdlVExCIGFuZCBDTUEsIHNwZWNpZmljYWxseSB3aXRoaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBDUFVTRVRTYCBkZXBlbmRzIG9uIGBTTVBgLCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGVuYWJsZWQgaW4gb3VyIGNvbmZpZ3VyYXRpb25zLiBBZGRpdGlvbmFsbHksIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gQSBxdWVzdGlvbiBwb3BzIHVwOiBpcyBgTlVNQWAgYSByZXF1aXJlbWVudCBoZXJlPyBXZSBjYW4gY2hlY2sgYG5vZGVfaXNzZXRgIGFuZCBgbm9kZW1hc2tfdGAgdG8gZGV0ZXJtaW5lIGlmIGBOVU1BYCBpcyBhIHJlcXVpcmVtZW50LlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgbm9kZW1hc2tfdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9ub2RlbWFzay5oYC4gRXZlbiB3aXRob3V0IGBOVU1BYCwgaXQncyBhdmFpbGFibGUsIHRob3VnaCBpdCdsbCBiZSBsaW1pdGVkIHRvIGEgc2luZ2xlIG5vZGUgKG5vZGUgMCkuIFRoZSByZWFsIG11bHRpLW5vZGUgYmVoYXZpb3Igb25seSBraWNrcyBpbiB3aGVuIGBOVU1BYCBpcyBlbmFibGVkLiBUaGUgYnVnICpjb3VsZCogYmUgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zLCBidXQgc2luY2UgYE5VTUFgIGlzIHR5cGljYWxseSBlbmFibGVkIGluIG91ciBzeXprYWxsZXIgY29uZmlncywgdGhhdCBzZWVtcyBsZXNzIGxpa2VseS4gTGV0J3MgcmV2aXNpdCB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5UaGUgcGF0Y2gncyBjb3JlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIGJlZm9yZSBpdCBldmVuIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGZyb20gYGh1Z2V0bGJfY21hW25pZF1gLiBJZiBgbm9kZW1hc2tgIGlzIE5VTEwsIGl0IGdyYWJzIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLCB3aGljaCBpcyBhIGR5bmFtaWMgdGhpbmcsIGFuZCB1c2VzIHRoYXQgaW5zdGVhZC4gVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgYWxsb2NhdGlvbiBtZWNoYW5pc20uIEl0J3Mgbm93IHJlc3BlY3RpbmcgdGhlIGFsbG93ZWQgbWVtb3J5IG5vZGVzIGRlZmluZWQgYnkgdGhlIGN1cnJlbnQgY3B1c2V0LlxuXG5UaGVyZWZvcmUsIHRoaXMgbWVyaXRzIGZvY3VzZWQgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3MgaW1wb3J0YW50IHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRvIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLlxuXG4qKkRlY2lzaW9uOioqIFdvcnRoRnV6emluZzogdHJ1ZVxuKipGb2N1c1N5bWJvbHM6KiogW1wiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJdXG4qKkVuYWJsZUNvbmZpZ3M6KiogW1wiSFVHRVRMQkZTXCIsIFwiQ01BXCIsIFwiQ1BVU0VUU1wiXVxuKipSZWFzb25pbmc6KiogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gY29uc2lkZXIgY3B1c2V0IG1lbXMgYWxsb3dlZCB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgZnJvemVuIGZvbGlvcyBmcm9tIENNQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDQsIk91dHB1dFRva2VucyI6MTA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTkuNzUxNjYxNjU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5NDg4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyOToxOS44MjM2MTY3NzJaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU1MjU1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTkuODI0MDYwOTQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MjU0ODA3MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IHRoZSB0YXNrJ3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Y3N2QxZThmNzI5NGQ0ODFjNmYyZDcyZThjYzM2MGJhZGU1ZWRlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMDU6MjY6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuY1xuaW5kZXggMzkzNDRkNmM3OGQ4NC4uM2FlOTM0NzA3OGU5YiAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfY21hLmNcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX2lubGluZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuQEAgLTMwLDExICszMSwyMyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuIFx0aW50IG5vZGU7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuK1x0bm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2s7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4rXHRpZiAoIW5vZGVtYXNrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG4rXG4rXHRcdGRvIHtcbitcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuK1x0XHRcdGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbitcdFx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG4rXG4rXHRcdG5vZGVtYXNrID0gXHUwMDI2bG9jYWxfbm9kZV9tYXNrO1xuK1x0fVxuK1xuK1x0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4gXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTkuODI0MDYxODgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MjU0NzgzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIE15IGluaXRpYWwgcmVhZCBzaG93cyBpdCdzIGludHJvZHVjaW5nIGEgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrO2AgdmFyaWFibGUgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlmIHRoZSBgbm9kZW1hc2tgIHBvaW50ZXIgaXMgbnVsbC4gVGhlbiwgaXQgdXNlcyBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIHRvIGRldGVybWluZSBpZiBhbGxvY2F0aW9uIGlzIHBlcm1pdHRlZCBmcm9tIGEgZ2l2ZW4gYGh1Z2V0bGJfY21hW25pZF1gLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbkxldCdzIGRpc3NlY3QgdGhpcyBpbml0aWFsaXphdGlvbiBibG9jayBmb3IgYGxvY2FsX25vZGVfbWFza2AuIEkgc2VlIHRoaXM6XG5cbmBgYGNcblx0aWYgKCFub2RlbWFzaykge1xuXHRcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG5cblx0XHRkbyB7XG5cdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuXHRcdFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuXHRcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xuXG5cdFx0bm9kZW1hc2sgPSBcdTAwMjZsb2NhbF9ub2RlX21hc2s7XG5cdH1cbmBgYFxuXG5SaWdodCwgYGxvY2FsX25vZGVfbWFza2AgaXMgYSBgbm9kZW1hc2tfdGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBiaXRtYXAuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgdGhlIGFzc2lnbm1lbnQ6IGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YC4gVGhpcyBpcyBhIHN0cnVjdCBjb3B5LiBUaGUgZW50aXJlIGJpdG1hcCB3aXRoaW4gYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgZ2V0cyBjb3BpZWQgdG8gYGxvY2FsX25vZGVfbWFza2AuICBTbywgdGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkdWUgdG8gbWVtb3J5LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYC4uLiB0aGF0J3MgZWl0aGVyIGEgZ2xvYmFsIG9yIGEgcGVyLXRhc2sgdmFyaWFibGUg4oCTIGEgbWFjcm8gZXhwYW5kaW5nIHRvIGBjdXJyZW50LVx1MDAzZW1lbXNfYWxsb3dlZGAgdG8gYmUgcHJlY2lzZS4gQW5kIGNyaXRpY2FsbHksIGl0J3MgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGFzc2lnbm1lbnQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUg4oCTIGluY2x1ZGluZyB0aGUgYml0bWFwLiBUaGUgcmVzdWx0aW5nIGBsb2NhbF9ub2RlX21hc2tgIGlzLCB0aGVyZWZvcmUsIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXG5cblNvLCBpbiBjb25jbHVzaW9uLCBJIGRvbid0IHNlZSAqYW55KiBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlLiBUaGUgcGF0Y2ggc2ltcGx5IGFkZHMgYSBub2RlbWFzayBjaGVjayB0byB0aGUgaHVnZXRsYiBDTUEgYWxsb2NhdGlvbiBwYXRoLCBjb3JyZWN0bHkgdXNpbmcgYW4gaW5pdGlhbGl6ZWQgbm9kZW1hc2sgdG8gZW5mb3JjZSBtZW1vcnkgbm9kZSByZXN0cmljdGlvbnMuIE5vIEtNU0FOIGZsYWcgaXMgbmVlZGVkLiBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTAsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MzUuMDc4ODQ4MjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2sncyBgbWVtc19hbGxvd2VkYCBub2RlbWFzayB3aGVuIGFsbG9jYXRpbmcgYSBDTUEgZm9saW8uIEl0IGludHJvZHVjZXMgYSBsb2NhbCBgbm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2tgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IHRoZSB0YXNrJ3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 04:44:25 +0000 UTC FinishedAt: 2026-08-09 05:29:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "series_id": "9cc03985-fbf7-4975-86f2-8766df7c689a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2smIzM5O3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB0byBjb25zaWRlciBjcHVzZXQgbWVtcyBhbGxvd2VkIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBmcm96ZW4gZm9saW9zIGZyb20gQ01BLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmNzdkMWU4ZjcyOTRkNDgxYzZmMmQ3MmU4Y2MzNjBiYWRlNWVkZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDA1OjI2OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zYWU5MzQ3MDc4ZTliIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1c2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC0zMCwxMSAmIzQzOzMxLDIzIEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4mIzQzO1x0bm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2s7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4mIzQzO1x0aWYgKCFub2RlbWFzaykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4mIzQzO1x0XHRcdGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiYjNDM7XHRcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xuJiM0MztcbiYjNDM7XHRcdG5vZGVtYXNrID0gXHUwMDI2bG9jYWxfbm9kZV9tYXNrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4gXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Y3N2QxZThmNzI5NGQ0ODFjNmYyZDcyZThjYzM2MGJhZGU1ZWRlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMDU6MjY6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuYwppbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zYWU5MzQ3MDc4ZTliIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2NtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1faW5saW5lLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwpAQCAtMzAsMTEgJiM0MzszMSwyMyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWludCBub2RlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwomIzQzOwlub2RlbWFza190IGxvY2FsX25vZGVfbWFzazsKIAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaHVnZXRsYl9jbWFbbmlkXSkKJiM0MzsJaWYgKCFub2RlbWFzaykgewomIzQzOwkJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKJiM0MzsKJiM0MzsJCWRvIHsKJiM0MzsJCQljcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpOwomIzQzOwkJCWxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDsKJiM0MzsJCX0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpOwomIzQzOwomIzQzOwkJbm9kZW1hc2sgPSAmYW1wO2xvY2FsX25vZGVfbWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vaHVnZXRsYl9jbWEuY2AsIHNwZWNpZmljYWxseSB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBhIG5ldyBhZGRpdGlvbiBvZiBjcHVzZXQgbm9kZW1hc2sgY2hlY2tpbmcgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgZnJvemVuIGZvbGlvIGZyb20gQ01BIGZvciBodWdldGxiLiBUaGF0JiMzOTtzIGEgc2Vuc2libGUgYWRkaXRpb24sIGFuZCBzb21ldGhpbmcgSSYjMzk7dmUgY29uc2lkZXJlZCBpbXBsZW1lbnRpbmcgbXlzZWxmIGluIHRoZSBwYXN0LCBzbyBJJiMzOTttIGludGVyZXN0ZWQgdG8gc2VlIHRoZSBhcHByb2FjaC4KCkVzc2VudGlhbGx5LCB0aGUgbG9naWMgc2VlbXMgdG8gYmU6IHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBpdCYjMzk7cyBkZWZhdWx0aW5nIHRvIHVzaW5nIHRoZSBjdXJyZW50IGNwdXNldCBtZW1zIGFsbG93ZWQuIFRoYXQmIzM5O3MgYSBnb29kIGZhaWwtc2FmZSwgcHJldmVudGluZyBhbGxvY2F0aW9uIGZyb20gbm9kZXMgdGhhdCBhcmVuJiMzOTt0IGFsbG93ZWQgYnkgdGhlIGN1cnJlbnQgY3B1c2V0LiBUaGVuLCBjcnVjaWFsbHksIGl0IGNoZWNrcyBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIGJlZm9yZSB0cnlpbmcgdG8gYWN0dWFsbHkgYWxsb2NhdGUgYW55dGhpbmcgZnJvbSBgaHVnZXRsYl9jbWFbbmlkXWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG5vZGVtYXNrIGVuZm9yY2VtZW50LiBTbywgdG8gYmUgY2xlYXIsIGl0IGlzIHZlcmlmeWluZyBhIG5vZGUgaXMgYWxsb3dlZCBiZWZvcmUgZXZlbiB0cnlpbmcgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IG5vZGUmIzM5O3MgQ01BLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IGNsZWFubHkgaXQmIzM5O3MgaW50ZWdyYXRlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBub2RlbWFzayBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggTlVNQSBzZXR1cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMzY0LVxubW0vaHVnZXRsYi5jOjEzNjU6XHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xubW0vaHVnZXRsYi5jLTEzNjYtXHRpZiAoZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yMj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNy1cbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmg9Nj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5oLTgtXHRcdFx0XHQgICAgICBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzayk7XG4tLVxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5oLTE5LVxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXHRcdGdmcF90IGdmcF9tYXNrLFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlRyYWNpbmcgYSBDcml0aWNhbCBQYXRoIGluIEh1Z2VUTEIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsLi4uIGFoIHllcywgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGlzIHJpZ2h0IHRoZXJlIGluIGBtbS9odWdldGxiLmNgLiBUaGlzIGlzbiYjMzk7dCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uLCB0aGlzIGlzICpjb3JlKiBrZXJuZWwgbG9naWMsIHJpZ2h0IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbi4gSXQgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmcm9tIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSByZXNlcnZlZCBwYWdlcy4gRGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYG1tL2h1Z2V0bGJfY21hLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBhcHByb3ByaWF0ZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gQXJlIHRoZSBuZWNlc3NhcnkgQ01BIG9wdGlvbnMgY29tcGlsZWQgaW4/IEFyZSB0aGUgSHVnZVRMQiBzZXR0aW5ncyBjb3JyZWN0PyBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxhY2UgZm9yIHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBwYXRoIHRvIGZ1bmN0aW9uIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjAyLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1MC1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNC1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDUtXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI3ODp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cbi0tXG5tbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYzoxOTpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmMtMjAtc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNDI9ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xNDMtXG5tbS9odWdldGxiX2NtYS5jOjE0NDpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTQ1LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTQ2Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0Ny19XG5tbS9odWdldGxiX2NtYS5jLTE0OC1cbm1tL2h1Z2V0bGJfY21hLmM6MTQ5OmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE1MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTUxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTU2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTE2NC1cbm1tL2h1Z2V0bGJfY21hLmM6MTY1Olx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG5tbS9odWdldGxiX2NtYS5jLTE2Ni1cdGlmICghb3JkZXIpIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI2OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0yNzAte1xubW0vaHVnZXRsYl9jbWEuYzoyNzE6XHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjcyLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI3OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI4MS1cdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmM6MjgyOlx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG5tbS9odWdldGxiX2NtYS5jLTI4My19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yODU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI4OS1cbm1tL2h1Z2V0bGJfY21hLmM6MjkwOlx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjkxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTMwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGh1Z2V0bGJfY21hLmNgIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vaHVnZXRsYl9jbWEuY2AsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGlzIGZpbGUgb25seSBnZXRzIGJ1aWx0IHdoZW4gYm90aCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgYWN0aXZlIOKAkyBtYWtlcyBzZW5zZS4gVGhlIGtleSBtb2RpZmljYXRpb24gYXBwZWFycyB0byBiZSB3aXRoaW4gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gVGhpcyBjaGFuZ2UgbGV2ZXJhZ2VzIGNwdXNldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uczogYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgLCBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCwgYW5kIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpYC4gVGhlc2UgYXJlLCBvZiBjb3Vyc2UsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvY3B1c2V0LmhgLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYW5kIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUsIGlzIHdoZXRoZXIgdGhpcyBjcHVzZXQgZGVwZW5kZW5jeSBpcyAqc3RyaWN0bHkqIGEgYnVpbGQgcmVxdWlyZW1lbnQuIENhbiB0aGUgY29kZSBmdW5jdGlvbiBjb3JyZWN0bHkgaWYgYENPTkZJR19DUFVTRVRTYCBpcyAqbm90KiBlbmFibGVkLCBvciBpcyBpdCBhIGhhcmQgZGVwZW5kZW5jeT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHRoZSBydW50aW1lIGJlaGF2aW9yIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy4gSXMgaXQgYSBidWlsZC10aW1lIGNvbmRpdGlvbmFsLCBvciBhIHJ1bnRpbWUgcmVxdWlyZW1lbnQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMT1leHRlcm4gYm9vbCBsb2NrZGVwX2lzX2NwdXNldF9oZWxkKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyNzogKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjgtICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0xMzU9ZXh0ZXJuIHZvaWQgY3B1c2V0X3Jlc2V0X3NjaGVkX2RvbWFpbnModm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTM4OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGlzIHJlcXVpcmVkIHdoZW4gbWFraW5nIGRlY2lzaW9ucyBpbnZvbHZpbmdcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM5LSAqIG1lbXNfYWxsb3dlZCBzdWNoIGFzIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIG1lbXNfYWxsb3dlZCBjYW4gYmUgdXBkYXRlZCBpblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDE6ICogY2F1c2luZyBwcm9jZXNzIGZhaWx1cmUuIEEgcmV0cnkgbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGFuZFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDItICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkgcHJldmVudHMgdGhlc2UgYXJ0aWZpY2lhbCBmYWlsdXJlcy5cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQ1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1My0gKiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIG9wZXJhdGlvbiB0aGF0IHRvb2sgcGxhY2UgYWZ0ZXJcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTU0OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIG1heSBoYXZlIGZhaWxlZCBhcnRpZmljaWFsbHkgZHVlIHRvIGEgY29uY3VycmVudFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yODg9c3RhdGljIGlubGluZSB2b2lkIHNldF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCBub2RlbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5MS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjkyOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XG4tLVxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0xMDExLVx0XHRkbyB7XG5tbS9maWxlbWFwLmM6MTAxMjpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vZmlsZW1hcC5jLTEwMTMtXHRcdFx0biA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTtcbi0tXG5tbS9odWdldGxiLmM9MTI3NT1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0OlxubW0vaHVnZXRsYi5jOjEyOTE6XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYi5jLTEyOTItXHRmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBnZnBfem9uZShnZnBfbWFzayksIG5tYXNrKSB7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNDItXHRcdGRvIHtcbm1tL2h1Z2V0bGJfY21hLmM6NDM6XHRcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL2h1Z2V0bGJfY21hLmMtNDQtXHRcdFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTA2LVx0LyogdG8gcHJldmVudCBtaXNjb3VudCB1c2UgdHNrLVx1MDAzZW1lbXNfYWxsb3dlZF9zZXEgdG8gZGV0ZWN0IHJlYmluZCAqL1xubW0vbWVtcG9saWN5LmM6MjEwNzpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9tZW1wb2xpY3kuYy0yMTA4LVx0bm9kZSA9IGN1cnJlbnQtXHUwMDNlaWxfcHJldjtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTIzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vbWVtcG9saWN5LmMtMjEyOS1cdGRvIHtcbm1tL21lbXBvbGljeS5jOjIxMzA6XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9tZW1wb2xpY3kuYy0yMTMxLVx0XHRuaWQgPSBuZXh0X25vZGVfaW4oY3VycmVudC1cdTAwM2VpbF9wcmV2LCBwb2xpY3ktXHUwMDNlbm9kZXMpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI2MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjU1LVx0ZG8ge1xubW0vbWVtcG9saWN5LmM6MjY1NjpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTI2NTctXHRcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcdTAwMjZub2Rlcyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3MjU9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00NzY0LVx0Y29tcGFjdF9wcmlvcml0eSA9IERFRl9DT01QQUNUX1BSSU9SSVRZO1xubW0vcGFnZV9hbGxvYy5jOjQ3NjU6XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vcGFnZV9hbGxvYy5jLTQ3NjYtXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcbi0tXG5tbS9zaG93X21lbS5jPTExOT1zdGF0aWMgYm9vbCBzaG93X21lbV9ub2RlX3NraXAodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9zaG93X21lbS5jLTEyNS1cdCAqIG5vIG5vZGUgbWFzayAtIGFrYSBpbXBsaWNpdCBtZW1vcnkgbnVtYSBwb2xpY3kuIERvIG5vdCBib3RoZXIgd2l0aFxubW0vc2hvd19tZW0uYzoxMjY6XHQgKiB0aGUgc3luY2hyb25pemF0aW9uIC0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gLSBiZWNhdXNlIHdlIGRvIG5vdFxubW0vc2hvd19tZW0uYy0xMjctXHQgKiBoYXZlIHRvIGJlIHByZWNpc2UgaGVyZS5cbi0tXG5tbS9zbHViLmM9Mzg2Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9zbHViLmMtMzg5Ny1cdFx0Lypcbm1tL3NsdWIuYzozODk4Olx0XHQgKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFjY2Vzc2VzIGN1cnJlbnQtXHUwMDNlbWVtc19hbGxvd2VkX3NlcSxcbm1tL3NsdWIuYy0zODk5LVx0XHQgKiBhIHNlcWNvdW50X3NwaW5sb2NrX3QgdGhhdCBpcyBub3QgTk1JLXNhZmUuIERvIG5vdCBhY2Nlc3Ncbi0tXG5tbS9zbHViLmMtMzkwMy1cdFx0aWYgKGFsbG93X3NwaW4pXG5tbS9zbHViLmM6MzkwNDpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jLTM5MDUtXG4tLVxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTcyNDYtXHRkbyB7XG5tbS9zbHViLmM6NzI0NzpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL3NsdWIuYy03MjQ4LVx0XHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIENNQSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IGl0IGhhbmRsZXMgY3B1c2V0IG1lbXMuIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgpgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyB1c2VkIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBmcm96ZW4gZm9saW9zLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIGFjdGl2ZSBhbmQgcmVhY2hhYmxlLiBCYXNlZCBvbiB0aGUgZG9jdW1lbnRhdGlvbiwgaXQgaXMuIFRoZSBjYWxscyBjb21lIGZyb20gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGluIHR1cm4sIGlzIHJlYWNoZWQgdGhyb3VnaCBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgYW5kIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gLiBJIGtub3cgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggaHVnZXRsYmZzLiBTbyB5ZXMsIHRoaXMgaXMgYSByZWFsLCBsaXZlIGNvZGUgcGF0aC4KClRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfQ01BYCwgd2hpY2ggYXJlIGZhaXJseSBzdGFuZGFyZC4gQnV0IGhlcmXigJlzIHNvbWV0aGluZyB0byBub3RlOiBgQ09ORklHX0NQVVNFVFNgIGlzIGFsc28gbmVlZGVkIGZvciB0aGUgY3B1c2V0IGZlYXR1cmVzIHRvIGJlIGFjdGl2ZS4gVGhhdCBtZWFucyB0aGUgdXNlciBuZWVkcyB0byBoYXZlIGNwdXNldHMgZW5hYmxlZCBmb3IgdGhlIHBhdGNoIHRvIGRvIGFueXRoaW5nLiBFdmVuIGlmIGNwdXNldHMgYXJlIGRpc2FibGVkLCB0aGVyZSBhcmUgc3R1YnMgaW4gYGluY2x1ZGUvbGludXgvY3B1c2V0LmhgLiBMZXQgbWUgY2hlY2sgdGhhdCBpbmNsdWRlIGZpbGUgdG8gdmVyaWZ5IGV4YWN0bHkgaG93IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBkaXNhYmxlZCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtsbCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX21lbXNfYWxsb3dlZF9iZWdpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NwdXNldC5oPTIxPWV4dGVybiBib29sIGxvY2tkZXBfaXNfY3B1c2V0X2hlbGQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yNi0gKiBTdGF0aWMgYnJhbmNoIHJld3JpdGVzIGNhbiBoYXBwZW4gaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIGZvciBhIGdpdmVuXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjI3OiAqIGtleS4gSW4gY29kZSBwYXRocyB3aGVyZSB3ZSBuZWVkIHRvIGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFuZFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOC0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpIHRvIGdldCBhIGNvbnNpc3RlbnQgdmlldyBvZiBtZW1zX2FsbG93ZWQsIHdlIG5lZWRcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTEzNT1leHRlcm4gdm9pZCBjcHVzZXRfcmVzZXRfc2NoZWRfZG9tYWlucyh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTEzNy0vKlxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxMzg6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gaXMgcmVxdWlyZWQgd2hlbiBtYWtpbmcgZGVjaXNpb25zIGludm9sdmluZ1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzktICogbWVtc19hbGxvd2VkIHN1Y2ggYXMgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gbWVtc19hbGxvd2VkIGNhbiBiZSB1cGRhdGVkIGluXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0MC0gKiBwYXJhbGxlbCBhbmQgZGVwZW5kaW5nIG9uIHRoZSBuZXcgdmFsdWUgYW4gb3BlcmF0aW9uIGNhbiBmYWlsIHBvdGVudGlhbGx5XG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0MTogKiBjYXVzaW5nIHByb2Nlc3MgZmFpbHVyZS4gQSByZXRyeSBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gYW5kXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0Mi0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDMtICovXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0NDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDUte1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTUzLSAqIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgb3BlcmF0aW9uIHRoYXQgdG9vayBwbGFjZSBhZnRlclxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNTQ6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gbWF5IGhhdmUgZmFpbGVkIGFydGlmaWNpYWxseSBkdWUgdG8gYSBjb25jdXJyZW50XG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1NS0gKiB1cGRhdGUgb2YgbWVtc19hbGxvd2VkLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gaWZcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21lbXNfYWxsb3dlZChub2RlbWFza190IG5vZGVtYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjkxLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjkzLXtcbi0tXG5tbS9maWxlbWFwLmM9OTk5PXN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vZmlsZW1hcC5jLTEwMTEtXHRcdGRvIHtcbm1tL2ZpbGVtYXAuYzoxMDEyOlx0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9maWxlbWFwLmMtMTAxMy1cdFx0XHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xuLS1cbm1tL2h1Z2V0bGIuYz0xMjc1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTI5MC1yZXRyeV9jcHVzZXQ6XG5tbS9odWdldGxiLmM6MTI5MTpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9odWdldGxiLmMtMTI5Mi1cdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGdmcF96b25lKGdmcF9tYXNrKSwgbm1hc2spIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI4PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYl9jbWEuYy00Mi1cdFx0ZG8ge1xubW0vaHVnZXRsYl9jbWEuYzo0MzpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYl9jbWEuYy00NC1cdFx0XHRsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG4tLVxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxuLS1cbm1tL21lbXBvbGljeS5jLTIxMDYtXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXHUwMDNlbWVtc19hbGxvd2VkX3NlcSB0byBkZXRlY3QgcmViaW5kICovXG5tbS9tZW1wb2xpY3kuYzoyMTA3Olx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMDgtXHRub2RlID0gY3VycmVudC1cdTAwM2VpbF9wcmV2O1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMjM9c3RhdGljIHVuc2lnbmVkIGludCBpbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTI5LVx0ZG8ge1xubW0vbWVtcG9saWN5LmM6MjEzMDpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMzEtXHRcdG5pZCA9IG5leHRfbm9kZV9pbihjdXJyZW50LVx1MDAzZWlsX3ByZXYsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NTUtXHRkbyB7XG5tbS9tZW1wb2xpY3kuYzoyNjU2Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vbWVtcG9saWN5LmMtMjY1Ny1cdFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFx1MDAyNm5vZGVzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ3NjQtXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XG5tbS9wYWdlX2FsbG9jLmM6NDc2NTpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cdHpvbmVsaXN0X2l0ZXJfY29va2llID0gem9uZWxpc3RfaXRlcl9iZWdpbigpO1xuLS1cbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Nob3dfbWVtLmMtMTI1LVx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXG5tbS9zaG93X21lbS5jOjEyNjpcdCAqIHRoZSBzeW5jaHJvbml6YXRpb24gLSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiAtIGJlY2F1c2Ugd2UgZG8gbm90XG5tbS9zaG93X21lbS5jLTEyNy1cdCAqIGhhdmUgdG8gYmUgcHJlY2lzZSBoZXJlLlxuLS1cbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zODk3LVx0XHQvKlxubW0vc2x1Yi5jOjM4OTg6XHRcdCAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYWNjZXNzZXMgY3VycmVudC1cdTAwM2VtZW1zX2FsbG93ZWRfc2VxLFxubW0vc2x1Yi5jLTM4OTktXHRcdCAqIGEgc2VxY291bnRfc3BpbmxvY2tfdCB0aGF0IGlzIG5vdCBOTUktc2FmZS4gRG8gbm90IGFjY2Vzc1xuLS1cbm1tL3NsdWIuYy0zOTAzLVx0XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYzozOTA0Olx0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9zbHViLmMtMzkwNS1cbi0tXG5tbS9zbHViLmM9NzIzMT1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI0Ni1cdGRvIHtcbm1tL3NsdWIuYzo3MjQ3Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jLTcyNDgtXHRcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGFzIGEgcHJvbWlzaW5nIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyB0aGVyZSYjMzk7cyBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yIHRvIGJlIGV4cG9zZWQuIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYmFzZWQgb24gdGhlIGNvbnRleHQsIGFyZSBgSFVHRVRMQkZTYCwgYENNQWAsIGFuZCBgQ1BVU0VUU2AuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgZW5hYmxlZCBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBmdW5jdGlvbiBhcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHN5bWJvbC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gQWxyaWdodCwgaXQmIzM5O3Mgbm90IHN0YXRpYzsgaXQmIzM5O3MgZGVjbGFyZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9odWdldGxiX2NtYS5jYCwgc28gdGhhdCYjMzk7cyBnb29kLiBJdCBzaG91bGQgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmb3IgbXkgcHVycG9zZXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjcm9zc2NoZWNrIG9uIHRob3NlIGNvbmZpZyBkZXBlbmRlbmNpZXMuIExvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCwgSSBzZWUgdGhhdCBgb2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJfY21hLm9gIGlzIGluc2lkZSBhbiBgaWZkZWYgQ09ORklHX0NNQWAgYmxvY2suIFRoaXMgY29uZmlybXMgdGhhdCBgSFVHRVRMQkZTYCAqYW5kKiBgQ01BYCBhcmUsIGluIGZhY3QsIHJlcXVpcmVkLiBBbmQsIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoZSBjcHVzZXQtcmVsYXRlZCBsb2dpYywgSSBhbHNvIG5lZWQgYENQVVNFVFNgIGVuYWJsZWQgYmVjYXVzZSwgd2l0aG91dCBpdCwgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luYCBpcyBqdXN0IGEgc3R1Yi4gR29vZCwgSSYjMzk7dmUgZ290IG15IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duLgoKTGV0JiMzOTtzIGFsc28gdGFrZSBhIGxvb2sgYXQgdGhlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uIGluIGBtbS9odWdldGxiLmNgIHRvIHNlZSBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB0YXJnZXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTMyMD1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGIuYy0xMzYxLVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxubW0vaHVnZXRsYi5jLTEzNzgtXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE4NDYtXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxubW0vaHVnZXRsYi5jOjE4NDc6XHRcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XG5tbS9odWdldGxiLmMtMTg0OC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lLiBUaGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCB1bml2ZXJzYWxseSBhdmFpbGFibGUuIEl0JiMzOTtzIG9ubHkgZGVmaW5lZCB3aGVuICpib3RoKiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGFuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AgYXJlIHNldC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyBiYWNrdHJhY2sgYW5kIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4KCkZpcnN0LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhvc2UgdHdvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSG1tLCBhIHF1aWNrIHJlbWluZGVyLi4uIGBDT05GSUdfQ09OVElHX0FMTE9DYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgQ09ORklHX0NNQWAsIGlmIG1lbW9yeSBzZXJ2ZXMuIFRoYXQgc2VlbXMgcmlnaHQuIEFuZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIHR5cGljYWxseSBlbmFibGVkIGJ5IHRoZSBtb3JlICYjMzQ7bW9kZXJuJiMzNDsgYXJjaGl0ZWN0dXJlcywgdGhpbmdzIGxpa2UgeDg2LCBhcm02NCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBBbHJpZ2h0LCBJJiMzOTttIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUuCgpOb3csIGxldCBtZSBnbyBiYWNrIHRvIGBtbS9odWdldGxiX2NtYS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIElzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHVzZWQgb3V0c2lkZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dD8gSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBjYWxsIHNpdGVzIHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjI9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjctXG5tbS9odWdldGxiX2NtYS5jOjI4OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI5LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIEZ1bmN0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGVuYWJsZWQuIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgIG5lZWQgdG8gYmUgY29uZmlndXJlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBIVUdFVExCRlNgIGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IEtjb25maWcgbmFtZSBmb3IgdGhhdCBmZWF0dXJlLiBJdCYjMzk7cyBlYXN5IHRvIGdldCB0aGVzZSB0aGluZ3MgbWl4ZWQgdXAsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdXNpbmcgdGhlIHByb3BlciB0ZXJtaW5vbG9neSBhbmQgbG9va2luZyBhdCB0aGUgcmlnaHQgY29uZmlncy4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTWVtb3J5IE1hbmFnZW1lbnQgRGVlcCBEaXZlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZCBpcyBgSFVHRVRMQkZTYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2l0dWF0aW9uIHdoZXJlIHdlJiMzOTtyZSBsb29raW5nIHRvIHJlZHVjZSBUTEIgbWlzc2VzIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIGxhdGVuY3kuIFdlJiMzOTtyZSBleHBsaWNpdGx5IHdhbnRpbmcgdG8gd29yayB3aXRoIGh1Z2UgcGFnZXMgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKQnV0LCBiZWZvcmUgd2UgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHJvYWQsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgYW5nbGVzLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiwgbGV0JiMzOTtzIGFsc28gY2hlY2sgYENNQWAuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIG5lZWQgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucywgb3IgaXMgdGhpcyBtb3JlIGFib3V0IHVzZXItc3BhY2UgYWxsb2NhdGlvbiB3aXRoIGxhcmdlIHBhZ2VzLiBUaGlzIGNvdWxkIHJlcXVpcmUgYSBjaGVjayBmb3IgYW4gZW1iZWRkZWQgc3lzdGVtLCBkZXZpY2UgZHJpdmVyLCBvciByZWFsLXRpbWUgYXBwbGljYXRpb24/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgb25lIG1pZ2h0IHJlcXVpcmUgdGhlIG90aGVyIGJ1dCB0aGlzIHdvdWxkIGRlcGVuZCBoZWF2aWx5IG9uIHRoZSBzeXN0ZW0uIEJvdGggaGF2ZSB0aGVpciB0cmFkZSBvZmZzIGJ1dCBpdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgYm90aCBhcyB0aGUgaW50ZXJwbGF5IGlzIGNyaXRpY2FsLiBUaGUgbmVlZCBmb3IgcGh5c2ljYWwgY29udGlndWl0eSBvZnRlbiBkaWN0YXRlcyB0aGUgY2hvaWNlIGJldHdlZW4gYEhVR0VUTEJGU2AgYW5kIG1vcmUgc3RhbmRhcmQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLgoKU28sIGBIVUdFVExCRlNgIGlzIHRoZSBmb2N1cywgYnV0IGEgcXVpY2sgY2hlY2sgb24gYENNQWAgd2lsbCBjb25maXJtIHRoZSBmdWxsIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFwmIzM0O0RlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cdGludCBcJiMzNDtTaXplIGluIE1lZ2EgQnl0ZXNcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cdGludCBcJiMzNDtQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXHRib29sIFwmIzM0O1VzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cdGJvb2wgXCYjMzQ7VXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXHRib29sIFwmIzM0O1VzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVx0Ym9vbCBcJiMzNDtVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cdGludCBcJiMzNDtNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjcwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKUmlnaHQsICpDTUEqLi4uIEdvdCBpdC4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIGxldCYjMzk7cyBpbW1lZGlhdGVseSBwaXZvdCB0byBleHBsb3JpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gKkNQVVNFVFMqLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBhc3Nlc3MsIGNvbnNpZGVyaW5nIHRoZSBsaWtlbHkgcmVzb3VyY2UgYWxsb2NhdGlvbiBpbXBsaWNhdGlvbnMuIE5lZWQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIG9mIHRoZSBwdXp6bGUgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVTRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjg0PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuLS1cbmluaXQvS2NvbmZpZy0xMjk5LVxuaW5pdC9LY29uZmlnOjEzMDA6Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMzAxLVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMzEyLVxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcbmluaXQvS2NvbmZpZy0xMzE0LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBGdW5jdGlvbjogYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ1BVU0VUU2AgaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJcyBpdCB0aGUgb25seSBmdW5jdGlvbiBhZmZlY3RlZCBieSB0aGlzIHBhdGNoPyBTZWVtcyBsaWtlIGl0LCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24uCgpSaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGlubGluZWQuIExvb2tpbmcgYXQgYG1tL2h1Z2V0bGJfY21hLmNgLCB0aGUgZGVmaW5pdGlvbiBzaG93cyBpdCYjMzk7cyBub3Qgc3RhdGljIGFuZCBpdCYjMzk7cyBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCByZWFjaGFibGUgdmlhIHN5c2NhbGxzPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGludm9rZWQgdGhyb3VnaCBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgc2htZ2V0YCB3aXRoIGBTSE1fSFVHRVRMQmAsIG9yIHdyaXRpbmcgdG8gaHVnZXRsYmZzIGZpbGVzLiBTcGVjaWZpY2FsbHksIGFsbG9jYXRpbmcgYSBnaWdhbnRpYyBwYWdlLCBzYXkgYSAxR0IgcGFnZSBvbiB4ODYsIHRyaWdnZXJzIGEgY2FsbCB0byBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgdGhlIGZ1bmN0aW9uIHdlIGFyZSBpbnRlcmVzdGVkIGluLgoKVGhpcyBtZWFucyBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBJdCByZXF1aXJlcyB0aGUgc3lzdGVtIHRvIGhhdmUgZ2lnYW50aWMgcGFnZXMgY29uZmlndXJlZCBhbmQgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGZvciBodWdldGxiIGVuYWJsZWQuIFR5cGljYWxseSwgd2UmIzM5O2QgZW5hYmxlIENNQSBmb3IgaHVnZXRsYiB1c2luZyB0aGUga2VybmVsIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgYGh1Z2V0bGJfY21hPWAsIGFsdGhvdWdoIHNvbWUgYXJjaGl0ZWN0dXJlcyBtaWdodCBhbGxvY2F0ZSBpdCBieSBkZWZhdWx0LiBIb2xkIG9uLCBgaHVnZXRsYl9jbWFfcmVzZXJ2ZSgpYCBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgYm9vdC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgZnVuY3Rpb24gdG8gY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9yZXNlcnZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI3LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2N4bC9saW51eC9lYXJseS1ib290LnJzdDoxMjg6ICB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpIHtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI5OD1zdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKmh1Z2VfcHRlX2xvY2soc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzA4LSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DTUEpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA5OmV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxMC0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMxMTpzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTUxPXVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTU1LVxubW0vaHVnZXRsYl9jbWEuYzoxNTY6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTcte1xuLS1cbm1tL21tX2luaXQuYz0yNjk1PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxubW0vbW1faW5pdC5jLTI2OTYte1xubW0vbW1faW5pdC5jOjI2OTc6XHRodWdldGxiX2NtYV9yZXNlcnZlKCk7XG5tbS9tbV9pbml0LmMtMjY5OC1cdGh1Z2V0bGJfYm9vdG1lbV9hbGxvYygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc0OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipFYXJseSBJbml0aWFsaXphdGlvbiBvZiBIdWdlVExCIENNQSBSZXNlcnZlKioKClJpZ2h0LCBzbyBgaHVnZXRsYl9jbWFfcmVzZXJ2ZWAgaXMgdHJpZ2dlcmVkICp3aXRob3V0IGFueSBjb25kaXRpb25zKiBkdXJpbmcgdGhlIGBtbV9jb3JlX2luaXRfZWFybHlgIHN0YWdlIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZXR1cC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IG1lYW5zIHRoZSBzeXN0ZW0gaXMgc2V0dGluZyBhc2lkZSBzb21lIENNQSBtZW1vcnkgZm9yIEh1Z2VUTEJzIHZlcnkgZWFybHkgb24sIGJlZm9yZSBwb3RlbnRpYWxseSBtb3JlIGR5bmFtaWMgYWxsb2NhdGlvbiBjaG9pY2VzIGFyZSBtYWRlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBodWdldGxiX2NtYV9yZXNlcnZlYCBmdW5jdGlvbiBpdHNlbGYgbm93IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBob3cgdGhpcyBpbXBhY3RzIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eS4gVGhpcyBraW5kIG9mIHVwZnJvbnQgcmVzZXJ2YXRpb24gZGVmaW5pdGVseSBoYXMgaW1wbGljYXRpb25zIGZvciBmcmFnbWVudGF0aW9uLCBhbmQgdGhlIGVmZmljaWVuY3kgb2Ygc3Vic2VxdWVudCBtZW1vcnkgcmVxdWVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU2Olx0dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxuIDE1NzpcdHtcbiAxNTg6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVzZXJ2ZWQsIHBlcl9ub2RlLCBvcmRlciwgZ2lnYW50aWNfcGFnZV9zaXplO1xuIDE1OTpcdFx0Ym9vbCBub2RlX3NwZWNpZmljX2NtYV9hbGxvYyA9IGZhbHNlO1xuIDE2MDpcdFx0aW50IG5pZDtcbiAxNjE6XHRcbiAxNjI6XHRcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiAxNjM6XHRcdFx0cmV0dXJuO1xuIDE2NDpcdFxuIDE2NTpcdFx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG4gMTY2Olx0XHRpZiAoIW9yZGVyKSB7XG4gMTY3Olx0XHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IHRoZSBvcHRpb24gaXNuJiMzOTt0IHN1cHBvcnRlZCBieSBjdXJyZW50IGFyY2hcXG5cJiMzNDspO1xuIDE2ODpcdFx0XHRyZXR1cm47XG4gMTY5Olx0XHR9XG4gMTcwOlx0XG4gMTcxOlx0XHQvKlxuIDE3MjpcdFx0ICogSHVnZVRMQiBDTUEgcmVzZXJ2YXRpb24gaXMgcmVxdWlyZWQgZm9yIGdpZ2FudGljXG4gMTczOlx0XHQgKiBodWdlIHBhZ2VzIHdoaWNoIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgdmlhIHRoZVxuIDE3NDpcdFx0ICogcGFnZSBhbGxvY2F0b3IuIEp1c3Qgd2FybiBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlXG4gMTc1Olx0XHQgKiBicmVha2luZyB0aGlzIGFzc3VtcHRpb24uXG4gMTc2Olx0XHQgKi9cbiAxNzc6XHRcdFZNX1dBUk5fT04ob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUik7XG4gMTc4Olx0XHRnaWdhbnRpY19wYWdlX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDE3OTpcdFxuIDE4MDpcdFx0aHVnZXRsYl9ib290bWVtX3NldF9ub2RlcygpO1xuIDE4MTpcdFxuIDE4MjpcdFx0Zm9yIChuaWQgPSAwOyBuaWQgXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkJiM0MzsmIzQzOykge1xuIDE4MzpcdFx0XHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XG4gMTg0Olx0XHRcdGlmIChzaXplID09IDApXG4gMTg1Olx0XHRcdFx0Y29udGludWU7XG4gMTg2Olx0XG4gMTg3Olx0XHRcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcbiAxODg6XHRcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxuXCYjMzQ7LCBuaWQpO1xuIDE4OTpcdFx0XHR9IGVsc2UgaWYgKCFJU19BTElHTkVEKHNpemUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSkpIHtcbiAxOTA6XHRcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiBjbWEgYXJlYSBvZiBub2RlICVkIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxuXCYjMzQ7LFxuIDE5MTpcdFx0XHRcdFx0bmlkLCBnaWdhbnRpY19wYWdlX3NpemUgLyBTWl8xTSk7XG4gMTkyOlx0XHRcdH0gZWxzZSB7XG4gMTkzOlx0XHRcdFx0bm9kZV9zcGVjaWZpY19jbWFfYWxsb2MgPSB0cnVlO1xuIDE5NDpcdFx0XHRcdGNvbnRpbnVlO1xuIDE5NTpcdFx0XHR9XG4gMTk2Olx0XG4gMTk3Olx0XHRcdGh1Z2V0bGJfY21hX3NpemUgLT0gc2l6ZTtcbiAxOTg6XHRcdFx0aHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPSAwO1xuIDE5OTpcdFx0fVxuIDIwMDpcdFxuIDIwMTpcdFx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cbiAyMDI6XHRcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiAyMDM6XHRcdFx0cmV0dXJuO1xuIDIwNDpcdFxuIDIwNTpcdFx0aWYgKCFJU19BTElHTkVEKGh1Z2V0bGJfY21hX3NpemUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGh1Z2V0bGJfY21hX3NpemVgIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGNoZWNraW5nIGBodWdldGxiX2NtYV9zaXplYC4gTXkgZmlyc3QgdGhvdWdodCBpczogd2hlcmUgZG9lcyB0aGlzIHZhcmlhYmxlIGdldCBzZXQ/IEkgcmVtZW1iZXIgc2VlaW5nIGBodWdldGxiX2NtYV9zaXplYCBiZWluZyBpbmZsdWVuY2VkIGJ5IGBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hYCwgd2hpY2ggc2VlbXMgdG8gYmUgZHJpdmVuIGJ5IHRoZSBgaHVnZXRsYl9jbWE9YCBwYXJhbWV0ZXIgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGVhcmx5IG9uLgoKVG8gYWN0dWFsbHkgdGVzdCB0aGlzIHByb3Blcmx5LCB0aGUgZnV6emVyIChTeXprYWxsZXIgaW4gdGhpcyBjYXNlKSB3b3VsZCBuZWVkIHRvIGJlIGJvb3RlZCB3aXRoIHRoYXQgYGh1Z2V0bGJfY21hPWAgcGFyYW1ldGVyLiBOb3csIEkga25vdyBTeXprYWxsZXIgKmNhbiogcGFzcyBib290IHBhcmFtZXRlcnMsIGlmIGl0JiMzOTtzIHNldCB1cCB0byBkbyBzby4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIGZ1enppbmcgd29ya2Zsb3cgdGhhdCBJJiMzOTttIHNldHRpbmcgdXAgZG9lc24mIzM5O3QgZGlyZWN0bHkgY29udHJvbCB0aGUgYm9vdCBwYXJhbWV0ZXJzOyB3ZSBqdXN0IHN1cHBseSB0aGUgY29uZmlndXJhdGlvbnMuCgpTbywgY291bGQgU3l6a2FsbGVyIGFscmVhZHkgaGF2ZSBgaHVnZXRsYl9jbWE9YCBpbiBvbmUgb2YgaXRzIGNvbmZpZ3M/IE9yLCBtYXliZSwgaXMgaXQgYWJsZSB0byBzZXQgaXQgYnkgZGVmYXVsdD8gTGV0JiMzOTtzIHJ1bGUgdGhhdCBvdXQuIEhvbGQgb24sIGBodWdldGxiX2NtYV9zaXplYCBpcyBpbml0aWFsaXplZCB0byAwIGJ5IGRlZmF1bHQuIFNvLCB0aGF0JiMzOTtzIGEgbm8gb24gdGhlIHNlY29uZCBvcHRpb24uCgpPa2F5LCBsZXQgbWUgYmFjayB1cCBhIG1pbnV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgYGh1Z2V0bGJfY21hX3NpemVgIG1pZ2h0IGJlIHNldD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgdHJhY2UgYWxsIHBvc3NpYmxlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY21hLmM9MTc9c3RhdGljIHN0cnVjdCBjbWEgKmh1Z2V0bGJfY21hW01BWF9OVU1OT0RFU10gX19yb19hZnRlcl9pbml0O1xubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmM6MjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9odWdldGxiX2NtYS5jLTIxLVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjg9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiX2NtYS5jLTM1LVxubW0vaHVnZXRsYl9jbWEuYzozNjpcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMzctXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTA1PXN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEoY2hhciAqcClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTEyMS1cdFx0XHR0bXAgPSBtZW1wYXJzZShzLCBcdTAwMjZzKTtcbm1tL2h1Z2V0bGJfY21hLmM6MTIyOlx0XHRcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gdG1wO1xubW0vaHVnZXRsYl9jbWEuYzoxMjM6XHRcdFx0aHVnZXRsYl9jbWFfc2l6ZSAmIzQzOz0gdG1wO1xubW0vaHVnZXRsYl9jbWEuYy0xMjQtXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xMzMtXHRcdH0gZWxzZSB7XG5tbS9odWdldGxiX2NtYS5jOjEzNDpcdFx0XHRodWdldGxiX2NtYV9zaXplID0gbWVtcGFyc2UocCwgXHUwMDI2cCk7XG5tbS9odWdldGxiX2NtYS5jLTEzNS1cdFx0XHRicmVhaztcbi0tXG5tbS9odWdldGxiX2NtYS5jPTE1Nj12b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xNjEtXG5tbS9odWdldGxiX2NtYS5jOjE2MjpcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMTYzLVx0XHRyZXR1cm47XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xODItXHRmb3IgKG5pZCA9IDA7IG5pZCBcdTAwM2MgTUFYX05VTU5PREVTOyBuaWQmIzQzOyYjNDM7KSB7XG5tbS9odWdldGxiX2NtYS5jOjE4MzpcdFx0c2l6ZSA9IGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdO1xubW0vaHVnZXRsYl9jbWEuYy0xODQtXHRcdGlmIChzaXplID09IDApXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xOTYtXG5tbS9odWdldGxiX2NtYS5jOjE5NzpcdFx0aHVnZXRsYl9jbWFfc2l6ZSAtPSBzaXplO1xubW0vaHVnZXRsYl9jbWEuYzoxOTg6XHRcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gMDtcbm1tL2h1Z2V0bGJfY21hLmMtMTk5LVx0fVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjAxLVx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cbm1tL2h1Z2V0bGJfY21hLmM6MjAyOlx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0yMDMtXHRcdHJldHVybjtcbm1tL2h1Z2V0bGJfY21hLmMtMjA0LVxubW0vaHVnZXRsYl9jbWEuYzoyMDU6XHRpZiAoIUlTX0FMSUdORUQoaHVnZXRsYl9jbWFfc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xubW0vaHVnZXRsYl9jbWEuYy0yMDYtXHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IGNtYSBhcmVhIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxuXCYjMzQ7LFxubW0vaHVnZXRsYl9jbWEuYy0yMDctXHRcdFx0Z2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xubW0vaHVnZXRsYl9jbWEuYzoyMDg6XHRcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xubW0vaHVnZXRsYl9jbWEuYy0yMDktXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiX2NtYS5jLTIxNi1cdFx0ICovXG5tbS9odWdldGxiX2NtYS5jOjIxNzpcdFx0cGVyX25vZGUgPSBESVZfUk9VTkRfVVAoaHVnZXRsYl9jbWFfc2l6ZSxcbm1tL2h1Z2V0bGJfY21hLmMtMjE4LVx0XHRcdFx0XHRub2Rlc193ZWlnaHQoaHVnZXRsYl9ib290bWVtX25vZGVzKSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yMjAtXHRcdHByX2luZm8oXCYjMzQ7aHVnZXRsYl9jbWE6IHJlc2VydmUgJWx1IE1pQiwgdXAgdG8gJWx1IE1pQiBwZXIgbm9kZVxcblwmIzM0Oyxcbm1tL2h1Z2V0bGJfY21hLmM6MjIxOlx0XHRcdGh1Z2V0bGJfY21hX3NpemUgLyBTWl8xTSwgcGVyX25vZGUgLyBTWl8xTSk7XG5tbS9odWdldGxiX2NtYS5jLTIyMi1cdH1cbi0tXG5tbS9odWdldGxiX2NtYS5jLTIyOS1cdFx0aWYgKG5vZGVfc3BlY2lmaWNfY21hX2FsbG9jKSB7XG5tbS9odWdldGxiX2NtYS5jOjIzMDpcdFx0XHRpZiAoaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPT0gMClcbm1tL2h1Z2V0bGJfY21hLmMtMjMxLVx0XHRcdFx0Y29udGludWU7XG5tbS9odWdldGxiX2NtYS5jLTIzMi1cbm1tL2h1Z2V0bGJfY21hLmM6MjMzOlx0XHRcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcbm1tL2h1Z2V0bGJfY21hLmMtMjM0LVx0XHR9IGVsc2Uge1xubW0vaHVnZXRsYl9jbWEuYzoyMzU6XHRcdFx0c2l6ZSA9IG1pbihwZXJfbm9kZSwgaHVnZXRsYl9jbWFfc2l6ZSAtIHJlc2VydmVkKTtcbm1tL2h1Z2V0bGJfY21hLmMtMjM2LVx0XHR9XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNTYtXG5tbS9odWdldGxiX2NtYS5jOjI1NzpcdFx0aWYgKHJlc2VydmVkIFx1MDAzZT0gaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMjU4LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYyLVx0XHQvKlxubW0vaHVnZXRsYl9jbWEuYzoyNjM6XHRcdCAqIGh1Z2V0bGJfY21hX3NpemUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYWxsb2NhdGlvbnMgZnJvbVxubW0vaHVnZXRsYl9jbWEuYy0yNjQtXHRcdCAqIGNtYSBhcmUgcG9zc2libGUuICBTZXQgdG8gemVybyBpZiBubyBjbWEgcmVnaW9ucyBhcmUgc2V0IHVwLlxubW0vaHVnZXRsYl9jbWEuYy0yNjUtXHRcdCAqL1xubW0vaHVnZXRsYl9jbWEuYzoyNjY6XHRcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xubW0vaHVnZXRsYl9jbWEuYy0yNjctfVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjc0PXVuc2lnbmVkIGxvbmcgX19pbml0IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUodm9pZClcbm1tL2h1Z2V0bGJfY21hLmMtMjc1LXtcbm1tL2h1Z2V0bGJfY21hLmM6Mjc2Olx0cmV0dXJuIGh1Z2V0bGJfY21hX3NpemU7XG5tbS9odWdldGxiX2NtYS5jLTI3Ny19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yNzk9dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfdmFsaWRhdGVfcGFyYW1zKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI4MC17XG5tbS9odWdldGxiX2NtYS5jOjI4MTpcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmMtMjgyLVx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTczCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3l6a2FsbGVyIEludGVyYWN0aW9uIHdpdGggSHVnZVRMQiBDTUEgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZSBgaHVnZXRsYl9jbWFfc2l6ZWAgc2V0dGluZyBpcyBleGNsdXNpdmVseSBoYW5kbGVkIHRocm91Z2ggYGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFgLiBUaGUga2V5IGlzIHRoYXQgc3l6a2FsbGVyICpjYW4qIGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhpcyB2YWx1ZSB2aWEgdGhlIGNvbW1hbmQgbGluZSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBodWdldGxiX2NtYT1gIHBhcmFtZXRlciBpZiBpdCYjMzk7cyBhd2FyZSBvZiBpdC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4KCkdpdmVuIHRoaXMgaXMgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgdGhlcmVmb3JlIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuCgpUaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgaXMgYWZmZWN0ZWQuIFNvLCBgRm9jdXNTeW1ib2xzYCBpcyBnb2luZyB0byBiZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4KCk5vdywgd2UgbmVlZCB0byB0aGluayBhYm91dCBlbmFibGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBIVUdFVExCRlNgLCBgQ01BYCwgYW5kIGBDUFVTRVRTYCBhcmUgZXNzZW50aWFsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19OVU1BYCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIGBub2RlbWFza2AgdG8gaGF2ZSBpdHMgZnVsbCBtZWFuaW5nLCBidXQgYENQVVNFVFNgIGFuZCBgQ01BYCBhcmUgdGhlIG1haW4gcGllY2VzLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQ1BVU0VUU2AgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlLiBBaGEhIEl0IGRlcGVuZHMgb24gYENHUk9VUFNgLiBJIG5lZWQgdG8gcmV2aWV3IGBpbml0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYENQVVNFVFNgIGFuZCB0byBiZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb25zIGNvcnJlY3RseSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVVNFVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEyODQ9Y29uZmlnIENHUk9VUF9IVUdFVExCXG4tLVxuaW5pdC9LY29uZmlnLTEyOTktXG5pbml0L0tjb25maWc6MTMwMDpjb25maWcgQ1BVU0VUU1xuaW5pdC9LY29uZmlnLTEzMDEtXHRib29sIFwmIzM0O0NwdXNldCBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEzMTItXG5pbml0L0tjb25maWc6MTMxMzpjb25maWcgQ1BVU0VUU19WMVxuaW5pdC9LY29uZmlnLTEzMTQtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgY3B1c2V0cyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIHNldHRpbmcgcmVsYXRlZCB0byBhIGZlYXR1cmUgSSYjMzk7bSBmYW1pbGlhciB3aXRoIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgaW5pdGlhbCwgZnVuZGFtZW50YWwgb3B0aW9ucyBhcmUgZGVmaW5lZC4gTXkgbWVudGFsIG1hcCBvZiB0aGUgS2NvbmZpZyBoaWVyYXJjaHkgc3VnZ2VzdHMgbGluZSAxMzAwIGlzIGEgbGlrZWx5IGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBhbnkgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgcHJvYmxlbS4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gdGhlIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHkgb3IgZm9yIGFueSBpbW1lZGlhdGUgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5NTpcdFx0ICBIdWdlVExCIHBhZ2VzIGJleW9uZCBpdHMgbGltaXQuIFRoaXMgcmVxdWlyZXMgdGhlIGFwcGxpY2F0aW9uIHRvIGtub3dcbjEyOTY6XHRcdCAgYmVmb3JlaGFuZCBob3cgbXVjaCBIdWdlVExCIHBhZ2VzIGl0IHdvdWxkIHJlcXVpcmUgZm9yIGl0cyB1c2UuIFRoZVxuMTI5NzpcdFx0ICBjb250cm9sIGdyb3VwIGlzIHRyYWNrZWQgaW4gdGhlIHRoaXJkIHBhZ2UgbHJ1IHBvaW50ZXIuIFRoaXMgbWVhbnNcbjEyOTg6XHRcdCAgdGhhdCB3ZSBjYW5ub3QgdXNlIHRoZSBjb250cm9sbGVyIHdpdGggaHVnZSBwYWdlIGxlc3MgdGhhbiAzIHBhZ2VzLlxuMTI5OTpcdFxuMTMwMDpcdGNvbmZpZyBDUFVTRVRTXG4xMzAxOlx0XHRib29sIFwmIzM0O0NwdXNldCBjb250cm9sbGVyXCYjMzQ7XG4xMzAyOlx0XHRkZXBlbmRzIG9uIFNNUFxuMTMwMzpcdFx0c2VsZWN0IFVOSU9OX0ZJTkRcbjEzMDQ6XHRcdHNlbGVjdCBDUFVfSVNPTEFUSU9OXG4xMzA1Olx0XHRoZWxwXG4xMzA2Olx0XHQgIFRoaXMgb3B0aW9uIHdpbGwgbGV0IHlvdSBjcmVhdGUgYW5kIG1hbmFnZSBDUFVTRVRzIHdoaWNoXG4xMzA3Olx0XHQgIGFsbG93IGR5bmFtaWNhbGx5IHBhcnRpdGlvbmluZyBhIHN5c3RlbSBpbnRvIHNldHMgb2YgQ1BVcyBhbmRcbjEzMDg6XHRcdCAgTWVtb3J5IE5vZGVzIGFuZCBhc3NpZ25pbmcgdGFza3MgdG8gcnVuIG9ubHkgd2l0aGluIHRob3NlIHNldHMuXG4xMzA5Olx0XHQgIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCBvbiBsYXJnZSBTTVAgb3IgTlVNQSBzeXN0ZW1zLlxuMTMxMDpcdFxuMTMxMTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMzEyOlx0XG4xMzEzOlx0Y29uZmlnIENQVVNFVFNfVjFcbjEzMTQ6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDQKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBIdWdlVExCIGFuZCBDTUEgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gSHVnZVRMQiBhbmQgQ01BLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYENQVVNFVFNgIGRlcGVuZHMgb24gYFNNUGAsIHNvIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgZW5hYmxlZCBpbiBvdXIgY29uZmlndXJhdGlvbnMuIEFkZGl0aW9uYWxseSwgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gQSBxdWVzdGlvbiBwb3BzIHVwOiBpcyBgTlVNQWAgYSByZXF1aXJlbWVudCBoZXJlPyBXZSBjYW4gY2hlY2sgYG5vZGVfaXNzZXRgIGFuZCBgbm9kZW1hc2tfdGAgdG8gZGV0ZXJtaW5lIGlmIGBOVU1BYCBpcyBhIHJlcXVpcmVtZW50LgoKQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYG5vZGVtYXNrX3RgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbm9kZW1hc2suaGAuIEV2ZW4gd2l0aG91dCBgTlVNQWAsIGl0JiMzOTtzIGF2YWlsYWJsZSwgdGhvdWdoIGl0JiMzOTtsbCBiZSBsaW1pdGVkIHRvIGEgc2luZ2xlIG5vZGUgKG5vZGUgMCkuIFRoZSByZWFsIG11bHRpLW5vZGUgYmVoYXZpb3Igb25seSBraWNrcyBpbiB3aGVuIGBOVU1BYCBpcyBlbmFibGVkLiBUaGUgYnVnICpjb3VsZCogYmUgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zLCBidXQgc2luY2UgYE5VTUFgIGlzIHR5cGljYWxseSBlbmFibGVkIGluIG91ciBzeXprYWxsZXIgY29uZmlncywgdGhhdCBzZWVtcyBsZXNzIGxpa2VseS4gTGV0JiMzOTtzIHJldmlzaXQgdGhlIHBhdGNoIGl0c2VsZi4KClRoZSBwYXRjaCYjMzk7cyBjb3JlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIGJlZm9yZSBpdCBldmVuIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGZyb20gYGh1Z2V0bGJfY21hW25pZF1gLiBJZiBgbm9kZW1hc2tgIGlzIE5VTEwsIGl0IGdyYWJzIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLCB3aGljaCBpcyBhIGR5bmFtaWMgdGhpbmcsIGFuZCB1c2VzIHRoYXQgaW5zdGVhZC4gVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgYWxsb2NhdGlvbiBtZWNoYW5pc20uIEl0JiMzOTtzIG5vdyByZXNwZWN0aW5nIHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IGNwdXNldC4KClRoZXJlZm9yZSwgdGhpcyBtZXJpdHMgZm9jdXNlZCBmdXp6aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRvIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLgoKKipEZWNpc2lvbjoqKiBXb3J0aEZ1enppbmc6IHRydWUKKipGb2N1c1N5bWJvbHM6KiogWyYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDtdCioqRW5hYmxlQ29uZmlnczoqKiBbJiMzNDtIVUdFVExCRlMmIzM0OywgJiMzNDtDTUEmIzM0OywgJiMzNDtDUFVTRVRTJiMzNDtdCioqUmVhc29uaW5nOioqICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwNToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2smIzM5O3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmNzdkMWU4ZjcyOTRkNDgxYzZmMmQ3MmU4Y2MzNjBiYWRlNWVkZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDA1OjI2OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmMKaW5kZXggMzkzNDRkNmM3OGQ4NC4uM2FlOTM0NzA3OGU5YiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NwdXNldC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tX2lubGluZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTMwLDExICYjNDM7MzEsMjMgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAlpbnQgbm9kZTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKJiM0MzsJbm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2s7CiAKIAlpZiAoIWh1Z2V0bGJfY21hX3NpemUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKGh1Z2V0bGJfY21hW25pZF0pCiYjNDM7CWlmICghbm9kZW1hc2spIHsKJiM0MzsJCXVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJY3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTsKJiM0MzsJCQlsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7CiYjNDM7CQl9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTsKJiM0MzsKJiM0MzsJCW5vZGVtYXNrID0gJmFtcDtsb2NhbF9ub2RlX21hc2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGh1Z2V0bGJfY21hW25pZF0gJmFtcDsmYW1wOyBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSkKIAkJcGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpOwogCiAJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTAKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGluIGBtbS9odWdldGxiX2NtYS5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzIGl0JiMzOTtzIGludHJvZHVjaW5nIGEgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrO2AgdmFyaWFibGUgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlmIHRoZSBgbm9kZW1hc2tgIHBvaW50ZXIgaXMgbnVsbC4gVGhlbiwgaXQgdXNlcyBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIHRvIGRldGVybWluZSBpZiBhbGxvY2F0aW9uIGlzIHBlcm1pdHRlZCBmcm9tIGEgZ2l2ZW4gYGh1Z2V0bGJfY21hW25pZF1gLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGlzIGluaXRpYWxpemF0aW9uIGJsb2NrIGZvciBgbG9jYWxfbm9kZV9tYXNrYC4gSSBzZWUgdGhpczoKCmBgYGMKCWlmICghbm9kZW1hc2spIHsKCQl1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llOwoKCQlkbyB7CgkJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CgkJCWxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDsKCQl9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTsKCgkJbm9kZW1hc2sgPSAmYW1wO2xvY2FsX25vZGVfbWFzazsKCX0KYGBgCgpSaWdodCwgYGxvY2FsX25vZGVfbWFza2AgaXMgYSBgbm9kZW1hc2tfdGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBiaXRtYXAuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgdGhlIGFzc2lnbm1lbnQ6IGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YC4gVGhpcyBpcyBhIHN0cnVjdCBjb3B5LiBUaGUgZW50aXJlIGJpdG1hcCB3aXRoaW4gYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgZ2V0cyBjb3BpZWQgdG8gYGxvY2FsX25vZGVfbWFza2AuICBTbywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIG1lbW9yeS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYC4uLiB0aGF0JiMzOTtzIGVpdGhlciBhIGdsb2JhbCBvciBhIHBlci10YXNrIHZhcmlhYmxlIOKAkyBhIG1hY3JvIGV4cGFuZGluZyB0byBgY3VycmVudC0mZ3Q7bWVtc19hbGxvd2VkYCB0byBiZSBwcmVjaXNlLiBBbmQgY3JpdGljYWxseSwgaXQmIzM5O3MgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGFzc2lnbm1lbnQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUg4oCTIGluY2x1ZGluZyB0aGUgYml0bWFwLiBUaGUgcmVzdWx0aW5nIGBsb2NhbF9ub2RlX21hc2tgIGlzLCB0aGVyZWZvcmUsIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuCgpTbywgaW4gY29uY2x1c2lvbiwgSSBkb24mIzM5O3Qgc2VlICphbnkqIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGhlcmUuIFRoZSBwYXRjaCBzaW1wbHkgYWRkcyBhIG5vZGVtYXNrIGNoZWNrIHRvIHRoZSBodWdldGxiIENNQSBhbGxvY2F0aW9uIHBhdGgsIGNvcnJlY3RseSB1c2luZyBhbiBpbml0aWFsaXplZCBub2RlbWFzayB0byBlbmZvcmNlIG1lbW9yeSBub2RlIHJlc3RyaWN0aW9ucy4gTm8gS01TQU4gZmxhZyBpcyBuZWVkZWQuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2smIzM5O3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IHRoZSB0YXNrJiMzOTtzIGBtZW1zX2FsbG93ZWRgIG5vZGVtYXNrIHdoZW4gYWxsb2NhdGluZyBhIENNQSBmb2xpby4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIGBub2RlbWFza190IGxvY2FsX25vZGVfbWFza2Agd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO2ApLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNjo0Ny4xMjAxMzI1NjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5NTg3NDg2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNQVVNFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2sncyBgbWVtc19hbGxvd2VkYCBub2RlbWFzayB3aGVuIGFsbG9jYXRpbmcgYSBDTUEgZm9saW8uIEl0IGludHJvZHVjZXMgYSBsb2NhbCBgbm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2tgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gdG8gY29uc2lkZXIgY3B1c2V0IG1lbXMgYWxsb3dlZCB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgZnJvemVuIGZvbGlvcyBmcm9tIENNQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI2OjQ3LjEyMDEzNzMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzUzNTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNmNzdkMWU4ZjcyOTRkNDgxYzZmMmQ3MmU4Y2MzNjBiYWRlNWVkZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgOSAwNToyNjo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuY1xcbmluZGV4IDM5MzQ0ZDZjNzhkODQuLjNhZTkzNDcwNzhlOWIgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVzZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuQEAgLTMwLDExICszMSwyMyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRpbnQgbm9kZTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbitcXHRub2RlbWFza190IGxvY2FsX25vZGVfbWFzaztcXG4gXFxuIFxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcXG4rXFx0aWYgKCFub2RlbWFzaykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xcbitcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbitcXHRcXHRcXHRsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxuK1xcdFxcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbitcXG4rXFx0XFx0bm9kZW1hc2sgPSBcXHUwMDI2bG9jYWxfbm9kZV9tYXNrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG4gXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6MjY6NDguNDY0NTM4MzQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUxMzU5MDc0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjc3ZDFlOGY3Mjk0ZDQ4MWM2ZjJkNzJlOGNjMzYwYmFkZTVlZGVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwNToyNjo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zYWU5MzQ3MDc4ZTliIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtMzAsMTEgKzMxLDIzIEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4rXHRub2RlbWFza190IGxvY2FsX25vZGVfbWFzaztcbiBcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbitcdGlmICghbm9kZW1hc2spIHtcbitcdFx0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbitcbitcdFx0ZG8ge1xuK1x0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4rXHRcdFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuK1x0XHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcbitcbitcdFx0bm9kZW1hc2sgPSBcdTAwMjZsb2NhbF9ub2RlX21hc2s7XG4rXHR9XG4rXG4rXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpXG4gXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcbiBcbiBcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNjo0OC40NjQ1Mzk3OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDQ0NDI0MzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEh1Z2V0bGIgQ01BIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdldGxiX2NtYS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGEgbmV3IGFkZGl0aW9uIG9mIGNwdXNldCBub2RlbWFzayBjaGVja2luZyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgYSBmcm96ZW4gZm9saW8gZnJvbSBDTUEgZm9yIGh1Z2V0bGIuIFRoYXQncyBhIHNlbnNpYmxlIGFkZGl0aW9uLCBhbmQgc29tZXRoaW5nIEkndmUgY29uc2lkZXJlZCBpbXBsZW1lbnRpbmcgbXlzZWxmIGluIHRoZSBwYXN0LCBzbyBJJ20gaW50ZXJlc3RlZCB0byBzZWUgdGhlIGFwcHJvYWNoLlxuXG5Fc3NlbnRpYWxseSwgdGhlIGxvZ2ljIHNlZW1zIHRvIGJlOiB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgaXQncyBkZWZhdWx0aW5nIHRvIHVzaW5nIHRoZSBjdXJyZW50IGNwdXNldCBtZW1zIGFsbG93ZWQuIFRoYXQncyBhIGdvb2QgZmFpbC1zYWZlLCBwcmV2ZW50aW5nIGFsbG9jYXRpb24gZnJvbSBub2RlcyB0aGF0IGFyZW4ndCBhbGxvd2VkIGJ5IHRoZSBjdXJyZW50IGNwdXNldC4gVGhlbiwgY3J1Y2lhbGx5LCBpdCBjaGVja3MgYG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spYCBiZWZvcmUgdHJ5aW5nIHRvIGFjdHVhbGx5IGFsbG9jYXRlIGFueXRoaW5nIGZyb20gYGh1Z2V0bGJfY21hW25pZF1gLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIG5vZGVtYXNrIGVuZm9yY2VtZW50LiBTbywgdG8gYmUgY2xlYXIsIGl0IGlzIHZlcmlmeWluZyBhIG5vZGUgaXMgYWxsb3dlZCBiZWZvcmUgZXZlbiB0cnlpbmcgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IG5vZGUncyBDTUEuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IGNsZWFubHkgaXQncyBpbnRlZ3JhdGVkIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhcmUuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIG5vZGVtYXNrIGhhbmRsaW5nIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucywgZXNwZWNpYWxseSBpbiBjb21wbGV4IE5VTUEgc2V0dXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6MTIuOTA4Nzg2MzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE1MTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIyPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjctXFxubW0vaHVnZXRsYl9jbWEuYzoyODpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmgtMTktXFxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcXG5tbS9odWdldGxiX2NtYS5oLTIxLVxcdFxcdGdmcF90IGdmcF9tYXNrLFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzoxNC41MjAzMDgyNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE0MDYzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipUcmFjaW5nIGEgQ3JpdGljYWwgUGF0aCBpbiBIdWdlVExCIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIFRoYXQgbmFtZSByaW5ncyBhIGJlbGwuLi4gYWggeWVzLCBpdCdzIGNhbGxlZCBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCB3aGljaCBpcyByaWdodCB0aGVyZSBpbiBgbW0vaHVnZXRsYi5jYC4gVGhpcyBpc24ndCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uLCB0aGlzIGlzICpjb3JlKiBrZXJuZWwgbG9naWMsIHJpZ2h0IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbi4gSXQgaGFuZGxlcyBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmcm9tIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSByZXNlcnZlZCBwYWdlcy4gRGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCBpcyB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgbW0vaHVnZXRsYl9jbWEuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGFwcHJvcHJpYXRlIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBBcmUgdGhlIG5lY2Vzc2FyeSBDTUEgb3B0aW9ucyBjb21waWxlZCBpbj8gQXJlIHRoZSBIdWdlVExCIHNldHRpbmdzIGNvcnJlY3Q/IFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzIGFyZSBpbiBwbGFjZSBmb3IgdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHBhdGggdG8gZnVuY3Rpb24gYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzoxOC40MzQzNzM0NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNzgyNjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwNzg6XFx0aHVnZXRsYl9jbWFfb25seT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVxcdFxcdFxcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM4LSNpZmRlZiBDT05GSUdfQ01BXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTQwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwMi1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYzoyMDM6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00NDg9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTAtXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjQ1MTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcXG4tLVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jPTIyNT1ib29sIF9faW5pdCBhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzQtXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MjM1OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTQyPWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ1LVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM6NDY6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNzY9dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNzg6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc5LVxcbi0tXFxubW0vTWFrZWZpbGU9ODI9aWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7XFxubW0vaHVnZXRsYl9jbWEuYzoxOTpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9odWdldGxiX2NtYS5jLTIwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xNDI9ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hXFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xNDMtXFxubW0vaHVnZXRsYl9jbWEuYzoxNDQ6c3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KGNoYXIgKnApXFxubW0vaHVnZXRsYl9jbWEuYy0xNDUte1xcbm1tL2h1Z2V0bGJfY21hLmM6MTQ2OlxcdHJldHVybiBrc3RydG9ib29sKHAsIFxcdTAwMjZodWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTE0Ny19XFxubW0vaHVnZXRsYl9jbWEuYy0xNDgtXFxubW0vaHVnZXRsYl9jbWEuYzoxNDk6ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hX29ubHlcXFwiLCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTUwLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTUxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTUyLXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTU2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTY0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTY1OlxcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTY2LVxcdGlmICghb3JkZXIpIHtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjY5PWJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yNzAte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjcxOlxcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjcyLX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjc5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yODEtXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmM6MjgyOlxcdFxcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcXG5tbS9odWdldGxiX2NtYS5jLTI4My19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI4NT1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yODktXFxubW0vaHVnZXRsYl9jbWEuYzoyOTA6XFx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjkxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6MjAuNDUyMjA1MTUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MTU1MDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBodWdldGxiX2NtYS5jYCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9odWdldGxiX2NtYS5jYCwgYW5kIGl0J3MgY2xlYXIgdGhpcyBmaWxlIG9ubHkgZ2V0cyBidWlsdCB3aGVuIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFjdGl2ZSDigJMgbWFrZXMgc2Vuc2UuIFRoZSBrZXkgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIFRoaXMgY2hhbmdlIGxldmVyYWdlcyBjcHVzZXQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnM6IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCwgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAsIGFuZCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKWAuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2NwdXNldC5oYC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIGFuZCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBpcyB3aGV0aGVyIHRoaXMgY3B1c2V0IGRlcGVuZGVuY3kgaXMgKnN0cmljdGx5KiBhIGJ1aWxkIHJlcXVpcmVtZW50LiBDYW4gdGhlIGNvZGUgZnVuY3Rpb24gY29ycmVjdGx5IGlmIGBDT05GSUdfQ1BVU0VUU2AgaXMgKm5vdCogZW5hYmxlZCwgb3IgaXMgaXQgYSBoYXJkIGRlcGVuZGVuY3k/IEkgbmVlZCB0byBjaGVjayB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCB0aGUgcnVudGltZSBiZWhhdmlvciB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMuIElzIGl0IGEgYnVpbGQtdGltZSBjb25kaXRpb25hbCwgb3IgYSBydW50aW1lIHJlcXVpcmVtZW50P1xuXG5cbiIsIklucHV0VG9rZW5zIjo1MTMwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjI1LjcxMzc1ODYzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4NTY3NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfbWVtc19hbGxvd2VkX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE9ZXh0ZXJuIGJvb2wgbG9ja2RlcF9pc19jcHVzZXRfaGVsZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6Mjc6ICoga2V5LiBJbiBjb2RlIHBhdGhzIHdoZXJlIHdlIG5lZWQgdG8gbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYW5kXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOC0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpIHRvIGdldCBhIGNvbnNpc3RlbnQgdmlldyBvZiBtZW1zX2FsbG93ZWQsIHdlIG5lZWRcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTM1PWV4dGVybiB2b2lkIGNwdXNldF9yZXNldF9zY2hlZF9kb21haW5zKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjEzODogKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBpcyByZXF1aXJlZCB3aGVuIG1ha2luZyBkZWNpc2lvbnMgaW52b2x2aW5nXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzktICogbWVtc19hbGxvd2VkIHN1Y2ggYXMgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gbWVtc19hbGxvd2VkIGNhbiBiZSB1cGRhdGVkIGluXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQxOiAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0Mi0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQ0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTMtICogSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBvcGVyYXRpb24gdGhhdCB0b29rIHBsYWNlIGFmdGVyXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNTQ6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gbWF5IGhhdmUgZmFpbGVkIGFydGlmaWNpYWxseSBkdWUgdG8gYSBjb25jdXJyZW50XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21lbXNfYWxsb3dlZChub2RlbWFza190IG5vZGVtYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XFxuLS1cXG5tbS9maWxlbWFwLmM9OTk5PXN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTAxMS1cXHRcXHRkbyB7XFxubW0vZmlsZW1hcC5jOjEwMTI6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9maWxlbWFwLmMtMTAxMy1cXHRcXHRcXHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0Olxcbm1tL2h1Z2V0bGIuYzoxMjkxOlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vaHVnZXRsYi5jLTEyOTItXFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwgZ2ZwX3pvbmUoZ2ZwX21hc2spLCBubWFzaykge1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy00Mi1cXHRcXHRkbyB7XFxubW0vaHVnZXRsYl9jbWEuYzo0MzpcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtNDQtXFx0XFx0XFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEwNi1cXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEgdG8gZGV0ZWN0IHJlYmluZCAqL1xcbm1tL21lbXBvbGljeS5jOjIxMDc6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTA4LVxcdG5vZGUgPSBjdXJyZW50LVxcdTAwM2VpbF9wcmV2O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEyMz1zdGF0aWMgdW5zaWduZWQgaW50IGludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEyOS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjEzMDpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTIxMzEtXFx0XFx0bmlkID0gbmV4dF9ub2RlX2luKGN1cnJlbnQtXFx1MDAzZWlsX3ByZXYsIHBvbGljeS1cXHUwMDNlbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY1NS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjY1NjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTI2NTctXFx0XFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFxcdTAwMjZub2Rlcyk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDc2NC1cXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XFxubW0vcGFnZV9hbGxvYy5jOjQ3NjU6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcXG4tLVxcbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vc2hvd19tZW0uYy0xMjUtXFx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXFxubW0vc2hvd19tZW0uYzoxMjY6XFx0ICogdGhlIHN5bmNocm9uaXphdGlvbiAtIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIC0gYmVjYXVzZSB3ZSBkbyBub3RcXG5tbS9zaG93X21lbS5jLTEyNy1cXHQgKiBoYXZlIHRvIGJlIHByZWNpc2UgaGVyZS5cXG4tLVxcbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM4OTctXFx0XFx0LypcXG5tbS9zbHViLmM6Mzg5ODpcXHRcXHQgKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFjY2Vzc2VzIGN1cnJlbnQtXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEsXFxubW0vc2x1Yi5jLTM4OTktXFx0XFx0ICogYSBzZXFjb3VudF9zcGlubG9ja190IHRoYXQgaXMgbm90IE5NSS1zYWZlLiBEbyBub3QgYWNjZXNzXFxuLS1cXG5tbS9zbHViLmMtMzkwMy1cXHRcXHRpZiAoYWxsb3dfc3BpbilcXG5tbS9zbHViLmM6MzkwNDpcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL3NsdWIuYy0zOTA1LVxcbi0tXFxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzI0Ni1cXHRkbyB7XFxubW0vc2x1Yi5jOjcyNDc6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9zbHViLmMtNzI0OC1cXHRcXHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzoyNy4yNTIzMzE5MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAwNTg0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBpbiBob3cgaXQgaGFuZGxlcyBjcHVzZXQgbWVtcy4gVGhhdCBtZWFucyB0aGVyZSdzIGEgZGVmaW5pdGUgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVzZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGV2ZW4gYWN0aXZlIGFuZCByZWFjaGFibGUuIEJhc2VkIG9uIHRoZSBkb2N1bWVudGF0aW9uLCBpdCBpcy4gVGhlIGNhbGxzIGNvbWUgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiwgaXMgcmVhY2hlZCB0aHJvdWdoIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBhbmQgYGFsbG9jX3Bvb2xfaHVnZV9mb2xpb2AuIEkga25vdyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBodWdldGxiZnMuIFNvIHllcywgdGhpcyBpcyBhIHJlYWwsIGxpdmUgY29kZSBwYXRoLlxuXG5UaGUgY29uZmlncyBpbnZvbHZlZCBhcmUgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0NNQWAsIHdoaWNoIGFyZSBmYWlybHkgc3RhbmRhcmQuIEJ1dCBoZXJl4oCZcyBzb21ldGhpbmcgdG8gbm90ZTogYENPTkZJR19DUFVTRVRTYCBpcyBhbHNvIG5lZWRlZCBmb3IgdGhlIGNwdXNldCBmZWF0dXJlcyB0byBiZSBhY3RpdmUuIFRoYXQgbWVhbnMgdGhlIHVzZXIgbmVlZHMgdG8gaGF2ZSBjcHVzZXRzIGVuYWJsZWQgZm9yIHRoZSBwYXRjaCB0byBkbyBhbnl0aGluZy4gRXZlbiBpZiBjcHVzZXRzIGFyZSBkaXNhYmxlZCwgdGhlcmUgYXJlIHN0dWJzIGluIGBpbmNsdWRlL2xpbnV4L2NwdXNldC5oYC4gTGV0IG1lIGNoZWNrIHRoYXQgaW5jbHVkZSBmaWxlIHRvIHZlcmlmeSBleGFjdGx5IGhvdyBgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW5gIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgZGlzYWJsZWQgY29uZmlndXJhdGlvbi4gVGhhdCdsbCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDE5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjMzLjA1MjkxOTgyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2Nzg3NjQzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWFkX21lbXNfYWxsb3dlZF9iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NwdXNldC5oPTIxPWV4dGVybiBib29sIGxvY2tkZXBfaXNfY3B1c2V0X2hlbGQodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI2LSAqIFN0YXRpYyBicmFuY2ggcmV3cml0ZXMgY2FuIGhhcHBlbiBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgZm9yIGEgZ2l2ZW5cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjI3OiAqIGtleS4gSW4gY29kZSBwYXRocyB3aGVyZSB3ZSBuZWVkIHRvIGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFuZFxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjgtICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTEzNT1leHRlcm4gdm9pZCBjcHVzZXRfcmVzZXRfc2NoZWRfZG9tYWlucyh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM3LS8qXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxMzg6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gaXMgcmVxdWlyZWQgd2hlbiBtYWtpbmcgZGVjaXNpb25zIGludm9sdmluZ1xcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM5LSAqIG1lbXNfYWxsb3dlZCBzdWNoIGFzIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIG1lbXNfYWxsb3dlZCBjYW4gYmUgdXBkYXRlZCBpblxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQwLSAqIHBhcmFsbGVsIGFuZCBkZXBlbmRpbmcgb24gdGhlIG5ldyB2YWx1ZSBhbiBvcGVyYXRpb24gY2FuIGZhaWwgcG90ZW50aWFsbHlcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0MTogKiBjYXVzaW5nIHByb2Nlc3MgZmFpbHVyZS4gQSByZXRyeSBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gYW5kXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDItICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkgcHJldmVudHMgdGhlc2UgYXJ0aWZpY2lhbCBmYWlsdXJlcy5cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0My0gKi9cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0NDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQ1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTUzLSAqIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgb3BlcmF0aW9uIHRoYXQgdG9vayBwbGFjZSBhZnRlclxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTU0OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIG1heSBoYXZlIGZhaWxlZCBhcnRpZmljaWFsbHkgZHVlIHRvIGEgY29uY3VycmVudFxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTU1LSAqIHVwZGF0ZSBvZiBtZW1zX2FsbG93ZWQuIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yODg9c3RhdGljIGlubGluZSB2b2lkIHNldF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCBub2RlbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjkxLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjkyOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTMte1xcbi0tXFxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTEwMTEtXFx0XFx0ZG8ge1xcbm1tL2ZpbGVtYXAuYzoxMDEyOlxcdFxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vZmlsZW1hcC5jLTEwMTMtXFx0XFx0XFx0biA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMjc1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjkwLXJldHJ5X2NwdXNldDpcXG5tbS9odWdldGxiLmM6MTI5MTpcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL2h1Z2V0bGIuYy0xMjkyLVxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGdmcF96b25lKGdmcF9tYXNrKSwgbm1hc2spIHtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjg9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtNDItXFx0XFx0ZG8ge1xcbm1tL2h1Z2V0bGJfY21hLmM6NDM6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9odWdldGxiX2NtYS5jLTQ0LVxcdFxcdFxcdGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxMDYtXFx0LyogdG8gcHJldmVudCBtaXNjb3VudCB1c2UgdHNrLVxcdTAwM2VtZW1zX2FsbG93ZWRfc2VxIHRvIGRldGVjdCByZWJpbmQgKi9cXG5tbS9tZW1wb2xpY3kuYzoyMTA3OlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vbWVtcG9saWN5LmMtMjEwOC1cXHRub2RlID0gY3VycmVudC1cXHUwMDNlaWxfcHJldjtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMjM9c3RhdGljIHVuc2lnbmVkIGludCBpbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxMjktXFx0ZG8ge1xcbm1tL21lbXBvbGljeS5jOjIxMzA6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTMxLVxcdFxcdG5pZCA9IG5leHRfbm9kZV9pbihjdXJyZW50LVxcdTAwM2VpbF9wcmV2LCBwb2xpY3ktXFx1MDAzZW5vZGVzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI2MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NTUtXFx0ZG8ge1xcbm1tL21lbXBvbGljeS5jOjI2NTY6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yNjU3LVxcdFxcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcXHUwMDI2bm9kZXMpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ3MjU9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ3NjQtXFx0Y29tcGFjdF9wcmlvcml0eSA9IERFRl9DT01QQUNUX1BSSU9SSVRZO1xcbm1tL3BhZ2VfYWxsb2MuYzo0NzY1OlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vcGFnZV9hbGxvYy5jLTQ3NjYtXFx0em9uZWxpc3RfaXRlcl9jb29raWUgPSB6b25lbGlzdF9pdGVyX2JlZ2luKCk7XFxuLS1cXG5tbS9zaG93X21lbS5jPTExOT1zdGF0aWMgYm9vbCBzaG93X21lbV9ub2RlX3NraXAodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Nob3dfbWVtLmMtMTI1LVxcdCAqIG5vIG5vZGUgbWFzayAtIGFrYSBpbXBsaWNpdCBtZW1vcnkgbnVtYSBwb2xpY3kuIERvIG5vdCBib3RoZXIgd2l0aFxcbm1tL3Nob3dfbWVtLmM6MTI2OlxcdCAqIHRoZSBzeW5jaHJvbml6YXRpb24gLSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiAtIGJlY2F1c2Ugd2UgZG8gbm90XFxubW0vc2hvd19tZW0uYy0xMjctXFx0ICogaGF2ZSB0byBiZSBwcmVjaXNlIGhlcmUuXFxuLS1cXG5tbS9zbHViLmM9Mzg2Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zODk3LVxcdFxcdC8qXFxubW0vc2x1Yi5jOjM4OTg6XFx0XFx0ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhY2Nlc3NlcyBjdXJyZW50LVxcdTAwM2VtZW1zX2FsbG93ZWRfc2VxLFxcbm1tL3NsdWIuYy0zODk5LVxcdFxcdCAqIGEgc2VxY291bnRfc3BpbmxvY2tfdCB0aGF0IGlzIG5vdCBOTUktc2FmZS4gRG8gbm90IGFjY2Vzc1xcbi0tXFxubW0vc2x1Yi5jLTM5MDMtXFx0XFx0aWYgKGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jOjM5MDQ6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9zbHViLmMtMzkwNS1cXG4tLVxcbm1tL3NsdWIuYz03MjMxPV9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTcyNDYtXFx0ZG8ge1xcbm1tL3NsdWIuYzo3MjQ3OlxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vc2x1Yi5jLTcyNDgtXFx0XFx0em9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG1lbXBvbGljeV9zbGFiX25vZGUoKSwgZ2ZwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6MzQuNjIwODAzMjY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjE2MjE0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBhcyBhIHByb21pc2luZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyB0aGVyZSdzIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IgdG8gYmUgZXhwb3NlZC4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgYXJlIGBIVUdFVExCRlNgLCBgQ01BYCwgYW5kIGBDUFVTRVRTYC4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJJ20gZm9jdXNpbmcgb24gdGhhdCBmdW5jdGlvbiBhcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHN5bWJvbC5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIGdsb2JhbGx5IGFjY2Vzc2libGUuIEFscmlnaHQsIGl0J3Mgbm90IHN0YXRpYzsgaXQncyBkZWNsYXJlZCBpbiBgbW0vaHVnZXRsYl9jbWEuaGAgYW5kIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyB0aGF0J3MgZ29vZC4gSXQgc2hvdWxkIGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZm9yIG15IHB1cnBvc2VzLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNyb3NzY2hlY2sgb24gdGhvc2UgY29uZmlnIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCBgbW0vTWFrZWZpbGVgLCBJIHNlZSB0aGF0IGBvYmotJChDT05GSUdfSFVHRVRMQkZTKSArPSBodWdldGxiX2NtYS5vYCBpcyBpbnNpZGUgYW4gYGlmZGVmIENPTkZJR19DTUFgIGJsb2NrLiBUaGlzIGNvbmZpcm1zIHRoYXQgYEhVR0VUTEJGU2AgKmFuZCogYENNQWAgYXJlLCBpbiBmYWN0LCByZXF1aXJlZC4gQW5kLCB0byBwcm9wZXJseSBleGVyY2lzZSB0aGUgY3B1c2V0LXJlbGF0ZWQgbG9naWMsIEkgYWxzbyBuZWVkIGBDUFVTRVRTYCBlbmFibGVkIGJlY2F1c2UsIHdpdGhvdXQgaXQsIGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbmAgaXMganVzdCBhIHN0dWIuIEdvb2QsIEkndmUgZ290IG15IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duLlxuXG5MZXQncyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vaHVnZXRsYi5jYCB0byBzZWUgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdGFyZ2V0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODU4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjQwLjk0MjQyNzczN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMjg2MTY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMTM2MS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xcbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbm1tL2h1Z2V0bGIuYy0xMzc4LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODQ2LVxcdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXFxubW0vaHVnZXRsYi5jOjE4NDc6XFx0XFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMTg0OC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI3OjQzLjY1NTI5MzgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDcwMDEyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGp1bXBzIG91dCBhdCBtZS4gVGhpcyBmdW5jdGlvbiBpc24ndCB1bml2ZXJzYWxseSBhdmFpbGFibGUuIEl0J3Mgb25seSBkZWZpbmVkIHdoZW4gKmJvdGgqIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYCBhcmUgc2V0LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgYmFja3RyYWNrIGFuZCBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMuXG5cbkZpcnN0LCBJJ2xsIGRvdWJsZS1jaGVjayB0aG9zZSB0d28gY29uZmlndXJhdGlvbiBvcHRpb25zLiBIbW0sIGEgcXVpY2sgcmVtaW5kZXIuLi4gYENPTkZJR19DT05USUdfQUxMT0NgIGlzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBDT05GSUdfQ01BYCwgaWYgbWVtb3J5IHNlcnZlcy4gVGhhdCBzZWVtcyByaWdodC4gQW5kIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgdHlwaWNhbGx5IGVuYWJsZWQgYnkgdGhlIG1vcmUgXCJtb2Rlcm5cIiBhcmNoaXRlY3R1cmVzLCB0aGluZ3MgbGlrZSB4ODYsIGFybTY0LCB0aGF0IHNvcnQgb2YgdGhpbmcuIEFscmlnaHQsIEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLlxuXG5Ob3csIGxldCBtZSBnbyBiYWNrIHRvIGBtbS9odWdldGxiX2NtYS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdXNlZCBvdXRzaWRlIG9mIHRoaXMgcGFydGljdWxhciBjb250ZXh0PyBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMgd2l0aGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6NDcuODAyMjk3Mzk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1Mjc0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzY0LVxcbm1tL2h1Z2V0bGIuYzoxMzY1OlxcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxubW0vaHVnZXRsYi5jLTEzNjYtXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yMj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI3LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5jLTI5LVxcdFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuaC04LVxcdFxcdFxcdFxcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTE5LVxcbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cXHRcXHRnZnBfdCBnZnBfbWFzayxcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjc6NDkuMjc3NTc4MTY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Mjg1NDYwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGVuYWJsZWQuIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgIG5lZWQgdG8gYmUgY29uZmlndXJlZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYEhVR0VUTEJGU2AgaXMgYWN0dWFsbHkgdGhlIGNvcnJlY3QgS2NvbmZpZyBuYW1lIGZvciB0aGF0IGZlYXR1cmUuIEl0J3MgZWFzeSB0byBnZXQgdGhlc2UgdGhpbmdzIG1peGVkIHVwLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gdXNpbmcgdGhlIHByb3BlciB0ZXJtaW5vbG9neSBhbmQgbG9va2luZyBhdCB0aGUgcmlnaHQgY29uZmlncy4gSSdsbCBkb3VibGUgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzo1NC4yMDYxMjc0MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzc0ODAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzo1NS42ODM2MTIzNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNDExODA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNZW1vcnkgTWFuYWdlbWVudCBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZCBpcyBgSFVHRVRMQkZTYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRpb24gb2YgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzaXR1YXRpb24gd2hlcmUgd2UncmUgbG9va2luZyB0byByZWR1Y2UgVExCIG1pc3NlcyBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZSBsYXRlbmN5LiBXZSdyZSBleHBsaWNpdGx5IHdhbnRpbmcgdG8gd29yayB3aXRoIGh1Z2UgcGFnZXMgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5CdXQsIGJlZm9yZSB3ZSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcm9hZCwgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBhbmdsZXMuIEkgbmVlZCB0byB0aGluayBhYm91dCBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uLCBsZXQncyBhbHNvIGNoZWNrIGBDTUFgLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBuZWVkIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMsIG9yIGlzIHRoaXMgbW9yZSBhYm91dCB1c2VyLXNwYWNlIGFsbG9jYXRpb24gd2l0aCBsYXJnZSBwYWdlcy4gVGhpcyBjb3VsZCByZXF1aXJlIGEgY2hlY2sgZm9yIGFuIGVtYmVkZGVkIHN5c3RlbSwgZGV2aWNlIGRyaXZlciwgb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9uPyBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIG9uZSBtaWdodCByZXF1aXJlIHRoZSBvdGhlciBidXQgdGhpcyB3b3VsZCBkZXBlbmQgaGVhdmlseSBvbiB0aGUgc3lzdGVtLiBCb3RoIGhhdmUgdGhlaXIgdHJhZGUgb2ZmcyBidXQgaXQgaXMgbmVjZXNzYXJ5IHRvIGNoZWNrIGJvdGggYXMgdGhlIGludGVycGxheSBpcyBjcml0aWNhbC4gVGhlIG5lZWQgZm9yIHBoeXNpY2FsIGNvbnRpZ3VpdHkgb2Z0ZW4gZGljdGF0ZXMgdGhlIGNob2ljZSBiZXR3ZWVuIGBIVUdFVExCRlNgIGFuZCBtb3JlIHN0YW5kYXJkIGFsbG9jYXRpb24gc3RyYXRlZ2llcy5cblxuU28sIGBIVUdFVExCRlNgIGlzIHRoZSBmb2N1cywgYnV0IGEgcXVpY2sgY2hlY2sgb24gYENNQWAgd2lsbCBjb25maXJtIHRoZSBmdWxsIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDMsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyNzo1OS43MTc3MzM1MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjI5MTI3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODUtXFxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiRGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFxcXCJEZWZhdWx0IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc2l6ZTpcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTk4OmNvbmZpZyBDTUFfU0laRV9NQllURVNcXG5rZXJuZWwvZG1hL0tjb25maWctMTk5LVxcdGludCBcXFwiU2l6ZSBpbiBNZWdhIEJ5dGVzXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIwOC1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjA5OmNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cXHRpbnQgXFxcIlBlcmNlbnRhZ2Ugb2YgdG90YWwgbWVtb3J5XFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIyMD1jaG9pY2VcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjMtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNDpjb25maWcgQ01BX1NJWkVfU0VMX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXFx0Ym9vbCBcXFwiVXNlIG1lZ2EgYnl0ZXMgdmFsdWUgb25seVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjI2LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjc6Y29uZmlnIENNQV9TSVpFX1NFTF9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cXHRib29sIFxcXCJVc2UgcGVyY2VudGFnZSB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjktXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMDpjb25maWcgQ01BX1NJWkVfU0VMX01JTlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXFx0Ym9vbCBcXFwiVXNlIGxvd2VyIHZhbHVlIChtaW5pbXVtKVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjMyLVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzM6Y29uZmlnIENNQV9TSVpFX1NFTF9NQVhcXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVxcdGJvb2wgXFxcIlVzZSBoaWdoZXIgdmFsdWUgKG1heGltdW0pXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIzNj1lbmRjaG9pY2VcXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzg6Y29uZmlnIENNQV9BTElHTk1FTlRcXG5rZXJuZWwvZG1hL0tjb25maWctMjM5LVxcdGludCBcXFwiTWF4aW11bSBQQUdFX1NJWkUgb3JkZXIgb2YgYWxpZ25tZW50IGZvciBjb250aWd1b3VzIGJ1ZmZlcnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuLS1cXG5tbS9LY29uZmlnLTEwNjYtXFxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDgxLVxcbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwODMtXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDg3LVxcbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDg5LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5NC1cXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjg6MDEuMTgwNjUxNDk2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQ1ODU5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsICpDTUEqLi4uIEdvdCBpdC4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIGxldCdzIGltbWVkaWF0ZWx5IHBpdm90IHRvIGV4cGxvcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiAqQ1BVU0VUUyouIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gYXNzZXNzLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IHJlc291cmNlIGFsbG9jYXRpb24gaW1wbGljYXRpb25zLiBOZWVkIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyBvZiB0aGUgcHV6emxlIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3MCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjA0LjQ3NTI0MDE3NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzkyODA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVU0VUU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTI4ND1jb25maWcgQ0dST1VQX0hVR0VUTEJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMjk5LVxcbmluaXQvS2NvbmZpZzoxMzAwOmNvbmZpZyBDUFVTRVRTXFxuaW5pdC9LY29uZmlnLTEzMDEtXFx0Ym9vbCBcXFwiQ3B1c2V0IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTMxMi1cXG5pbml0L0tjb25maWc6MTMxMzpjb25maWcgQ1BVU0VUU19WMVxcbmluaXQvS2NvbmZpZy0xMzE0LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgY3B1c2V0cyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyODowNS45MzkxNzE3NTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzNzY0NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBGdW5jdGlvbjogYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYENQVVNFVFNgIGhlcmUuIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSXMgaXQgdGhlIG9ubHkgZnVuY3Rpb24gYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaD8gU2VlbXMgbGlrZSBpdCwgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLlxuXG5SaWdodCwgbGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW5saW5lZC4gTG9va2luZyBhdCBgbW0vaHVnZXRsYl9jbWEuY2AsIHRoZSBkZWZpbml0aW9uIHNob3dzIGl0J3Mgbm90IHN0YXRpYyBhbmQgaXQncyBub3QgaW5saW5lZC4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgcmVhY2hhYmxlIHZpYSBzeXNjYWxscz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGludm9rZWQgdGhyb3VnaCBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgc2htZ2V0YCB3aXRoIGBTSE1fSFVHRVRMQmAsIG9yIHdyaXRpbmcgdG8gaHVnZXRsYmZzIGZpbGVzLiBTcGVjaWZpY2FsbHksIGFsbG9jYXRpbmcgYSBnaWdhbnRpYyBwYWdlLCBzYXkgYSAxR0IgcGFnZSBvbiB4ODYsIHRyaWdnZXJzIGEgY2FsbCB0byBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgdGhlIGZ1bmN0aW9uIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuXG5UaGlzIG1lYW5zIGl0J3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBJdCByZXF1aXJlcyB0aGUgc3lzdGVtIHRvIGhhdmUgZ2lnYW50aWMgcGFnZXMgY29uZmlndXJlZCBhbmQgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGZvciBodWdldGxiIGVuYWJsZWQuIFR5cGljYWxseSwgd2UnZCBlbmFibGUgQ01BIGZvciBodWdldGxiIHVzaW5nIHRoZSBrZXJuZWwgY29tbWFuZC1saW5lIHBhcmFtZXRlciBgaHVnZXRsYl9jbWE9YCwgYWx0aG91Z2ggc29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IGFsbG9jYXRlIGl0IGJ5IGRlZmF1bHQuIEhvbGQgb24sIGBodWdldGxiX2NtYV9yZXNlcnZlKClgIGlzIGFsc28gY2FsbGVkIGR1cmluZyBib290LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiB0byBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjEzLjA3NjgxOTkzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTEyODk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9yZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0LTEyNy1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0OjEyODogIHZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZCkge1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjk4PXN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqaHVnZV9wdGVfbG9jayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwOC0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DTUEpXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMwOTpleHRlcm4gdm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEwLSNlbHNlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMxMTpzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzEyLXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTUxPXVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xNTUtXFxubW0vaHVnZXRsYl9jbWEuYzoxNTY6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTU3LXtcXG4tLVxcbm1tL21tX2luaXQuYz0yNjk1PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjk2LXtcXG5tbS9tbV9pbml0LmM6MjY5NzpcXHRodWdldGxiX2NtYV9yZXNlcnZlKCk7XFxubW0vbW1faW5pdC5jLTI2OTgtXFx0aHVnZXRsYl9ib290bWVtX2FsbG9jKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjE0LjU1Nzk1MzM1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNzk4Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyB0ZWNobmljYWwgc25pcHBldCwgZXhwcmVzc2VkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipFYXJseSBJbml0aWFsaXphdGlvbiBvZiBIdWdlVExCIENNQSBSZXNlcnZlKipcblxuUmlnaHQsIHNvIGBodWdldGxiX2NtYV9yZXNlcnZlYCBpcyB0cmlnZ2VyZWQgKndpdGhvdXQgYW55IGNvbmRpdGlvbnMqIGR1cmluZyB0aGUgYG1tX2NvcmVfaW5pdF9lYXJseWAgc3RhZ2Ugb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNldHVwLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgbWVhbnMgdGhlIHN5c3RlbSBpcyBzZXR0aW5nIGFzaWRlIHNvbWUgQ01BIG1lbW9yeSBmb3IgSHVnZVRMQnMgdmVyeSBlYXJseSBvbiwgYmVmb3JlIHBvdGVudGlhbGx5IG1vcmUgZHluYW1pYyBhbGxvY2F0aW9uIGNob2ljZXMgYXJlIG1hZGUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGh1Z2V0bGJfY21hX3Jlc2VydmVgIGZ1bmN0aW9uIGl0c2VsZiBub3cgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIGhvdyB0aGlzIGltcGFjdHMgb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5IGRpc3RyaWJ1dGlvbiBhbmQgYXZhaWxhYmlsaXR5LiBUaGlzIGtpbmQgb2YgdXBmcm9udCByZXNlcnZhdGlvbiBkZWZpbml0ZWx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGZyYWdtZW50YXRpb24sIGFuZCB0aGUgZWZmaWNpZW5jeSBvZiBzdWJzZXF1ZW50IG1lbW9yeSByZXF1ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyODoxOC42MjE3NTQ2ODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYl9jbWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTY6XFx0dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbiAxNTc6XFx0e1xcbiAxNTg6XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCByZXNlcnZlZCwgcGVyX25vZGUsIG9yZGVyLCBnaWdhbnRpY19wYWdlX3NpemU7XFxuIDE1OTpcXHRcXHRib29sIG5vZGVfc3BlY2lmaWNfY21hX2FsbG9jID0gZmFsc2U7XFxuIDE2MDpcXHRcXHRpbnQgbmlkO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxuIDE2MzpcXHRcXHRcXHRyZXR1cm47XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xcbiAxNjY6XFx0XFx0aWYgKCFvcmRlcikge1xcbiAxNjc6XFx0XFx0XFx0cHJfd2FybihcXFwiaHVnZXRsYl9jbWE6IHRoZSBvcHRpb24gaXNuJ3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgYXJjaFxcXFxuXFxcIik7XFxuIDE2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDE2OTpcXHRcXHR9XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdC8qXFxuIDE3MjpcXHRcXHQgKiBIdWdlVExCIENNQSByZXNlcnZhdGlvbiBpcyByZXF1aXJlZCBmb3IgZ2lnYW50aWNcXG4gMTczOlxcdFxcdCAqIGh1Z2UgcGFnZXMgd2hpY2ggY291bGQgbm90IGJlIGFsbG9jYXRlZCB2aWEgdGhlXFxuIDE3NDpcXHRcXHQgKiBwYWdlIGFsbG9jYXRvci4gSnVzdCB3YXJuIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2VcXG4gMTc1OlxcdFxcdCAqIGJyZWFraW5nIHRoaXMgYXNzdW1wdGlvbi5cXG4gMTc2OlxcdFxcdCAqL1xcbiAxNzc6XFx0XFx0Vk1fV0FSTl9PTihvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUik7XFxuIDE3ODpcXHRcXHRnaWdhbnRpY19wYWdlX3NpemUgPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdGh1Z2V0bGJfYm9vdG1lbV9zZXRfbm9kZXMoKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0Zm9yIChuaWQgPSAwOyBuaWQgXFx1MDAzYyBNQVhfTlVNTk9ERVM7IG5pZCsrKSB7XFxuIDE4MzpcXHRcXHRcXHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XFxuIDE4NDpcXHRcXHRcXHRpZiAoc2l6ZSA9PSAwKVxcbiAxODU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcXG4gMTg4OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxcXG5cXFwiLCBuaWQpO1xcbiAxODk6XFx0XFx0XFx0fSBlbHNlIGlmICghSVNfQUxJR05FRChzaXplLCBnaWdhbnRpY19wYWdlX3NpemUpKSB7XFxuIDE5MDpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogY21hIGFyZWEgb2Ygbm9kZSAlZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWx1IE1pQlxcXFxuXFxcIixcXG4gMTkxOlxcdFxcdFxcdFxcdFxcdG5pZCwgZ2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xcbiAxOTI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTkzOlxcdFxcdFxcdFxcdG5vZGVfc3BlY2lmaWNfY21hX2FsbG9jID0gdHJ1ZTtcXG4gMTk0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplIC09IHNpemU7XFxuIDE5ODpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9IDA7XFxuIDE5OTpcXHRcXHR9XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdC8qIFZhbGlkYXRlIHRoZSBDTUEgc2l6ZSBhZ2FpbiBpbiBjYXNlIHNvbWUgaW52YWxpZCBub2RlcyBzcGVjaWZpZWQuICovXFxuIDIwMjpcXHRcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxuIDIwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGlmICghSVNfQUxJR05FRChodWdldGxiX2NtYV9zaXplLCBnaWdhbnRpY19wYWdlX3NpemUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjE4LjYyMTgxNzA1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA2Njc3MTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgaHVnZXRsYl9jbWFfc2l6ZWAgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2hlY2tpbmcgYGh1Z2V0bGJfY21hX3NpemVgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGVyZSBkb2VzIHRoaXMgdmFyaWFibGUgZ2V0IHNldD8gSSByZW1lbWJlciBzZWVpbmcgYGh1Z2V0bGJfY21hX3NpemVgIGJlaW5nIGluZmx1ZW5jZWQgYnkgYGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFgLCB3aGljaCBzZWVtcyB0byBiZSBkcml2ZW4gYnkgdGhlIGBodWdldGxiX2NtYT1gIHBhcmFtZXRlciBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgZWFybHkgb24uXG5cblRvIGFjdHVhbGx5IHRlc3QgdGhpcyBwcm9wZXJseSwgdGhlIGZ1enplciAoU3l6a2FsbGVyIGluIHRoaXMgY2FzZSkgd291bGQgbmVlZCB0byBiZSBib290ZWQgd2l0aCB0aGF0IGBodWdldGxiX2NtYT1gIHBhcmFtZXRlci4gTm93LCBJIGtub3cgU3l6a2FsbGVyICpjYW4qIHBhc3MgYm9vdCBwYXJhbWV0ZXJzLCBpZiBpdCdzIHNldCB1cCB0byBkbyBzby4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIGZ1enppbmcgd29ya2Zsb3cgdGhhdCBJJ20gc2V0dGluZyB1cCBkb2Vzbid0IGRpcmVjdGx5IGNvbnRyb2wgdGhlIGJvb3QgcGFyYW1ldGVyczsgd2UganVzdCBzdXBwbHkgdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5TbywgY291bGQgU3l6a2FsbGVyIGFscmVhZHkgaGF2ZSBgaHVnZXRsYl9jbWE9YCBpbiBvbmUgb2YgaXRzIGNvbmZpZ3M/IE9yLCBtYXliZSwgaXMgaXQgYWJsZSB0byBzZXQgaXQgYnkgZGVmYXVsdD8gTGV0J3MgcnVsZSB0aGF0IG91dC4gSG9sZCBvbiwgYGh1Z2V0bGJfY21hX3NpemVgIGlzIGluaXRpYWxpemVkIHRvIDAgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBhIG5vIG9uIHRoZSBzZWNvbmQgb3B0aW9uLlxuXG5Pa2F5LCBsZXQgbWUgYmFjayB1cCBhIG1pbnV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgYGh1Z2V0bGJfY21hX3NpemVgIG1pZ2h0IGJlIHNldD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgdHJhY2UgYWxsIHBvc3NpYmxlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI4OjUxLjY4ODU5MDA3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMjE5MzIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY21hLmM9MTc9c3RhdGljIHN0cnVjdCBjbWEgKmh1Z2V0bGJfY21hW01BWF9OVU1OT0RFU10gX19yb19hZnRlcl9pbml0O1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTtcXG5tbS9odWdldGxiX2NtYS5jLTE5LXN0YXRpYyBib29sIGh1Z2V0bGJfY21hX29ubHkgX19yb19hZnRlcl9pbml0O1xcbm1tL2h1Z2V0bGJfY21hLmM6MjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYy0yMS1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjg9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMzUtXFxubW0vaHVnZXRsYl9jbWEuYzozNjpcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0zNy1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTA1PXN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEoY2hhciAqcClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTIxLVxcdFxcdFxcdHRtcCA9IG1lbXBhcnNlKHMsIFxcdTAwMjZzKTtcXG5tbS9odWdldGxiX2NtYS5jOjEyMjpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9IHRtcDtcXG5tbS9odWdldGxiX2NtYS5jOjEyMzpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplICs9IHRtcDtcXG5tbS9odWdldGxiX2NtYS5jLTEyNC1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTMzLVxcdFxcdH0gZWxzZSB7XFxubW0vaHVnZXRsYl9jbWEuYzoxMzQ6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSA9IG1lbXBhcnNlKHAsIFxcdTAwMjZwKTtcXG5tbS9odWdldGxiX2NtYS5jLTEzNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTU2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTYxLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTYyOlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jLTE2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE4Mi1cXHRmb3IgKG5pZCA9IDA7IG5pZCBcXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkKyspIHtcXG5tbS9odWdldGxiX2NtYS5jOjE4MzpcXHRcXHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XFxubW0vaHVnZXRsYl9jbWEuYy0xODQtXFx0XFx0aWYgKHNpemUgPT0gMClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTk2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTk3OlxcdFxcdGh1Z2V0bGJfY21hX3NpemUgLT0gc2l6ZTtcXG5tbS9odWdldGxiX2NtYS5jOjE5ODpcXHRcXHRodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9IDA7XFxubW0vaHVnZXRsYl9jbWEuYy0xOTktXFx0fVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yMDEtXFx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cXG5tbS9odWdldGxiX2NtYS5jOjIwMjpcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0yMDMtXFx0XFx0cmV0dXJuO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjA0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjA1OlxcdGlmICghSVNfQUxJR05FRChodWdldGxiX2NtYV9zaXplLCBnaWdhbnRpY19wYWdlX3NpemUpKSB7XFxubW0vaHVnZXRsYl9jbWEuYy0yMDYtXFx0XFx0cHJfd2FybihcXFwiaHVnZXRsYl9jbWE6IGNtYSBhcmVhIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxcXG5cXFwiLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjA3LVxcdFxcdFxcdGdpZ2FudGljX3BhZ2Vfc2l6ZSAvIFNaXzFNKTtcXG5tbS9odWdldGxiX2NtYS5jOjIwODpcXHRcXHRodWdldGxiX2NtYV9zaXplID0gMDtcXG5tbS9odWdldGxiX2NtYS5jLTIwOS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTIxNi1cXHRcXHQgKi9cXG5tbS9odWdldGxiX2NtYS5jOjIxNzpcXHRcXHRwZXJfbm9kZSA9IERJVl9ST1VORF9VUChodWdldGxiX2NtYV9zaXplLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjE4LVxcdFxcdFxcdFxcdFxcdG5vZGVzX3dlaWdodChodWdldGxiX2Jvb3RtZW1fbm9kZXMpKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjIwLVxcdFxcdHByX2luZm8oXFxcImh1Z2V0bGJfY21hOiByZXNlcnZlICVsdSBNaUIsIHVwIHRvICVsdSBNaUIgcGVyIG5vZGVcXFxcblxcXCIsXFxubW0vaHVnZXRsYl9jbWEuYzoyMjE6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSAvIFNaXzFNLCBwZXJfbm9kZSAvIFNaXzFNKTtcXG5tbS9odWdldGxiX2NtYS5jLTIyMi1cXHR9XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTIyOS1cXHRcXHRpZiAobm9kZV9zcGVjaWZpY19jbWFfYWxsb2MpIHtcXG5tbS9odWdldGxiX2NtYS5jOjIzMDpcXHRcXHRcXHRpZiAoaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPT0gMClcXG5tbS9odWdldGxiX2NtYS5jLTIzMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5tbS9odWdldGxiX2NtYS5jLTIzMi1cXG5tbS9odWdldGxiX2NtYS5jOjIzMzpcXHRcXHRcXHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XFxubW0vaHVnZXRsYl9jbWEuYy0yMzQtXFx0XFx0fSBlbHNlIHtcXG5tbS9odWdldGxiX2NtYS5jOjIzNTpcXHRcXHRcXHRzaXplID0gbWluKHBlcl9ub2RlLCBodWdldGxiX2NtYV9zaXplIC0gcmVzZXJ2ZWQpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjM2LVxcdFxcdH1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjU2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjU3OlxcdFxcdGlmIChyZXNlcnZlZCBcXHUwMDNlPSBodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjU4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNjItXFx0XFx0LypcXG5tbS9odWdldGxiX2NtYS5jOjI2MzpcXHRcXHQgKiBodWdldGxiX2NtYV9zaXplIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFsbG9jYXRpb25zIGZyb21cXG5tbS9odWdldGxiX2NtYS5jLTI2NC1cXHRcXHQgKiBjbWEgYXJlIHBvc3NpYmxlLiAgU2V0IHRvIHplcm8gaWYgbm8gY21hIHJlZ2lvbnMgYXJlIHNldCB1cC5cXG5tbS9odWdldGxiX2NtYS5jLTI2NS1cXHRcXHQgKi9cXG5tbS9odWdldGxiX2NtYS5jOjI2NjpcXHRcXHRodWdldGxiX2NtYV9zaXplID0gMDtcXG5tbS9odWdldGxiX2NtYS5jLTI2Ny19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI3ND11bnNpZ25lZCBsb25nIF9faW5pdCBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yNzUte1xcbm1tL2h1Z2V0bGJfY21hLmM6Mjc2OlxcdHJldHVybiBodWdldGxiX2NtYV9zaXplO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjc3LX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjc5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjgwLXtcXG5tbS9odWdldGxiX2NtYS5jOjI4MTpcXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0yODItXFx0XFx0aHVnZXRsYl9jbWFfb25seSA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyODo1NC41MjA3ODkwNjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI5NTA4MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5emthbGxlciBJbnRlcmFjdGlvbiB3aXRoIEh1Z2VUTEIgQ01BIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYGh1Z2V0bGJfY21hX3NpemVgIHNldHRpbmcgaXMgZXhjbHVzaXZlbHkgaGFuZGxlZCB0aHJvdWdoIGBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hYC4gVGhlIGtleSBpcyB0aGF0IHN5emthbGxlciAqY2FuKiBkaXJlY3RseSBtYW5pcHVsYXRlIHRoaXMgdmFsdWUgdmlhIHRoZSBjb21tYW5kIGxpbmUsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgaHVnZXRsYl9jbWE9YCBwYXJhbWV0ZXIgaWYgaXQncyBhd2FyZSBvZiBpdC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC5cblxuR2l2ZW4gdGhpcyBpcyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCB0aGVyZWZvcmUgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLlxuXG5UaGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgaXMgYWZmZWN0ZWQuIFNvLCBgRm9jdXNTeW1ib2xzYCBpcyBnb2luZyB0byBiZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC5cblxuTm93LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IGVuYWJsaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucy4gQ2xlYXJseSwgYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgIGFyZSBlc3NlbnRpYWwuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTlVNQWAgbWlnaHQgYmUgaW1wb3J0YW50IGZvciBgbm9kZW1hc2tgIHRvIGhhdmUgaXRzIGZ1bGwgbWVhbmluZywgYnV0IGBDUFVTRVRTYCBhbmQgYENNQWAgYXJlIHRoZSBtYWluIHBpZWNlcy5cblxuSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDUFVTRVRTYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UuIEFoYSEgSXQgZGVwZW5kcyBvbiBgQ0dST1VQU2AuIEkgbmVlZCB0byByZXZpZXcgYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1BVU0VUU2AgYW5kIHRvIGJlIHN1cmUgSSBoYXZlIGFsbCB0aGUgY29uZmlndXJhdGlvbnMgY29ycmVjdGx5IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyOTowMy44MTU4NzI0MzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDU2NjEwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVVNFVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyODQ9Y29uZmlnIENHUk9VUF9IVUdFVExCXFxuLS1cXG5pbml0L0tjb25maWctMTI5OS1cXG5pbml0L0tjb25maWc6MTMwMDpjb25maWcgQ1BVU0VUU1xcbmluaXQvS2NvbmZpZy0xMzAxLVxcdGJvb2wgXFxcIkNwdXNldCBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzMTItXFxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMxNC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MDUuMzIxNTM3ODA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDc0ODEzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXNzdWUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgYSBzZXR0aW5nIHJlbGF0ZWQgdG8gYSBmZWF0dXJlIEknbSBmYW1pbGlhciB3aXRoIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwsIGZ1bmRhbWVudGFsIG9wdGlvbnMgYXJlIGRlZmluZWQuIE15IG1lbnRhbCBtYXAgb2YgdGhlIEtjb25maWcgaGllcmFyY2h5IHN1Z2dlc3RzIGxpbmUgMTMwMCBpcyBhIGxpa2VseSBsb2NhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBhbnkgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgcHJvYmxlbS4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgY2x1ZXMgcmVsYXRlZCB0byB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eSBvciBmb3IgYW55IGltbWVkaWF0ZSBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTEuMDY5MDIxNTY4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5NTpcXHRcXHQgIEh1Z2VUTEIgcGFnZXMgYmV5b25kIGl0cyBsaW1pdC4gVGhpcyByZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8ga25vd1xcbjEyOTY6XFx0XFx0ICBiZWZvcmVoYW5kIGhvdyBtdWNoIEh1Z2VUTEIgcGFnZXMgaXQgd291bGQgcmVxdWlyZSBmb3IgaXRzIHVzZS4gVGhlXFxuMTI5NzpcXHRcXHQgIGNvbnRyb2wgZ3JvdXAgaXMgdHJhY2tlZCBpbiB0aGUgdGhpcmQgcGFnZSBscnUgcG9pbnRlci4gVGhpcyBtZWFuc1xcbjEyOTg6XFx0XFx0ICB0aGF0IHdlIGNhbm5vdCB1c2UgdGhlIGNvbnRyb2xsZXIgd2l0aCBodWdlIHBhZ2UgbGVzcyB0aGFuIDMgcGFnZXMuXFxuMTI5OTpcXHRcXG4xMzAwOlxcdGNvbmZpZyBDUFVTRVRTXFxuMTMwMTpcXHRcXHRib29sIFxcXCJDcHVzZXQgY29udHJvbGxlclxcXCJcXG4xMzAyOlxcdFxcdGRlcGVuZHMgb24gU01QXFxuMTMwMzpcXHRcXHRzZWxlY3QgVU5JT05fRklORFxcbjEzMDQ6XFx0XFx0c2VsZWN0IENQVV9JU09MQVRJT05cXG4xMzA1OlxcdFxcdGhlbHBcXG4xMzA2OlxcdFxcdCAgVGhpcyBvcHRpb24gd2lsbCBsZXQgeW91IGNyZWF0ZSBhbmQgbWFuYWdlIENQVVNFVHMgd2hpY2hcXG4xMzA3OlxcdFxcdCAgYWxsb3cgZHluYW1pY2FsbHkgcGFydGl0aW9uaW5nIGEgc3lzdGVtIGludG8gc2V0cyBvZiBDUFVzIGFuZFxcbjEzMDg6XFx0XFx0ICBNZW1vcnkgTm9kZXMgYW5kIGFzc2lnbmluZyB0YXNrcyB0byBydW4gb25seSB3aXRoaW4gdGhvc2Ugc2V0cy5cXG4xMzA5OlxcdFxcdCAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIG9uIGxhcmdlIFNNUCBvciBOVU1BIHN5c3RlbXMuXFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEzMTI6XFx0XFxuMTMxMzpcXHRjb25maWcgQ1BVU0VUU19WMVxcbjEzMTQ6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA1OjI5OjExLjA2OTE4MjMyOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjgyNDc2NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBIdWdlVExCIGFuZCBDTUEgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgcmVsYXRlZCB0byBIdWdlVExCIGFuZCBDTUEsIHNwZWNpZmljYWxseSB3aXRoaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBDUFVTRVRTYCBkZXBlbmRzIG9uIGBTTVBgLCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGVuYWJsZWQgaW4gb3VyIGNvbmZpZ3VyYXRpb25zLiBBZGRpdGlvbmFsbHksIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gQSBxdWVzdGlvbiBwb3BzIHVwOiBpcyBgTlVNQWAgYSByZXF1aXJlbWVudCBoZXJlPyBXZSBjYW4gY2hlY2sgYG5vZGVfaXNzZXRgIGFuZCBgbm9kZW1hc2tfdGAgdG8gZGV0ZXJtaW5lIGlmIGBOVU1BYCBpcyBhIHJlcXVpcmVtZW50LlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgbm9kZW1hc2tfdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9ub2RlbWFzay5oYC4gRXZlbiB3aXRob3V0IGBOVU1BYCwgaXQncyBhdmFpbGFibGUsIHRob3VnaCBpdCdsbCBiZSBsaW1pdGVkIHRvIGEgc2luZ2xlIG5vZGUgKG5vZGUgMCkuIFRoZSByZWFsIG11bHRpLW5vZGUgYmVoYXZpb3Igb25seSBraWNrcyBpbiB3aGVuIGBOVU1BYCBpcyBlbmFibGVkLiBUaGUgYnVnICpjb3VsZCogYmUgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb25zLCBidXQgc2luY2UgYE5VTUFgIGlzIHR5cGljYWxseSBlbmFibGVkIGluIG91ciBzeXprYWxsZXIgY29uZmlncywgdGhhdCBzZWVtcyBsZXNzIGxpa2VseS4gTGV0J3MgcmV2aXNpdCB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5UaGUgcGF0Y2gncyBjb3JlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIGJlZm9yZSBpdCBldmVuIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGZyb20gYGh1Z2V0bGJfY21hW25pZF1gLiBJZiBgbm9kZW1hc2tgIGlzIE5VTEwsIGl0IGdyYWJzIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLCB3aGljaCBpcyBhIGR5bmFtaWMgdGhpbmcsIGFuZCB1c2VzIHRoYXQgaW5zdGVhZC4gVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgYWxsb2NhdGlvbiBtZWNoYW5pc20uIEl0J3Mgbm93IHJlc3BlY3RpbmcgdGhlIGFsbG93ZWQgbWVtb3J5IG5vZGVzIGRlZmluZWQgYnkgdGhlIGN1cnJlbnQgY3B1c2V0LlxuXG5UaGVyZWZvcmUsIHRoaXMgbWVyaXRzIGZvY3VzZWQgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3MgaW1wb3J0YW50IHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRvIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLlxuXG4qKkRlY2lzaW9uOioqIFdvcnRoRnV6emluZzogdHJ1ZVxuKipGb2N1c1N5bWJvbHM6KiogW1wiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJdXG4qKkVuYWJsZUNvbmZpZ3M6KiogW1wiSFVHRVRMQkZTXCIsIFwiQ01BXCIsIFwiQ1BVU0VUU1wiXVxuKipSZWFzb25pbmc6KiogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gY29uc2lkZXIgY3B1c2V0IG1lbXMgYWxsb3dlZCB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgZnJvemVuIGZvbGlvcyBmcm9tIENNQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDQsIk91dHB1dFRva2VucyI6MTA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTkuNzUxNjYxNjU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5NDg4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHRvIGNvbnNpZGVyIGNwdXNldCBtZW1zIGFsbG93ZWQgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZnJvbSBDTUEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwNToyOToxOS44MjM2MTY3NzJaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU1MjU1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTkuODI0MDYwOTQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MjU0ODA3MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IHRoZSB0YXNrJ3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Y3N2QxZThmNzI5NGQ0ODFjNmYyZDcyZThjYzM2MGJhZGU1ZWRlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMDU6MjY6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuY1xuaW5kZXggMzkzNDRkNmM3OGQ4NC4uM2FlOTM0NzA3OGU5YiAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfY21hLmNcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX2lubGluZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuQEAgLTMwLDExICszMSwyMyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuIFx0aW50IG5vZGU7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuK1x0bm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2s7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4rXHRpZiAoIW5vZGVtYXNrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG4rXG4rXHRcdGRvIHtcbitcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuK1x0XHRcdGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbitcdFx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG4rXG4rXHRcdG5vZGVtYXNrID0gXHUwMDI2bG9jYWxfbm9kZV9tYXNrO1xuK1x0fVxuK1xuK1x0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4gXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MTkuODI0MDYxODgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MjU0NzgzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIE15IGluaXRpYWwgcmVhZCBzaG93cyBpdCdzIGludHJvZHVjaW5nIGEgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrO2AgdmFyaWFibGUgYW5kIGluaXRpYWxpemluZyBpdCB3aXRoIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlmIHRoZSBgbm9kZW1hc2tgIHBvaW50ZXIgaXMgbnVsbC4gVGhlbiwgaXQgdXNlcyBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgIHRvIGRldGVybWluZSBpZiBhbGxvY2F0aW9uIGlzIHBlcm1pdHRlZCBmcm9tIGEgZ2l2ZW4gYGh1Z2V0bGJfY21hW25pZF1gLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbkxldCdzIGRpc3NlY3QgdGhpcyBpbml0aWFsaXphdGlvbiBibG9jayBmb3IgYGxvY2FsX25vZGVfbWFza2AuIEkgc2VlIHRoaXM6XG5cbmBgYGNcblx0aWYgKCFub2RlbWFzaykge1xuXHRcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG5cblx0XHRkbyB7XG5cdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuXHRcdFx0bG9jYWxfbm9kZV9tYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuXHRcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xuXG5cdFx0bm9kZW1hc2sgPSBcdTAwMjZsb2NhbF9ub2RlX21hc2s7XG5cdH1cbmBgYFxuXG5SaWdodCwgYGxvY2FsX25vZGVfbWFza2AgaXMgYSBgbm9kZW1hc2tfdGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBiaXRtYXAuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgdGhlIGFzc2lnbm1lbnQ6IGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YC4gVGhpcyBpcyBhIHN0cnVjdCBjb3B5LiBUaGUgZW50aXJlIGJpdG1hcCB3aXRoaW4gYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgZ2V0cyBjb3BpZWQgdG8gYGxvY2FsX25vZGVfbWFza2AuICBTbywgdGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkdWUgdG8gbWVtb3J5LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYC4uLiB0aGF0J3MgZWl0aGVyIGEgZ2xvYmFsIG9yIGEgcGVyLXRhc2sgdmFyaWFibGUg4oCTIGEgbWFjcm8gZXhwYW5kaW5nIHRvIGBjdXJyZW50LVx1MDAzZW1lbXNfYWxsb3dlZGAgdG8gYmUgcHJlY2lzZS4gQW5kIGNyaXRpY2FsbHksIGl0J3MgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGFzc2lnbm1lbnQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUg4oCTIGluY2x1ZGluZyB0aGUgYml0bWFwLiBUaGUgcmVzdWx0aW5nIGBsb2NhbF9ub2RlX21hc2tgIGlzLCB0aGVyZWZvcmUsIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXG5cblNvLCBpbiBjb25jbHVzaW9uLCBJIGRvbid0IHNlZSAqYW55KiBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlLiBUaGUgcGF0Y2ggc2ltcGx5IGFkZHMgYSBub2RlbWFzayBjaGVjayB0byB0aGUgaHVnZXRsYiBDTUEgYWxsb2NhdGlvbiBwYXRoLCBjb3JyZWN0bHkgdXNpbmcgYW4gaW5pdGlhbGl6ZWQgbm9kZW1hc2sgdG8gZW5mb3JjZSBtZW1vcnkgbm9kZSByZXN0cmljdGlvbnMuIE5vIEtNU0FOIGZsYWcgaXMgbmVlZGVkLiBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTAsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDU6Mjk6MzUuMDc4ODQ4MjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgdGhlIHRhc2sncyBgbWVtc19hbGxvd2VkYCBub2RlbWFzayB3aGVuIGFsbG9jYXRpbmcgYSBDTUEgZm9saW8uIEl0IGludHJvZHVjZXMgYSBsb2NhbCBgbm9kZW1hc2tfdCBsb2NhbF9ub2RlX21hc2tgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYGxvY2FsX25vZGVfbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IHRoZSB0YXNrJ3MgYG1lbXNfYWxsb3dlZGAgbm9kZW1hc2sgd2hlbiBhbGxvY2F0aW5nIGEgQ01BIGZvbGlvLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgYG5vZGVtYXNrX3QgbG9jYWxfbm9kZV9tYXNrYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBsb2NhbF9ub2RlX21hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7YCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[1] Phase: Succeeded StartedAt: 2026-08-09 05:29:45 +0000 UTC FinishedAt: 2026-08-09 05:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-09 05:29:45 +0000 UTC FinishedAt: 2026-08-09 05:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2] Phase: Succeeded StartedAt: 2026-08-09 05:29:45 +0000 UTC FinishedAt: 2026-08-09 09:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-09 05:29:45 +0000 UTC FinishedAt: 2026-08-09 09:17:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-09 05:29:45 +0000 UTC FinishedAt: 2026-08-09 05:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-09 05:29:45 +0000 UTC FinishedAt: 2026-08-09 05:29:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-convert-artifact-2509161338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-09 05:29:55 +0000 UTC FinishedAt: 2026-08-09 05:46:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-09 05:29:55 +0000 UTC FinishedAt: 2026-08-09 05:46:34 +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:*25ee866c-86b3-46f2-b441-58635fac72a1,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-workflowhmcp8/series-workflowhmcp8-convert-artifact-2509161338/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": "79026d54-c809-47ac-a5e5-ff4308ffc389", "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-workflowhmcp8/series-workflowhmcp8-build-action-548967464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-09 05:29:55 +0000 UTC FinishedAt: 2026-08-09 05:46:24 +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:*25ee866c-86b3-46f2-b441-58635fac72a1,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-workflowhmcp8/series-workflowhmcp8-convert-artifact-2509161338/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": "79026d54-c809-47ac-a5e5-ff4308ffc389", "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-workflowhmcp8/series-workflowhmcp8-build-action-548967464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-09 05:46:34 +0000 UTC FinishedAt: 2026-08-09 05:46:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-09 05:46:34 +0000 UTC FinishedAt: 2026-08-09 05:46:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-09 05:46:34 +0000 UTC FinishedAt: 2026-08-09 05:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-09 05:46:34 +0000 UTC FinishedAt: 2026-08-09 05:46:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-convert-artifact-2652820181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-09 05:46:44 +0000 UTC FinishedAt: 2026-08-09 05:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-09 05:46:44 +0000 UTC FinishedAt: 2026-08-09 05:48:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*79026d54-c809-47ac-a5e5-ff4308ffc389,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-workflowhmcp8/series-workflowhmcp8-build-action-548967464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-09 05:48:36 +0000 UTC FinishedAt: 2026-08-09 05:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-09 05:48:36 +0000 UTC FinishedAt: 2026-08-09 05:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-09 05:48:36 +0000 UTC FinishedAt: 2026-08-09 06:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-09 05:48:36 +0000 UTC FinishedAt: 2026-08-09 06:05:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*25ee866c-86b3-46f2-b441-58635fac72a1,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-workflowhmcp8/series-workflowhmcp8-convert-artifact-2652820181/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": "49cf75b2-83b8-43e4-a75c-8df08100896f", "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-workflowhmcp8/series-workflowhmcp8-build-action-4228904033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-09 05:48:36 +0000 UTC FinishedAt: 2026-08-09 06:05:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*25ee866c-86b3-46f2-b441-58635fac72a1,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-workflowhmcp8/series-workflowhmcp8-convert-artifact-2652820181/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": "49cf75b2-83b8-43e4-a75c-8df08100896f", "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-workflowhmcp8/series-workflowhmcp8-build-action-4228904033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-09 06:05:10 +0000 UTC FinishedAt: 2026-08-09 06:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-09 06:05:10 +0000 UTC FinishedAt: 2026-08-09 06:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-09 06:05:10 +0000 UTC FinishedAt: 2026-08-09 06:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-09 06:05:10 +0000 UTC FinishedAt: 2026-08-09 06:06:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49cf75b2-83b8-43e4-a75c-8df08100896f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-build-action-4228904033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 09:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 09:17:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*79026d54-c809-47ac-a5e5-ff4308ffc389,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49cf75b2-83b8-43e4-a75c-8df08100896f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-build-action-548967464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-build-action-4228904033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 06:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 06:07:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-convert-artifact-89466810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 06:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 06:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-09 06:07:06 +0000 UTC FinishedAt: 2026-08-09 06:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-09 06:07:16 +0000 UTC FinishedAt: 2026-08-09 09:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"9cc03985-fbf7-4975-86f2-8766df7c689a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-09 06:07:16 +0000 UTC FinishedAt: 2026-08-09 09:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*79026d54-c809-47ac-a5e5-ff4308ffc389,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49cf75b2-83b8-43e4-a75c-8df08100896f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-build-action-548967464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-build-action-4228904033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmcp8/series-workflowhmcp8-convert-artifact-89466810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}