Name: series-workflowrr9t4 Phase: Succeeded StartedAt: 2026-09-07 02:17:12 +0000 UTC FinishedAt: 2026-09-07 06:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[0] Phase: Succeeded StartedAt: 2026-09-07 02:17:12 +0000 UTC FinishedAt: 2026-09-07 02:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 02:17:12 +0000 UTC FinishedAt: 2026-09-07 02:56:27 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLB_PAGE", "HUGETLBFS" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLB_PAGE", "HUGETLBFS" ], "series_id": "5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_hugetlb_ptep_mkold", "damon_hugetlb_mkold", "damon_mkold_hugetlb_entry", "damon_va_mkold", "damon_va_prepare_access_checks" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHBhZ2UgYWdpbmcgaW4gREFNT04gKG1tL2RhbW9uL3ZhZGRyLmMpIGJ5IGludHJvZHVjaW5nIHRoZSBoZWxwZXIgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKCkgd2hpY2ggcHJvcGVybHkgY2xlYXJzIHRoZSBQVEUgdmlhIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKCkgYmVmb3JlIG1hcmtpbmcgaXQgb2xkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChlLmcuIGVudHJ5LCByZWZlcmVuY2VkLCBwc2l6ZSkgYXJlIHNjYWxhci9QVEUgdHlwZXMgZnVsbHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcGFnZS10YWJsZSBoYW5kbGluZyBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgZm9yIGh1Z2V0bGIgZW50cmllcyBpbiBtbS9kYW1vbi92YWRkci5jIGJ5IGV4dHJhY3RpbmcgYW5kIHVwZGF0aW5nIHRoZSBodWdldGxiIFBURSBjbGVhcmluZyBhbmQgYWdpbmcgbG9naWMgKHVzaW5nIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMgaW4gaHVnZXRsYiBQVEUgbWFuaXB1bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTRiNDg3OTYzOTdkMDQzZTgzMjdjNTZjOGMyNGZkMzNjNzE0NGI4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTU6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtMjgzLDIyICYjNDM7MjgzLDI5IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4mIzQzO1xuJiM0MztcdGlmICghcHRlX3lvdW5nKCplbnRyeSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xuJiM0MztcdCplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpO1xuJiM0MztcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiBcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXG4gXHRmb2xpb19nZXQoZm9saW8pO1xuIFxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4mIzQzO1x0cmVmZXJlbmNlZCA9IGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGUsIG1tLCB2bWEsIGFkZHIsIFx1MDAyNmVudHJ5KTtcbiBcdGlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsXG4gXHRcdFx0XHQgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4gXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGI0ODc5NjM5N2QwNDNlODMyN2M1NmM4YzI0ZmQzM2M3MTQ0YjgwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMjo1NTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtMjgzLDIyICYjNDM7MjgzLDI5IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIH0KIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfeW91bmcoKmVudHJ5KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJKmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpOwomIzQzOwkqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTsKJiM0MzsJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsICplbnRyeSwgcHNpemUpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7CiAJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCiAJZm9saW9fZ2V0KGZvbGlvKTsKIAotCWlmIChwdGVfeW91bmcoZW50cnkpKSB7Ci0JCXJlZmVyZW5jZWQgPSB0cnVlOwotCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7Ci0JCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwotCX0KLQomIzQzOwlyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgJmFtcDtlbnRyeSk7CiAJaWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkciwKIAkJCQkgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpCiAJCXJlZmVyZW5jZWQgPSB0cnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ4CgkJCQkJCQlvdXRwdXQ6IDYzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyB0aGUgREFNT04gdmFkZHIuYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHJldmlldyByZXF1ZXN0LiBUaGUgdGFyZ2V0IGZpbGUgaXMgYG1tL2RhbW9uL3ZhZGRyLmNgLCB3aGljaCBpcyByaWdodCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHkgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpLCB3aGljaCBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgZ2V0IGEgZ29vZCBncmFzcCBvZiB0aGUgY29udGV4dC4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBkaWZmIG9wZW4gYW5kIHJlYWxseSBleGFtaW5lIHdoYXQgbW9kaWZpY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgZmlsZS4gVGhlbiBJIG5lZWQgdG8gc2VlIHRoZSByZWxhdGVkIGZpbGVzLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHF1aWNrbHkgcmVtaW5kIG15c2VsZiBvZiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSYjMzk7bGwgcHJvYmFibHkgcHVsbCB1cCBgbW0vZGFtb24vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRob3NlIHF1aWNrbHkgb3Blbi4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NTpcdFx0aWYgKCFwdGUpXG4gMjc2Olx0XHRcdHJldHVybiAwO1xuIDI3NzpcdFx0aWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGUpKSlcbiAyNzg6XHRcdFx0Z290byBvdXQ7XG4gMjc5Olx0XHRkYW1vbl9wdGVwX21rb2xkKHB0ZSwgd2Fsay1cdTAwM2V2bWEsIGFkZHIpO1xuIDI4MDpcdG91dDpcbiAyODE6XHRcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuIDI4MjpcdFx0cmV0dXJuIDA7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gMjg2Olx0c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDI4NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxuIDI5MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjkzOlx0XHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG4gMjk0Olx0XHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcbiAyOTU6XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbiAyOTY6XHRcdHJldHVybiB0cnVlO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiAyOTk6XHRzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDMwMDpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiAzMDE6XHR7XG4gMzAyOlx0XHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiAzMDM6XHRcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiAzMDQ6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuIDMwNTpcdFxuIDMwNjpcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiAzMDc6XHRcbiAzMDg6XHRcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcdTAwMjZlbnRyeSk7XG4gMzA5Olx0XHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuIDMxMDpcdFx0XHRcdFx0ICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuIDMxMTpcdFx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiAzMTI6XHRcbiAzMTM6XHRcdGlmIChyZWZlcmVuY2VkKVxuIDMxNDpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuIDMxNTpcdFxuIDMxNjpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuIDMxNzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAzMTg6XHR9XG4gMzE5Olx0XG4gMzIwOlx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gMzIxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gMzIyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDMyMzpcdHtcbiAzMjQ6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDk1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbi0tXG5tbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xubW0vZGFtb24vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbm1tL2RhbW9uL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbm1tL2RhbW9uL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xubW0vZGFtb24vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOT1zdGF0aWMgREVGSU5FX01VVEVYKGRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYzozMDpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcbm1tL2RhbW9uL2NvcmUuYy0zMS1cbm1tL2RhbW9uL2NvcmUuYz0zMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9kYW1vbi9jb3JlLmMtMzMtXG5tbS9kYW1vbi9jb3JlLmM6MzQ6LyogU2hvdWxkIGJlIGNhbGxlZCB1bmRlciBkYW1vbl9vcHNfbG9jayB3aXRoIGlkIHNtYWxsZXIgdGhhbiBOUl9EQU1PTl9PUFMgKi9cbm1tL2RhbW9uL2NvcmUuYy0zNS1zdGF0aWMgYm9vbCBfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01My1cbm1tL2RhbW9uL2NvcmUuYzo1NDpcdGlmIChpZCBcdTAwM2U9IE5SX0RBTU9OX09QUylcbm1tL2RhbW9uL2NvcmUuYy01NS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02Mi0vKipcbm1tL2RhbW9uL2NvcmUuYzo2MzogKiBkYW1vbl9yZWdpc3Rlcl9vcHMoKSAtIFJlZ2lzdGVyIGEgbW9uaXRvcmluZyBvcGVyYXRpb25zIHNldCB0byBEQU1PTi5cbm1tL2RhbW9uL2NvcmUuYy02NC0gKiBAb3BzOlx0bW9uaXRvcmluZyBvcGVyYXRpb25zIHNldCB0byByZWdpc3Rlci5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzE9aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NC1cbm1tL2RhbW9uL2NvcmUuYzo3NTpcdGlmIChvcHMtXHUwMDNlaWQgXHUwMDNlPSBOUl9EQU1PTl9PUFMpXG5tbS9kYW1vbi9jb3JlLmMtNzYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz05OD1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDEtXG5tbS9kYW1vbi9jb3JlLmM6MTAyOlx0aWYgKGlkIFx1MDAzZT0gTlJfREFNT05fT1BTKVxubW0vZGFtb24vY29yZS5jLTEwMy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vY29yZS5jPTMwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9tdnN1bSh1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTMxMy0gKiBAcjpcdFx0UmVnaW9uIHRvIGdldCB0aGUgYWNjZXNzIGZyZXF1ZW5jeSBvZi5cbm1tL2RhbW9uL2NvcmUuYzozMTQ6ICogQGN0eDpcdERBTU9OIGNvbnRleHQgb2YgQHIuXG5tbS9kYW1vbi9jb3JlLmMtMzE1LSAqXG4tLVxubW0vZGFtb24vY29yZS5jPTM0OT11bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzcyLVxubW0vZGFtb24vY29yZS5jOjM3MzojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jLTM3NC1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMS1cdHJlZ2lvbi1cdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDAyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYy00MDMtXHRcdHJlZ2lvbi1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9pbnNlcnRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTQzMC1cbm1tL2RhbW9uL2NvcmUuYzo0MzE6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYy00MzItc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzQ1PXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG4tLVxubW0vZGFtb24vY29yZS5jLTc2MS1cdCAqIG5leHRfYXBwbHlfc2lzIHdpbGwgYmUgc2V0IHdoZW4ga2RhbW9uZCBzdGFydHMuICBXaGlsZSBrZGFtb25kIGlzXG5tbS9kYW1vbi9jb3JlLmM6NzYyOlx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbm1tL2RhbW9uL2NvcmUuYy03NjMtXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTAxPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTMwLVx0Y3R4LVx1MDAzZWFkZHJfdW5pdCA9IDE7XG5tbS9kYW1vbi9jb3JlLmM6OTMxOlx0Y3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBEQU1PTl9NSU5fUkVHSU9OX1NaO1xubW0vZGFtb24vY29yZS5jLTkzMi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXG5tbS9kYW1vbi9jb3JlLmM6MTEwODogKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcbm1tL2RhbW9uL2NvcmUuYy0xMTA5LSAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIxNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjM0LSAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xubW0vZGFtb24vY29yZS5jOjEyMzU6ICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXG5tbS9kYW1vbi9jb3JlLmMtMTIzNi0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDI3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MzctXHRcdG5yX3Byb2JlcyYjNDM7JiM0Mzs7XG5tbS9kYW1vbi9jb3JlLmM6MTQzODpcdGlmIChucl9wcm9iZXMgXHUwMDNlIERBTU9OX01BWF9QUk9CRVMpXG5tbS9kYW1vbi9jb3JlLmMtMTQzOS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzkxPXN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzk3LVx0c3dpdGNoIChkc3QtXHUwMDNldHlwZSkge1xubW0vZGFtb24vY29yZS5jOjE3OTg6XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vY29yZS5jLTE3OTktXHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgwNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODI4LVx0XHRzd2l0Y2ggKHNyY19maWx0ZXItXHUwMDNldHlwZSkge1xubW0vZGFtb24vY29yZS5jOjE4Mjk6XHRcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmMtMTgzMC1cdFx0XHRuZXdfZmlsdGVyLVx1MDAzZW1lbWNnX2lkID0gc3JjX2ZpbHRlci1cdTAwM2VtZW1jZ19pZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg4OS1cdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cbm1tL2RhbW9uL2NvcmUuYzoxODkwOlx0aWYgKHNyYy1cdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTg5MS1cdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XG4tLVxubW0vZGFtb24vY29yZS5jPTE5Mzc9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5NTMtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTk1NDogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbm1tL2RhbW9uL2NvcmUuYzoxOTU1OiAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9OIGNvbnRleHQuXG5tbS9kYW1vbi9jb3JlLmM6MTk1NjogKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTU3LSAqXG4tLVxubW0vZGFtb24vY29yZS5jPTIxNTE9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC0vKipcbm1tL2RhbW9uL2NvcmUuYzoyMTYxOiAqIGRhbW9uX2lzX3J1bm5pbmcoKSAtIFJldHVybnMgaWYgYSBnaXZlbiBEQU1PTiBjb250ZXh0IGlzIHJ1bm5pbmcuXG5tbS9kYW1vbi9jb3JlLmM6MjE2MjogKiBAY3R4Olx0VGhlIERBTU9OIGNvbnRleHQgdG8gc2VlIGlmIHJ1bm5pbmcuXG5tbS9kYW1vbi9jb3JlLmMtMjE2My0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTY2PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNzYtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjE3NzogKiBkYW1vbl9rZGFtb25kX3BpZCgpIC0gUmV0dXJuIHBpZCBvZiBhIGdpdmVuIERBTU9OIGNvbnRleHQmIzM5O3Mgd29ya2VyIHRocmVhZC5cbm1tL2RhbW9uL2NvcmUuYzoyMTc4OiAqIEBjdHg6XHRUaGUgREFNT04gY29udGV4dCBvZiB0aGUgcXVlc3Rpb24uXG5tbS9kYW1vbi9jb3JlLmMtMjE3OS0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTgyPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxOTMtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjE5NDogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cbm1tL2RhbW9uL2NvcmUuYzoyMTk1OiAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cbm1tL2RhbW9uL2NvcmUuYy0yMTk2LSAqIEBjb250cm9sOlx0Q29udHJvbCB2YXJpYWJsZSBvZiB0aGUgY2FsbCByZXF1ZXN0LlxubW0vZGFtb24vY29yZS5jLTIxOTctICpcbm1tL2RhbW9uL2NvcmUuYzoyMTk4OiAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiB3aXRoIGFuXG5tbS9kYW1vbi9jb3JlLmMtMjE5OS0gKiBhcmd1bWVudCBkYXRhIHRoYXQgcmVzcGVjdGl2ZWx5IHBhc3NlZCB2aWEgXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZWZuIGFuZFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjE0PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI0NS0gKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxubW0vZGFtb24vY29yZS5jOjIyNDY6ICogQGN0eDpcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cbm1tL2RhbW9uL2NvcmUuYy0yMjQ3LSAqIEBjb250cm9sOlx0Q29udHJvbCB2YXJpYWJsZSBvZiB0aGUgd2FsayByZXF1ZXN0LlxubW0vZGFtb24vY29yZS5jLTIyNDgtICpcbm1tL2RhbW9uL2NvcmUuYzoyMjQ5OiAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCByZWdpb25cbm1tL2RhbW9uL2NvcmUuYy0yMjUwLSAqIHRoYXQgdGhlIGtkYW1vbmQgd2lsbCBhcHBseSBEQU1PUyBhY3Rpb24gdG8sIGFuZCB3YWl0IHVudGlsIHRoZSBrZGFtb25kXG4tLVxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTUtXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MjMxNjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jLTIzMTctXHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXHUwMDNlcHJvYmVfaGl0c1tpXTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQzNC0gKiByZWdpb25zLiAgVG8gYXZvaWQgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gb25seSBhbHJlYWR5IGFwcGxpZWRcbm1tL2RhbW9uL2NvcmUuYzoyNDM1OiAqIHJlZ2lvbnMsIERBTU9OIHNraXBzIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIHRoZSByZWdpb25zIHRoYXQgY2hhcmdlZFxubW0vZGFtb24vY29yZS5jLTI0MzYtICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXG4tLVxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2OTAtXHQvKlxubW0vZGFtb24vY29yZS5jOjI2OTE6XHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcbm1tL2RhbW9uL2NvcmUuYy0yNjkyLVx0ICogaW1wbGllcyB3aXRoICYjMzk7bnJfY29udGV4dHMmIzM5OyBmaWxlLiAgTmV2ZXJ0aGVsZXNzLCBvbmx5IHNpbmdsZSBjb250ZXh0XG4tLVxubW0vZGFtb24vY29yZS5jPTI5NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjk4OC1cbm1tL2RhbW9uL2NvcmUuYzoyOTg5OiNpZmRlZiBDT05GSUdfREFNT05fUEFERFJcbm1tL2RhbW9uL2NvcmUuYy0yOTkwLS8qXG5tbS9kYW1vbi9jb3JlLmMtMjk5MS0gKiBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKCkgLSBDYWxjdWxhdGUgcmF3IGVsaWdpYmxlIGJ5dGVzIHBlciBub2RlLlxubW0vZGFtb24vY29yZS5jOjI5OTI6ICogQGM6XHRcdFRoZSBEQU1PTiBjb250ZXh0LlxubW0vZGFtb24vY29yZS5jLTI5OTMtICogQHM6XHRcdFRoZSBzY2hlbWUuXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMDEtICogTm90ZTogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkYW1vbl9nZXRfZm9saW8oKSBmcm9tIG9wcy1jb21tb24uYywgd2hpY2ggaXNcbm1tL2RhbW9uL2NvcmUuYzozMDAyOiAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXG5tbS9kYW1vbi9jb3JlLmMtMzAwMy0gKiBjb250ZXh0IHRvIGJlIHVzaW5nIFBBRERSIG9wZXJhdGlvbnMgZm9yIG1lYW5pbmdmdWwgcmVzdWx0cy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzA2OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA3NC1cbm1tL2RhbW9uL2NvcmUuYzozMDc1Olx0aWYgKGMtXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUilcbm1tL2RhbW9uL2NvcmUuYy0zMDc2LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA4OC19XG5tbS9kYW1vbi9jb3JlLmM6MzA4OTojZWxzZSAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cbm1tL2RhbW9uL2NvcmUuYy0zMDkwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDk0LX1cbm1tL2RhbW9uL2NvcmUuYzozMDk1OiNlbmRpZiAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cbm1tL2RhbW9uL2NvcmUuYy0zMDk2LSNlbHNlIC8qIENPTkZJR19OVU1BICovXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNjc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDctXG5tbS9kYW1vbi9jb3JlLmM6MzQwODojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jLTM0MDktc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDI2PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MzYtXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbm1tL2RhbW9uL2NvcmUuYzozNDM3Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmMtMzQzOC1cdFx0bC1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXHUwMDNlcHJvYmVfaGl0c1tpXSAqIHN6X2wgJiM0Mzsgci1cdTAwM2Vwcm9iZV9oaXRzW2ldXG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM1MTItICogbWF4X25yX3JlZ2lvbnMgdG8gYSBudW1iZXIgdGhhdCBsb3dlciB0aGFuIHRoZSBjdXJyZW50IG51bWJlciBvZiByZWdpb25zXG5tbS9kYW1vbi9jb3JlLmM6MzUxMzogKiB3aGlsZSBEQU1PTiBpcyBydW5uaW5nLiAgRm9yIHN1Y2ggYSBjYXNlLCByZXBlYXQgbWVyZ2luZyB1bnRpbCB0aGUgbGltaXQgaXNcbm1tL2RhbW9uL2NvcmUuYy0zNTE0LSAqIG1ldCB3aGlsZSBpbmNyZWFzaW5nIEB0aHJlc2hvbGQgdXAgdG8gcG9zc2libGUgbWF4aW11bSBsZXZlbC5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzUxNj1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU0Mi1cbm1tL2RhbW9uL2NvcmUuYzozNTQzOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzU0NC1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NjA9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc2Ny1cbm1tL2RhbW9uL2NvcmUuYzozNzY4OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzc2OS1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jPTQxMjY9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MTQyLSAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmM6NDE0MzogKiBAcjpcdFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxubW0vZGFtb24vY29yZS5jLTQxNDQtICogQGFjY2Vzc2VkOlx0V2hldGhlciB0aGUgcmVnaW9uIGhhcyBhY2Nlc3NlZCBkdXJpbmcgbGFzdCBzYW1wbGluZyBpbnRlcnZhbC5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDE1MT12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDE1Ny0vKipcbm1tL2RhbW9uL2NvcmUuYzo0MTU4OiAqIGRhbW9uX2luaXRpYWxpemVkKCkgLSBSZXR1cm4gaWYgREFNT04gaXMgcmVhZHkgdG8gYmUgdXNlZC5cbm1tL2RhbW9uL2NvcmUuYy00MTU5LSAqXG5tbS9kYW1vbi9jb3JlLmM6NDE2MDogKiBSZXR1cm46IHRydWUgaWYgREFNT04gaXMgcmVhZHkgdG8gYmUgdXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxubW0vZGFtb24vY29yZS5jLTQxNjEtICovXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yLS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjM6ICogREFNT04tYmFzZWQgTFJVLWxpc3RzIFNvcnRpbmdcbm1tL2RhbW9uL2xydV9zb3J0LmMtNC0gKi9cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5LS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjIwOiAqIEVuYWJsZSBvciBkaXNhYmxlIERBTU9OX0xSVV9TT1JULlxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMS0gKlxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMjogKiBZb3UgY2FuIGVuYWJsZSBEQU1PTl9MUlVfU09SVCBieSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBhc1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzogKiBgYFlgYC4gIFNldHRpbmcgaXQgYXMgYGBOYGAgZGlzYWJsZXMgREFNT05fTFJVX1NPUlQuICBOb3RlIHRoYXRcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQ6ICogREFNT05fTFJVX1NPUlQgY291bGQgZG8gbm8gcmVhbCBtb25pdG9yaW5nIGFuZCBMUlUtbGlzdHMgc29ydGluZyBkdWUgdG8gdGhlXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1LSAqIHdhdGVybWFya3MtYmFzZWQgYWN0aXZhdGlvbiBjb25kaXRpb24uICBSZWZlciB0byBiZWxvdyBkZXNjcmlwdGlvbnMgZm9yIHRoZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9Mjg9c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAtLypcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzE6ICogTWFrZSBEQU1PTl9MUlVfU09SVCByZWFkcyB0aGUgaW5wdXQgcGFyYW1ldGVycyBhZ2FpbiwgZXhjZXB0IGBgZW5hYmxlZGBgLlxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMi0gKlxubW0vZGFtb24vbHJ1X3NvcnQuYzozMzogKiBJbnB1dCBwYXJhbWV0ZXJzIHRoYXQgdXBkYXRlZCB3aGlsZSBEQU1PTl9MUlVfU09SVCBpcyBydW5uaW5nIGFyZSBub3Rcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQ6ICogYXBwbGllZCBieSBkZWZhdWx0LiAgT25jZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBZYGAsIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1LSAqIHJlYWRzIHZhbHVlcyBvZiBwYXJhbWV0ZXJzIGV4Y2VwdCBgYGVuYWJsZWRgYCBhZ2Fpbi4gIE9uY2UgdGhlIHJlLXJlYWRpbmcgaXNcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzYtICogZG9uZSwgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgTmBgLiAgSWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBmb3VuZCB3aGlsZVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzogKiB0aGUgcmUtcmVhZGluZywgREFNT05fTFJVX1NPUlQgd2lsbCBiZSBkaXNhYmxlZC5cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgtICovXG5tbS9kYW1vbi9scnVfc29ydC5jPTM5PXN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQzLSAqXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ0OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NS0gKiBhdXRvbWF0aWNhbGx5IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz01Mz1tb2R1bGVfcGFyYW0oYWN0aXZlX21lbV9icCwgdWxvbmcsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNTctICpcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTg6ICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgWWBgLCBEQU1PTl9MUlVfU09SVCBhdXRvbWF0aWNhbGx5IHR1bmVzXG5tbS9kYW1vbi9scnVfc29ydC5jOjU5OiAqIERBTU9OJiMzOTtzIHNhbXBsaW5nIGFuZCBhZ2dyZWdhdGlvbiBpbnRlcnZhbHMuICBUaGUgYXV0by10dW5pbmcgYWltcyB0byBjYXB0dXJlXG5tbS9kYW1vbi9scnVfc29ydC5jOjYwOiAqIG1lYW5pbmdmdWwgYW1vdW50IG9mIGFjY2VzcyBldmVudHMgaW4gZWFjaCBEQU1PTi1zbmFwc2hvdCwgd2hpbGUga2VlcGluZyB0aGVcbm1tL2RhbW9uL2xydV9zb3J0LmMtNjEtICogc2FtcGxpbmcgaW50ZXJ2YWwgNSBtaWxsaXNlY29uZHMgaW4gbWluaW11bSwgYW5kIDEwIHNlY29uZHMgaW4gbWF4aW11bS5cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTgyPW1vZHVsZV9wYXJhbShmaWx0ZXJfeW91bmdfcGFnZXMsIGJvb2wsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtODctICogSWYgYSBtZW1vcnkgcmVnaW9uIGlzIGFjY2Vzc2VkIGluIGZyZXF1ZW5jeSBvZiB0aGlzIG9yIGhpZ2hlcixcbm1tL2RhbW9uL2xydV9zb3J0LmM6ODg6ICogREFNT05fTFJVX1NPUlQgaWRlbnRpZmllcyB0aGUgcmVnaW9uIGFzIGhvdCwgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQgb24gdGhlXG5tbS9kYW1vbi9scnVfc29ydC5jLTg5LSAqIExSVSBsaXN0LCBzbyB0aGF0IGl0IGNvdWxkIG5vdCBiZSByZWNsYWltZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiAgNTAlIGJ5XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz05Mz1tb2R1bGVfcGFyYW0oaG90X3RocmVzX2FjY2Vzc19mcmVxLCB1bG9uZywgMDYwMCk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy05Ny0gKlxubW0vZGFtb24vbHJ1X3NvcnQuYzo5ODogKiBJZiBhIG1lbW9yeSByZWdpb24gaXMgbm90IGFjY2Vzc2VkIGZvciB0aGlzIG9yIGxvbmdlciB0aW1lLCBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vbHJ1X3NvcnQuYy05OS0gKiBpZGVudGlmaWVzIHRoZSByZWdpb24gYXMgY29sZCwgYW5kIG1hcmsgaXQgYXMgdW5hY2Nlc3NlZCBvbiB0aGUgTFJVIGxpc3QsIHNvXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMDY9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9scnVfc29ydF9xdW90YSA9IHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTExNS19O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTExNy1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MTE4PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyBkYW1vbl9scnVfc29ydF93bWFya3MgPSB7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMjQtfTtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTI1OkRFRklORV9EQU1PTl9NT0RVTEVTX1dNQVJLU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfd21hcmtzKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTI2LVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMjc9c3RhdGljIHN0cnVjdCBkYW1vbl9hdHRycyBkYW1vbl9scnVfc29ydF9tb25fYXR0cnMgPSB7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMzMtfTtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTM0OkRFRklORV9EQU1PTl9NT0RVTEVTX01PTl9BVFRSU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfbW9uX2F0dHJzKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTM1LVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTM4LSAqXG5tbS9kYW1vbi9scnVfc29ydC5jOjEzOTogKiBUaGUgc3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgcmVnaW9uIHRoYXQgREFNT05fTFJVX1NPUlQgd2lsbCBkbyB3b3JrXG5tbS9kYW1vbi9scnVfc29ydC5jLTE0MC0gKiBhZ2FpbnN0LiAgQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSYjMzk7cyBlbnRpcmUgcGh5c2ljYWwgbWVtb3J5IGlzIHVzZWQgYXMgdGhlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNDQ9bW9kdWxlX3BhcmFtKG1vbml0b3JfcmVnaW9uX3N0YXJ0LCB1bG9uZywgMDYwMCk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNDgtICpcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTQ5OiAqIFRoZSBlbmQgcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgcmVnaW9uIHRoYXQgREFNT05fTFJVX1NPUlQgd2lsbCBkbyB3b3JrXG5tbS9kYW1vbi9scnVfc29ydC5jLTE1MC0gKiBhZ2FpbnN0LiAgQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSYjMzk7cyBlbnRpcmUgcGh5c2ljYWwgbWVtb3J5IGlzIHVzZWQgYXMgdGhlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNTQ9bW9kdWxlX3BhcmFtKG1vbml0b3JfcmVnaW9uX2VuZCwgdWxvbmcsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTU2LS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjE1NzogKiBTY2FsZSBmYWN0b3IgZm9yIERBTU9OX0xSVV9TT1JUIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXG5tbS9kYW1vbi9scnVfc29ydC5jLTE1OC0gKlxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MTYzPXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9scnVfc29ydF9ob3Rfc3RhdDtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTY0OkRFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9scnVfc29ydF9ob3Rfc3RhdCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTY1LVx0XHRscnVfc29ydF90cmllZF9ob3RfcmVnaW9ucywgbHJ1X3NvcnRlZF9ob3RfcmVnaW9ucyxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2OD1zdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fbHJ1X3NvcnRfY29sZF9zdGF0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoxNjk6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X2NvbGRfc3RhdCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTcwLVx0XHRscnVfc29ydF90cmllZF9jb2xkX3JlZ2lvbnMsIGxydV9zb3J0ZWRfY29sZF9yZWdpb25zLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMDktXG5tbS9kYW1vbi9scnVfc29ydC5jOjIxMDovKiBDcmVhdGUgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lIGZvciBob3QgbWVtb3J5IHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjExLXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19ob3Rfc2NoZW1lKHVuc2lnbmVkIGludCBob3RfdGhyZXMpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMTgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjIxOTovKiBDcmVhdGUgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lIGZvciBjb2xkIG1lbW9yeSByZWdpb25zICovXG5tbS9kYW1vbi9scnVfc29ydC5jLTIyMC1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfY29sZF9zY2hlbWUodW5zaWduZWQgaW50IGNvbGRfdGhyZXMpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yODQtXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyODU6XHRwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjg2LVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDQxPU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NDI6XHRcJiMzNDtTY2FsZSBmYWN0b3IgZm9yIERBTU9OX0xSVV9TT1JUIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24gKGRlZmF1bHQ6IDEpXCYjMzQ7KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDQzLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDg2PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDg3Olx0XCYjMzQ7RW5hYmxlIG9yIGRpc2FibGUgREFNT05fTFJVX1NPUlQgKGRlZmF1bHQ6IGRpc2FibGVkKVwmIzM0Oyk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4OC1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTUxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMga2RhbW9uZF9waWRfcGFyYW1fb3BzID0ge1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNTE3LS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjUxODogKiBQSUQgb2YgdGhlIERBTU9OIHRocmVhZFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MTktICpcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTIwOiAqIElmIERBTU9OX0xSVV9TT1JUIGlzIGVuYWJsZWQsIHRoaXMgYmVjb21lcyB0aGUgUElEIG9mIHRoZSB3b3JrZXIgdGhyZWFkLlxubW0vZGFtb24vbHJ1X3NvcnQuYy01MjEtICogRWxzZSwgLTEuXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yLS8qXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjM6ICogQ29tbW9uIENvZGUgZm9yIERBTU9OIE1vZHVsZXNcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtNC0gKi9cbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTEwLS8qXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjExOiAqIEFsbG9jYXRlLCBzZXQsIGFuZCByZXR1cm4gYSBEQU1PTiBjb250ZXh0IGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTItICogQGN0eHA6XHRQb2ludGVyIHRvIHNhdmUgdGhlIHBvaW50IHRvIHRoZSBuZXdseSBjcmVhdGVkIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jPTE1PWludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjQtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjI1Olx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfUEFERFIpKSB7XG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTI2LVx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMi0vKlxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDozOiAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBNb2R1bGVzXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQtICovXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC03LVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDo4OiNkZWZpbmUgREVGSU5FX0RBTU9OX01PRFVMRVNfTU9OX0FUVFJTX1BBUkFNUyhhdHRycylcdFx0XHRcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC05LVx0bW9kdWxlX3BhcmFtX25hbWVkKHNhbXBsZV9pbnRlcnZhbCwgYXR0cnMuc2FtcGxlX2ludGVydmFsLFx0XFxcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTE3LVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoxODojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1RJTUVfUVVPVEEocXVvdGEpXHRcdFx0XFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMTktXHRtb2R1bGVfcGFyYW1fbmFtZWQocXVvdGFfbXMsIHF1b3RhLm1zLCB1bG9uZywgMDYwMCk7XHRcdFxcXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yMi1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6MjM6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19RVU9UQVMocXVvdGEpXHRcdFx0XFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6MjQ6XHRERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19USU1FX1FVT1RBKHF1b3RhKVx0XHRcdFxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTI1LVx0bW9kdWxlX3BhcmFtX25hbWVkKHF1b3RhX3N6LCBxdW90YS5zeiwgdWxvbmcsIDA2MDApO1xubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yNi1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6Mjc6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19XTUFSS1NfUEFSQU1TKHdtYXJrcylcdFx0XHRcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yOC1cdG1vZHVsZV9wYXJhbV9uYW1lZCh3bWFya3NfaW50ZXJ2YWwsIHdtYXJrcy5pbnRlcnZhbCwgdWxvbmcsXHRcXFxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMzMtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjM0OiNkZWZpbmUgREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKHN0YXQsIHRyeV9uYW1lLFx0XHRcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0zNS1cdFx0c3VjY19uYW1lLCBxdF9leGNlZWRfbmFtZSlcdFx0XHRcdFxcXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIEh1Z2VUTEIgUGFnZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kICp3aHkqLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHksIGxpbmUgYnkgbGluZS4KCkFscmlnaHQsIHRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkYW1vbl9odWdldGxiX21rb2xkYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgdGhlIGNvZGUgY2hlY2tlZCBpZiBhIFBURSAoUGFnZSBUYWJsZSBFbnRyeSkgd2FzIHlvdW5nIHVzaW5nIGBwdGVfeW91bmcoKWAuIElmIHNvLCBpdCBtYXJrZWQgdGhlIFBURSBhcyBvbGQgd2l0aCBgcHRlX21rb2xkKClgIGFuZCB0aGVuIHVwZGF0ZWQgdGhlIFBURSB1c2luZyBgc2V0X2h1Z2VfcHRlX2F0KClgLgoKTm93LCB0aGUgY29kZSBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYC4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgY2FsbHMgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKClgICpiZWZvcmUqIG1vZGlmeWluZyB0aGUgUFRFIGFuZCBjYWxsaW5nIGBzZXRfaHVnZV9wdGVfYXQoKWAuIFRoZSBpbXBsaWNhdGlvbiBvZiBjYWxsaW5nIGBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcmAgZmlyc3QgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCk15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gY29kZSBjaGFuZ2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyBvciBodWdldGxiLXNwZWNpZmljIHJlcXVpcmVtZW50cy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBIdWdlIFRMQiBQVEUgdXNpbmcgYHNldF9odWdlX3B0ZV9hdCgpYCB3aXRob3V0IGZpcnN0IHBlcmZvcm1pbmcgYSBnZXQtYW5kLWNsZWFyIG9wZXJhdGlvbiBtaWdodCBub3QgYmUgY29ycmVjdCBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4gSXQgY291bGQgYnJlYWsgVExCIGNvbnNpc3RlbmN5IG9yIHRoZSBzZW1hbnRpY3Mgb2YgSHVnZVRMQiBQVEUgdXBkYXRlcy4gRWl0aGVyIHdheSwgY2FsbGluZyBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGlzIGNyaXRpY2FsIHRvIHBlcmZvcm0gY29ycmVjdCB1cGRhdGVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uCgpJJiMzOTtsbCBjaGVjayB0aGUgY2FsbGVycyBvZiBgZGFtb25faHVnZXRsYl9ta29sZGAgd2l0aGluIGBtbS9kYW1vbi92YWRkci5jYCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzAxOlx0e1xuIDMwMjpcdFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4gMzAzOlx0XHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4gMzA0Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbiAzMDU6XHRcbiAzMDY6XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gMzA3Olx0XG4gMzA4Olx0XHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXHUwMDI2ZW50cnkpO1xuIDMwOTpcdFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbiAzMTA6XHRcdFx0XHRcdCAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcbiAzMTE6XHRcdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4gMzEyOlx0XG4gMzEzOlx0XHRpZiAocmVmZXJlbmNlZClcbiAzMTQ6XHRcdFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcbiAzMTU6XHRcbiAzMTY6XHRcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcbiAzMTc6XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuIDMyMDpcdHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIDMyMTpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIDMyMjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4gMzI1Olx0XHRzcGlubG9ja190ICpwdGw7XG4gMzI2Olx0XHRwdGVfdCBlbnRyeTtcbiAzMjc6XHRcbiAzMjg6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiAzMjk6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIDMzMDpcdFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4gMzMxOlx0XHRcdGdvdG8gb3V0O1xuIDMzMjpcdFxuIDMzMzpcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXHUwMDNlbW0sIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbiAzMzQ6XHRcbiAzMzU6XHRvdXQ6XG4gMzM2Olx0XHRzcGluX3VubG9jayhwdGwpO1xuIDMzNzpcdFx0cmV0dXJuIDA7XG4gMzM4Olx0fVxuIDMzOTpcdCNlbHNlXG4gMzQwOlx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbiAzNDE6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDM0MjpcdFxuIDM0MzpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHtcbiAzNDY6XHRcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcbiAzNDc6XHRcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxuIDM0ODpcdFx0fTtcbiAzNDk6XHRcbiAzNTA6XHRcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xuIDM1MTpcdH1cbiAzNTI6XHRcbiAzNTM6XHQvKlxuIDM1NDpcdCAqIEZ1bmN0aW9ucyBmb3IgdGhlIGFjY2VzcyBjaGVja2luZyBvZiB0aGUgcmVnaW9uc1xuIDM1NTpcdCAqL1xuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gMzU4Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gMzU5Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAzNjA6XHR7XG4gMzYxOlx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCwgci1cdTAwM2Vhci5lbmQpO1xuIDM2MjpcdFxuIDM2MzpcdFx0ZGFtb25fdmFfbWtvbGQobW0sIHItXHUwMDNlc2FtcGxpbmdfYWRkcik7XG4gMzY0Olx0fVxuIDM2NTpcdFxuIDM2NjpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gMzY3Olx0e1xuIDM2ODpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiAzNjk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDM3MDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiAzNzE6XHRcbiAzNzI6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiAzNzM6XHRcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4gMzc0Olx0XHRcdGlmICghbW0pXG4gMzc1Olx0XHRcdFx0Y29udGludWU7XG4gMzc2Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxuIDM3NzpcdFx0XHRcdF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2sobW0sIHIsIGN0eCk7XG4gMzc4Olx0XHRcdG1tcHV0KG1tKTtcbiAzNzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBIdWdldGxiIEludGVncmF0aW9uOiBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogYGRhbW9uX3ZhX21rb2xkYCBpcyBsaW5rZWQgdG8gYGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlgLCB3aGljaCB0aGVuIGNhbGxzIGBkYW1vbl9odWdldGxiX21rb2xkYCBhbmQgdWx0aW1hdGVseSBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYC4gSXMgdGhpcyBwYXRoIHdvcnRoIGludmVzdGlnYXRpbmcgZm9yIGZ1enppbmc/IEZyb20gYSBwcmVsaW1pbmFyeSBzY2FuLCB0aGlzIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIHRhcmdldC4KClRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrKSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgd29ya2luZyBpbiBjb25qdW5jdGlvbiB3aXRoIGh1Z2V0bGIgcGFnZXMuIFJlYWNoYWJsZT8gWWVzLCBEQU1PTiBpcyBjb25maWd1cmFibGUgdGhyb3VnaCBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fVkFERFJgLCBldGMuKSBvciBkZWJ1Z2ZzIG9yIG1vZHVsZXMsIGFuZCBodWdldGxiIGlzIHByZXR0eSBzdGFuZGFyZCBpbiBtb3N0IGVudmlyb25tZW50cyBhbmQgdGVzdGVkLiBXZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gUUVNVSBvciBldmVuIEdDRSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlnIHJlcXVpcmVtZW50cyBhcmUuIEkmIzM5O2xsIGNoZWNrIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9kYW1vbi9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19EQU1PTl9WQUREUmAuIEl0IGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgTU1VYCwgYW5kIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBzdGFuZGFyZCBodWdldGxiIGNvbmZpZywgc28gaXQgbmVlZHMgYFg4NiB8fCAuLi5gLgoKVGhlIGZpbGUgbW9kaWZpZWQgaXMgb25seSBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgZ29vZCwgd2UgYXJlIHN0YXJ0aW5nIGluIGEgY29udGFpbmVkIGFyZWEuIExldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIGludm9sdmVkLiBUaGUgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmU6IGBkYW1vbl9odWdldGxiX21rb2xkYCBhbmQgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAgKGEgc3RhdGljIGhlbHBlciksIHdpdGggY2FsbGVycyBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9ta29sZGAsIGFuZCBgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzYC4gSSYjMzk7bGwgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucywgYW5kIG90aGVyIGZ1bmN0aW9ucyBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgYXJlIHByb3Blcmx5IGV4cG9zZWQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGFjY2Vzc2libGUgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcdH1cbiA2MDE6XHRcbiA2MDI6XHRcdG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIDYwMzpcdFx0aWx4ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkgXHUwMDNlXHUwMDNlIG9yZGVyO1xuIDYwNDpcdFx0aWx4ICYjNDM7PSBsaW5lYXJfcGFnZV9kZWx0YSh2bWEsIGFkZHIpIFx1MDAzZVx1MDAzZSBvcmRlcjtcbiA2MDU6XHRcbiA2MDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRlc3RzLVx1MDAzZW5yX2Rlc3RzOyBpJiM0MzsmIzQzOylcbiA2MDc6XHRcdFx0d2VpZ2h0X3RvdGFsICYjNDM7PSBkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyW2ldO1xuIDYwODpcdFxuIDYwOTpcdFx0LyogSWYgdGhlIHRvdGFsIHdlaWdodHMgYXJlIHNvbWVob3cgMCwgZG9uJiMzOTt0IG1pZ3JhdGUgYXQgYWxsICovXG4gNjEwOlx0XHRpZiAoIXdlaWdodF90b3RhbClcbiA2MTE6XHRcdFx0cmV0dXJuO1xuIDYxMjpcdFxuIDYxMzpcdFx0dGFyZ2V0ID0gaWx4ICUgd2VpZ2h0X3RvdGFsO1xuIDYxNDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGVzdHMtXHUwMDNlbnJfZGVzdHM7IGkmIzQzOyYjNDM7KSB7XG4gNjE1Olx0XHRcdGlmICh0YXJnZXQgXHUwMDNjIGRlc3RzLVx1MDAzZXdlaWdodF9hcnJbaV0pXG4gNjE2Olx0XHRcdFx0YnJlYWs7XG4gNjE3Olx0XHRcdHRhcmdldCAtPSBkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyW2ldO1xuIDYxODpcdFx0fVxuIDYxOTpcdFxuIDYyMDpcdFx0LyogSWYgdGhlIGZvbGlvIGlzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IG5vZGUsIGRvbiYjMzk7dCBkbyBhbnl0aGluZyAqL1xuIDYyMTpcdFx0aWYgKGZvbGlvX25pZChmb2xpbykgPT0gZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnJbaV0pXG4gNjIyOlx0XHRcdHJldHVybjtcbiA2MjM6XHRcbiA2MjQ6XHRpc29sYXRlOlxuIDYyNTpcdFx0aWYgKCFmb2xpb19pc29sYXRlX2xydShmb2xpbykpXG4gNjI2Olx0XHRcdHJldHVybjtcbiA2Mjc6XHRcdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0MztcbiA2Mjg6XHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIDYyOTpcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZtaWdyYXRpb25fbGlzdHNbaV0pO1xuIDYzMDpcdH1cbiA2MzE6XHRcbiA2MzI6XHRzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiA2MzM6XHRcdFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiA2MzQ6XHR7XG4gNjM1Olx0XHRzdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIDYzNjpcdFx0c3RydWN0IGxpc3RfaGVhZCAqbWlncmF0aW9uX2xpc3RzID0gcHJpdi1cdTAwM2VtaWdyYXRpb25fbGlzdHM7XG4gNjM3Olx0XHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVx1MDAzZXNjaGVtZTtcbiA2Mzg6XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkZXN0cyA9IFx1MDAyNnMtXHUwMDNlbWlncmF0ZV9kZXN0cztcbiA2Mzk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNjQwOlx0XHRzcGlubG9ja190ICpwdGw7XG4gNjQxOlx0XHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcbiA2NDI6XHRcdGludCBucjtcbiA2NDM6XHRcbiA2NDQ6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gNjQ1Olx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xuIDY0NjpcdFx0aWYgKHB0bCkge1xuIDY0NzpcdFx0XHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcbiA2NDg6XHRcbiA2NDk6XHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiA2NTA6XHRcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuIDY1MTpcdFx0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay1cdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xuIDY1MjpcdFx0XHRpZiAoIWZvbGlvKVxuIDY1MzpcdFx0XHRcdGdvdG8gaHVnZV9vdXQ7XG4gNjU0Olx0XHRcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgTlVMTCwgcG1kKSlcbiA2NTU6XHRcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuIDY1NjpcdFx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxuIDY1NzpcdFx0XHRcdFx0bWlncmF0aW9uX2xpc3RzKTtcbiA2NTg6XHRodWdlX291dDpcbiA2NTk6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA2NjA6XHRcdFx0cmV0dXJuIDA7XG4gNjYxOlx0XHR9XG4gNjYyOlx0I2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiA2NjM6XHRcbiA2NjQ6XHRcdHN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cdTAwM2VtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDY2NTpcdFx0aWYgKCFwdGUpXG4gNjY2Olx0XHRcdHJldHVybiAwO1xuIDY2NzpcdFxuIDY2ODpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4gNjY5Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4gNjcwOlx0XG4gNjcxOlx0XHRcdG5yID0gMTtcbiA2NzI6XHRcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuIDY3MzpcdFxuIDY3NDpcdFx0XHRpZiAocHRlX25vbmUocHRlbnQpIHx8ICFwdGVfcHJlc2VudChwdGVudCkpXG4gNjc1Olx0XHRcdFx0Y29udGludWU7XG4gNjc2Olx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4gNjc3Olx0XHRcdGlmICghZm9saW8pXG4gNjc4Olx0XHRcdFx0Y29udGludWU7XG4gNjc5Olx0XHRcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2YWRkci5jIE9wZXJhdGlvbnMgU3RydWN0dXJlKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGp1bXAgcmlnaHQgdG8gdGhlIGVuZCBvZiBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSB1c3VhbCBhcHByb2FjaCwgcmlnaHQ/IFdoZW4gdHJ5aW5nIHRvIGdyYXNwIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaG93IHRoZSByZWdpc3RyYXRpb24gbWVjaGFuaXNtcyB3b3JrLCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIGlzIG9mdGVuIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIGZpZ3VyZSB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgaXRzZWxmLCBhbG9uZyB3aXRoIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzc+KAlGhvdyBpdCBnZXRzIGhvb2tlZCBpbnRvIHRoZSBsYXJnZXIgREFNT04gZnJhbWV3b3Jr4oCUd2lsbCBiZSBsYWlkIGJhcmUgYXQgdGhlIGNvbmNsdXNpb24uIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuLCByZWFsbHk6IGRlZmluZSB0aGUgZ3V0cywgdGhlbiBzdGl0Y2ggaXQgYWxsIHRvZ2V0aGVyLiBUaW1lIHRvIGdldCBhIHNlbnNlIGZvciBob3cgdGhpcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBpcyBiZWluZyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0LypcbiA2OTE6XHQgKiBGdW5jdGlvbnMgZm9yIHRoZSB0YXJnZXQgdmFsaWRpdHkgY2hlY2sgYW5kIGNsZWFudXBcbiA2OTI6XHQgKi9cbiA2OTM6XHRcbiA2OTQ6XHRzdGF0aWMgYm9vbCBkYW1vbl92YV90YXJnZXRfdmFsaWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiA2OTU6XHR7XG4gNjk2Olx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4gNjk3Olx0XG4gNjk4Olx0XHR0YXNrID0gZGFtb25fZ2V0X3Rhc2tfc3RydWN0KHQpO1xuIDY5OTpcdFx0aWYgKHRhc2spIHtcbiA3MDA6XHRcdFx0cHV0X3Rhc2tfc3RydWN0KHRhc2spO1xuIDcwMTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA3MDI6XHRcdH1cbiA3MDM6XHRcbiA3MDQ6XHRcdHJldHVybiBmYWxzZTtcbiA3MDU6XHR9XG4gNzA2Olx0XG4gNzA3Olx0c3RhdGljIHZvaWQgZGFtb25fdmFfY2xlYW51cF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiA3MDg6XHR7XG4gNzA5Olx0XHRwdXRfcGlkKHQtXHUwMDNlcGlkKTtcbiA3MTA6XHR9XG4gNzExOlx0XG4gNzEyOlx0I2lmbmRlZiBDT05GSUdfQURWSVNFX1NZU0NBTExTXG4gNzEzOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4gNzE0Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGludCBiZWhhdmlvcilcbiA3MTU6XHR7XG4gNzE2Olx0XHRyZXR1cm4gMDtcbiA3MTc6XHR9XG4gNzE4Olx0I2Vsc2VcbiA3MTk6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19tYWR2aXNlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbiA3MjA6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgaW50IGJlaGF2aW9yKVxuIDcyMTpcdHtcbiA3MjI6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDcyMzpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IFBBR0VfQUxJR04oci1cdTAwM2Vhci5zdGFydCk7XG4gNzI0Olx0XHR1bnNpZ25lZCBsb25nIGxlbiA9IFBBR0VfQUxJR04oZGFtb25fc3pfcmVnaW9uKHIpKTtcbiA3MjU6XHRcdHVuc2lnbmVkIGxvbmcgYXBwbGllZDtcbiA3MjY6XHRcbiA3Mjc6XHRcdG1tID0gZGFtb25fZ2V0X21tKHRhcmdldCk7XG4gNzI4Olx0XHRpZiAoIW1tKVxuIDcyOTpcdFx0XHRyZXR1cm4gMDtcbiA3MzA6XHRcbiA3MzE6XHRcdGFwcGxpZWQgPSBkb19tYWR2aXNlKG1tLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgPyAwIDogbGVuO1xuIDczMjpcdFx0bW1wdXQobW0pO1xuIDczMzpcdFxuIDczNDpcdFx0cmV0dXJuIGFwcGxpZWQ7XG4gNzM1Olx0fVxuIDczNjpcdCNlbmRpZlx0LyogQ09ORklHX0FEVklTRV9TWVNDQUxMUyAqL1xuIDczNzpcdFxuIDczODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxuIDczOTpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4gNzQwOlx0XHRcdHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4gNzQxOlx0e1xuIDc0MjpcdFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xuIDc0MzpcdFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSBwcml2O1xuIDc0NDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gNzQ1Olx0XHRpbnQgbnJfZGVzdHM7XG4gNzQ2Olx0XHRpbnQgbmlkO1xuIDc0NzpcdFx0Ym9vbCB1c2VfdGFyZ2V0X25pZDtcbiA3NDg6XHRcdHVuc2lnbmVkIGxvbmcgYXBwbGllZCA9IDA7XG4gNzQ5Olx0XHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMgPSBcdTAwMjZzLVx1MDAzZW1pZ3JhdGVfZGVzdHM7XG4gNzUwOlx0XHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG4gNzUxOlx0XHRcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcbiA3NTI6XHRcdFx0LnB0ZV9lbnRyeSA9IE5VTEwsXG4gNzUzOlx0XHR9O1xuIDc1NDpcdFxuIDc1NTpcdFx0dXNlX3RhcmdldF9uaWQgPSBkZXN0cy1cdTAwM2Vucl9kZXN0cyA9PSAwO1xuIDc1NjpcdFx0bnJfZGVzdHMgPSB1c2VfdGFyZ2V0X25pZCA/IDEgOiBkZXN0cy1cdTAwM2Vucl9kZXN0cztcbiA3NTc6XHRcdHByaXYuc2NoZW1lID0gcztcbiA3NTg6XHRcdHByaXYubWlncmF0aW9uX2xpc3RzID0ga21hbGxvY19vYmpzKCpwcml2Lm1pZ3JhdGlvbl9saXN0cywgbnJfZGVzdHMpO1xuIDc1OTpcdFx0aWYgKCFwcml2Lm1pZ3JhdGlvbl9saXN0cylcbiA3NjA6XHRcdFx0cmV0dXJuIDA7XG4gNzYxOlx0XG4gNzYyOlx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbnJfZGVzdHM7IGkmIzQzOyYjNDM7KVxuIDc2MzpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2Lm1pZ3JhdGlvbl9saXN0c1tpXSk7XG4gNzY0Olx0XG4gNzY1Olx0XG4gNzY2Olx0XHRtbSA9IGRhbW9uX2dldF9tbSh0YXJnZXQpO1xuIDc2NzpcdFx0aWYgKCFtbSlcbiA3Njg6XHRcdFx0Z290byBmcmVlX2xpc3RzO1xuIDc2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHRzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgdmFkZHIuY2AgLSBMZXQmIzM5O3MgU2VlIFdoYXQmIzM5O3MgYXQgdGhlIEZpbmlzaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgbW0vZGFtb24vdmFkZHIuY2AsIGFuZCBJJiMzOTttIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSwgbW9zdCByZWNlbnQsIG9yIG1vc3QgaW1wb3J0YW50IHN0dWZmLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSAqbGFzdCogaW4gdGhpcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWFuYWdlbWVudCBtb2R1bGUgZm9yIERhbW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGZpbmFsIGludGVyYWN0aW9ucyBvciBjbGVhbi11cCBsb2dpYywgbWF5YmUgdGhlIG1haW4gZnVuY3Rpb24gb3IgdGhlIGVudHJ5IHBvaW50IGZvciBzb21lIGtleSBEYW1vbi1zcGVjaWZpYyBvcGVyYXRpb24gaW52b2x2aW5nIHZpcnR1YWwgYWRkcmVzc2VzLgoKSSYjMzk7bSBrZWVuIHRvIGdyYXNwIHRoZSBjb25jbHVzaW9uIG9mIHRoZSBmdW5jdGlvbi4gSXMgaXQgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGU/IElzIGl0IGRvaW5nIHNvbWV0aGluZyBtb3JlIHN1YnRsZSwgbGlrZSB1cGRhdGluZyBzb21lIGdsb2JhbCBzdGF0ZT8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBleGl0IGNvbmRpdGlvbnMgYW5kIGFueSBmaW5hbCBkYXRhIG1hbmlwdWxhdGlvbnMuIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBtYW5pcHVsYXRpb25zIGFyZSBnb2luZyB0byBiZSByZWxhdGVkIHRvIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nIG9yIG1hbmlwdWxhdGlvbi4gUGVyaGFwcyBpdCBob2xkcyB0aGUgbWFpbiByb3V0aW5lPyBNYXliZSBhIGNsZWFudXAgcHJvY2VkdXJlPyBXaGF0ZXZlciBpdCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gdGhlIGNvbnRleHQgb2YgRGFtb24mIzM5O3Mgb3ZlcmFsbCBnb2Fscywgd2hpY2ggSSBhc3N1bWUgYXJlIHRvIGhlbHAgd2l0aCBtZW1vcnkgYWNjZXNzLCBvcHRpbWl6YXRpb24sIG9yIHdoYXRldmVyIHRoZSBwcm9qZWN0IGlzIGFib3V0LiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgRGFtb24tY2VudHJpYyBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcyBhdCBwbGF5IGluIHRoaXMgZmluYWwgcGFydCwgb3IgaWYgaXQmIzM5O3MgcmVseWluZyBvbiBtb3JlIGdlbmVyYWwga2VybmVsIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MDpcdFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCByLVx1MDAzZWFyLnN0YXJ0LCByLVx1MDAzZWFyLmVuZCwgXHUwMDI2d2Fsa19vcHMsIFx1MDAyNnByaXYpO1xuIDc3MTpcdFx0bW1wdXQobW0pO1xuIDc3MjpcdFxuIDc3MzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc3RzOyBpJiM0MzsmIzQzOykge1xuIDc3NDpcdFx0XHRuaWQgPSB1c2VfdGFyZ2V0X25pZCA/IHMtXHUwMDNldGFyZ2V0X25pZCA6IGRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyW2ldO1xuIDc3NTpcdFx0XHRhcHBsaWVkICYjNDM7PSBkYW1vbl9taWdyYXRlX3BhZ2VzKFx1MDAyNnByaXYubWlncmF0aW9uX2xpc3RzW2ldLCBuaWQpO1xuIDc3NjpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA3Nzc6XHRcdH1cbiA3Nzg6XHRcbiA3Nzk6XHRmcmVlX2xpc3RzOlxuIDc4MDpcdFx0a2ZyZWUocHJpdi5taWdyYXRpb25fbGlzdHMpO1xuIDc4MTpcdFx0cmV0dXJuIGFwcGxpZWQgKiBQQUdFX1NJWkU7XG4gNzgyOlx0fVxuIDc4MzpcdFxuIDc4NDpcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUge1xuIDc4NTpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4gNzg2Olx0XHR1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkO1xuIDc4NzpcdH07XG4gNzg4Olx0XG4gNzg5Olx0c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiA3OTA6XHRcdFx0c3RydWN0IGRhbW9zICpzKVxuIDc5MTpcdHtcbiA3OTI6XHRcdHJldHVybiAhZm9saW8gfHwgZm9saW8gPT0gcy1cdTAwM2VsYXN0X2FwcGxpZWQ7XG4gNzkzOlx0fVxuIDc5NDpcdFxuIDc5NTpcdHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDc5NjpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDc5NzpcdHtcbiA3OTg6XHRcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNzk5Olx0XHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVx1MDAzZXNjaGVtZTtcbiA4MDA6XHRcdHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQgPSBwcml2LVx1MDAzZXN6X2ZpbHRlcl9wYXNzZWQ7XG4gODAxOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuIDgwMjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA4MDM6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiA4MDQ6XHRcdHB0ZV90ICpzdGFydF9wdGUsICpwdGUsIHB0ZW50O1xuIDgwNTpcdFx0aW50IG5yO1xuIDgwNjpcdFxuIDgwNzpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MDg6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuIDgwOTpcdFx0aWYgKHB0bCkge1xuIDgxMDpcdFx0XHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcbiA4MTE6XHRcbiA4MTI6XHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiA4MTM6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDgxNDpcdFxuIDgxNTpcdFx0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQodm1hLCBhZGRyLCBwbWRlKTtcbiA4MTY6XHRcbiA4MTc6XHRcdFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxuIDgxODpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gODE5Olx0XG4gODIwOlx0XHRcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBOVUxMLCBwbWQpKVxuIDgyMTpcdFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiA4MjI6XHRcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiA4MjM6XHRcbiA4MjQ6XHRodWdlX3VubG9jazpcbiA4MjU6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA4MjY6XHRcdFx0cmV0dXJuIDA7XG4gODI3Olx0XHR9XG4gODI4Olx0I2VuZGlmXG4gODI5Olx0XHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDgzMDpcdFx0aWYgKCFzdGFydF9wdGUpXG4gODMxOlx0XHRcdHJldHVybiAwO1xuIDgzMjpcdFxuIDgzMzpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4gODM0Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4gODM1Olx0XG4gODM2Olx0XHRcdG5yID0gMTtcbiA4Mzc6XHRcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuIDgzODpcdFxuIDgzOTpcdFx0XHRpZiAocHRlX25vbmUocHRlbnQpIHx8ICFwdGVfcHJlc2VudChwdGVudCkpXG4gODQwOlx0XHRcdFx0Y29udGludWU7XG4gODQxOlx0XG4gODQyOlx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHZtYSwgYWRkciwgcHRlbnQpO1xuIDg0MzpcdFxuIDg0NDpcdFx0XHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXG4gODQ1Olx0XHRcdFx0Y29udGludWU7XG4gODQ2Olx0XG4gODQ3Olx0XHRcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxuIDg0ODpcdFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiA4NDk6XHRcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UocHRlbnQpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzOgoKKipEaXZpbmcgQmFjayBpbnRvIHRoZSBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGJhY2sgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHZpcnR1YWwgYWRkcmVzc2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoYXQgYG1tL2RhbW9uL3ZhZGRyLmNgIGZpbGUuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvcHRpbWl6aW5nLCBvciBwZXJoYXBzIGp1c3QgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGFuZCBob3cgaXQgaGFuZGxlcyB2aXJ0dWFsIGFkZHJlc3MgbWFuYWdlbWVudC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLCBhbiBhbGdvcml0aG0sIG9yIGEgc3VidGxlIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy4gTGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBmaW5kIHdoYXQgSSBhbSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiA4NTE6XHRcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiA4NTI6XHRcdH1cbiA4NTM6XHRcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIDg1NDpcdFx0cmV0dXJuIDA7XG4gODU1Olx0fVxuIDg1NjpcdFxuIDg1NzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxuIDg1ODpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4gODU5Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4gODYwOlx0e1xuIDg2MTpcdFx0c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSBwcml2O1xuIDg2MjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gODYzOlx0XHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG4gODY0Olx0XHRcdC5wbWRfZW50cnkgPSBkYW1vc192YV9zdGF0X3BtZF9lbnRyeSxcbiA4NjU6XHRcdH07XG4gODY2Olx0XG4gODY3Olx0XHRwcml2LnNjaGVtZSA9IHM7XG4gODY4Olx0XHRwcml2LnN6X2ZpbHRlcl9wYXNzZWQgPSBzel9maWx0ZXJfcGFzc2VkO1xuIDg2OTpcdFxuIDg3MDpcdFx0aWYgKCFkYW1vc19vcHNfaGFzX2ZpbHRlcihzKSlcbiA4NzE6XHRcdFx0cmV0dXJuIDA7XG4gODcyOlx0XG4gODczOlx0XHRtbSA9IGRhbW9uX2dldF9tbSh0YXJnZXQpO1xuIDg3NDpcdFx0aWYgKCFtbSlcbiA4NzU6XHRcdFx0cmV0dXJuIDA7XG4gODc2Olx0XG4gODc3Olx0XHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXHUwMDNlYXIuc3RhcnQsIHItXHUwMDNlYXIuZW5kLCBcdTAwMjZ3YWxrX29wcywgXHUwMDI2cHJpdik7XG4gODc4Olx0XHRtbXB1dChtbSk7XG4gODc5Olx0XHRyZXR1cm4gMDtcbiA4ODA6XHR9XG4gODgxOlx0XG4gODgyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fdmFfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiA4ODM6XHRcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiA4ODQ6XHRcdFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4gODg1Olx0e1xuIDg4NjpcdFx0aW50IG1hZHZfYWN0aW9uO1xuIDg4NzpcdFxuIDg4ODpcdFx0c3dpdGNoIChzY2hlbWUtXHUwMDNlYWN0aW9uKSB7XG4gODg5Olx0XHRjYXNlIERBTU9TX1dJTExORUVEOlxuIDg5MDpcdFx0XHRtYWR2X2FjdGlvbiA9IE1BRFZfV0lMTE5FRUQ7XG4gODkxOlx0XHRcdGJyZWFrO1xuIDg5MjpcdFx0Y2FzZSBEQU1PU19DT0xEOlxuIDg5MzpcdFx0XHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MRDtcbiA4OTQ6XHRcdFx0YnJlYWs7XG4gODk1Olx0XHRjYXNlIERBTU9TX1BBR0VPVVQ6XG4gODk2Olx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9QQUdFT1VUO1xuIDg5NzpcdFx0XHRicmVhaztcbiA4OTg6XHRcdGNhc2UgREFNT1NfSFVHRVBBR0U6XG4gODk5Olx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9IVUdFUEFHRTtcbiA5MDA6XHRcdFx0YnJlYWs7XG4gOTAxOlx0XHRjYXNlIERBTU9TX05PSFVHRVBBR0U6XG4gOTAyOlx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9OT0hVR0VQQUdFO1xuIDkwMzpcdFx0XHRicmVhaztcbiA5MDQ6XHRcdGNhc2UgREFNT1NfQ09MTEFQU0U6XG4gOTA1Olx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9DT0xMQVBTRTtcbiA5MDY6XHRcdFx0YnJlYWs7XG4gOTA3Olx0XHRjYXNlIERBTU9TX01JR1JBVEVfSE9UOlxuIDkwODpcdFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XG4gOTA5Olx0XHRcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG4gOTEwOlx0XHRjYXNlIERBTU9TX1NUQVQ6XG4gOTExOlx0XHRcdHJldHVybiBkYW1vc192YV9zdGF0KHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG4gOTEyOlx0XHRkZWZhdWx0OlxuIDkxMzpcdFx0XHQvKlxuIDkxNDpcdFx0XHQgKiBEQU1PUyBhY3Rpb25zIHRoYXQgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5ICYjMzk7dmFkZHImIzM5Oy5cbiA5MTU6XHRcdFx0ICovXG4gOTE2Olx0XHRcdHJldHVybiAwO1xuIDkxNzpcdFx0fVxuIDkxODpcdFxuIDkxOTpcdFx0cmV0dXJuIGRhbW9zX21hZHZpc2UodCwgciwgbWFkdl9hY3Rpb24pO1xuIDkyMDpcdH1cbiA5MjE6XHRcbiA5MjI6XHRzdGF0aWMgaW50IGRhbW9uX3ZhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuIDkyMzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbiA5MjQ6XHR7XG4gOTI1Olx0XG4gOTI2Olx0XHRzd2l0Y2ggKHNjaGVtZS1cdTAwM2VhY3Rpb24pIHtcbiA5Mjc6XHRcdGNhc2UgREFNT1NfUEFHRU9VVDpcbiA5Mjg6XHRcdFx0cmV0dXJuIGRhbW9uX2NvbGRfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcbiA5Mjk6XHRcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtbS9kYW1vbi92YWRkci5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1hbmFnZW1lbnQgd2l0aGluIERBTU9OLCBzcGVjaWZpY2FsbHkgdGhlIGB2YWRkci5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgdGFibGVzIGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHRoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgcGVyaGFwcyBzb21lIG5vdmVsIGFwcHJvYWNoZXMgdG8gc2FtcGxpbmcgb3IgbWFuYWdpbmcgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbnMgd2l0aGluIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgYmVpbmcgYWRkcmVzc2VkIGFuZCBpZiBpdCBpcyB1c2luZyBzcGVjaWFsIGFsZ29yaXRobXMgdG8gaGFuZGxlIG9yIGlnbm9yZSBjZXJ0YWluIG1lbW9yeSByZWdpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlci1sZXZlbCBWTSBjb3JlLCBhbmQgaWYgaXQgaXMgdXNpbmcgYW55IHNwZWNpZmljIGhvb2tzIG9yIGNhbGxiYWNrcy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGNsZXZlcm5lc3MgaGVyZSwgc2luY2UgREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbiBpcyB0byBtb25pdG9yIGFuZCBhY3Qgb24gbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgaXQgc2FtcGxlcyB0aGUgbWVtb3J5LiBBbmQgSSBhbSBjdXJpb3VzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGp1c3QgaG9va2luZyBpbnRvIGV4aXN0aW5nIFZNIGluZnJhc3RydWN0dXJlLCBvciBpZiBpdCBpcyBpbXBsZW1lbnRpbmcgaXRzIG93biBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGZvciBtYW5hZ2luZyB0aGUgbW9uaXRvcmVkIHJlZ2lvbnMuIE9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRcdFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xuIDkzMTpcdFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XG4gOTMyOlx0XHRcdHJldHVybiBkYW1vbl9jb2xkX3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG4gOTMzOlx0XHRkZWZhdWx0OlxuIDkzNDpcdFx0XHRicmVhaztcbiA5MzU6XHRcdH1cbiA5MzY6XHRcbiA5Mzc6XHRcdHJldHVybiBEQU1PU19NQVhfU0NPUkU7XG4gOTM4Olx0fVxuIDkzOTpcdFxuIDk0MDpcdHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4gOTQxOlx0e1xuIDk0MjpcdFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xuIDk0MzpcdFx0XHQuaWQgPSBEQU1PTl9PUFNfVkFERFIsXG4gOTQ0Olx0XHRcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcbiA5NDU6XHRcdFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcbiA5NDY6XHRcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbiA5NDc6XHRcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXG4gOTQ4Olx0XHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4gOTQ5Olx0XHRcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxuIDk1MDpcdFx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxuIDk1MTpcdFx0XHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcbiA5NTI6XHRcdH07XG4gOTUzOlx0XHQvKiBvcHMgZm9yIGZpeGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZXMgKi9cbiA5NTQ6XHRcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wc19mdmFkZHIgPSBvcHM7XG4gOTU1Olx0XHRpbnQgZXJyO1xuIDk1NjpcdFxuIDk1NzpcdFx0LyogRG9uJiMzOTt0IHNldCB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBmb3IgdGhlIGVudGlyZSBtYXBwaW5nICovXG4gOTU4Olx0XHRvcHNfZnZhZGRyLmlkID0gREFNT05fT1BTX0ZWQUREUjtcbiA5NTk6XHRcdG9wc19mdmFkZHIuaW5pdCA9IE5VTEw7XG4gOTYwOlx0XHRvcHNfZnZhZGRyLnVwZGF0ZSA9IE5VTEw7XG4gOTYxOlx0XG4gOTYyOlx0XHRlcnIgPSBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKTtcbiA5NjM6XHRcdGlmIChlcnIpXG4gOTY0Olx0XHRcdHJldHVybiBlcnI7XG4gOTY1Olx0XHRyZXR1cm4gZGFtb25fcmVnaXN0ZXJfb3BzKFx1MDAyNm9wc19mdmFkZHIpO1xuIDk2NjpcdH1cbiA5Njc6XHRcbiA5Njg6XHRzdWJzeXNfaW5pdGNhbGwoZGFtb25fdmFfaW5pdGNhbGwpO1xuIDk2OTpcdFxuIDk3MDpcdCNpbmNsdWRlIFwmIzM0O3Rlc3RzL3ZhZGRyLWt1bml0LmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgREFNT04mIzM5O3MgVmlydHVhbCBBZGRyZXNzIFNwYWNlIEFjY2VzcyBDaGVja3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFNT04sIHNwZWNpZmljYWxseSB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcsIGhhbmRsZXMgaXRzIGFjY2VzcyBjaGVja3MuIE15IGluaXRpYWwgcGxhbiBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBkYW1vbl92YV9jaGVja19hY2Nlc3Nlc2AgYW5kIGBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NgIGZ1bmN0aW9ucywgdGhleSBzb3VuZCBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBUbyBnZXQgc3RhcnRlZCwgSSYjMzk7bGwgaGVhZCBvdmVyIHRvIHRoZSBgbW0vZGFtb24vdmFkZHIuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgMzQwIHRvIDQwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY29udGV4dCBhbmQgYSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYmVoaW5kIHRob3NlIHR3byBmdW5jdGlvbnMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgZm9yd2FyZCB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGFjY2VzcyBjaGVja2luZyBzeXN0ZW0gaXMgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbiAzNDE6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDM0MjpcdFxuIDM0MzpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHtcbiAzNDY6XHRcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcbiAzNDc6XHRcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxuIDM0ODpcdFx0fTtcbiAzNDk6XHRcbiAzNTA6XHRcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xuIDM1MTpcdH1cbiAzNTI6XHRcbiAzNTM6XHQvKlxuIDM1NDpcdCAqIEZ1bmN0aW9ucyBmb3IgdGhlIGFjY2VzcyBjaGVja2luZyBvZiB0aGUgcmVnaW9uc1xuIDM1NTpcdCAqL1xuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gMzU4Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gMzU5Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAzNjA6XHR7XG4gMzYxOlx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCwgci1cdTAwM2Vhci5lbmQpO1xuIDM2MjpcdFxuIDM2MzpcdFx0ZGFtb25fdmFfbWtvbGQobW0sIHItXHUwMDNlc2FtcGxpbmdfYWRkcik7XG4gMzY0Olx0fVxuIDM2NTpcdFxuIDM2NjpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gMzY3Olx0e1xuIDM2ODpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiAzNjk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDM3MDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiAzNzE6XHRcbiAzNzI6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiAzNzM6XHRcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4gMzc0Olx0XHRcdGlmICghbW0pXG4gMzc1Olx0XHRcdFx0Y29udGludWU7XG4gMzc2Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxuIDM3NzpcdFx0XHRcdF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2sobW0sIHIsIGN0eCk7XG4gMzc4Olx0XHRcdG1tcHV0KG1tKTtcbiAzNzk6XHRcdH1cbiAzODA6XHR9XG4gMzgxOlx0XG4gMzgyOlx0c3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSB7XG4gMzgzOlx0XHRib29sIHlvdW5nO1xuIDM4NDpcdH07XG4gMzg1Olx0XG4gMzg2Olx0c3RhdGljIGludCBkYW1vbl95b3VuZ19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDM4NzpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDM4ODpcdHtcbiAzODk6XHRcdHB0ZV90ICpwdGU7XG4gMzkwOlx0XHRwdGVfdCBwdGVudDtcbiAzOTE6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAzOTI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gMzkzOlx0XHRzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIDM5NDpcdFxuIDM5NTpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAzOTY6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4gMzk3Olx0XHRpZiAocHRsKSB7XG4gMzk4Olx0XHRcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xuIDM5OTpcdFxuIDQwMDpcdFx0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxuIDQwMTpcdFx0XHRcdGdvdG8gaHVnZV9vdXQ7XG4gNDAyOlx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4gNDAzOlx0XHRcdGlmICghZm9saW8pXG4gNDA0Olx0XHRcdFx0Z290byBodWdlX291dDtcbiA0MDU6XHRcdFx0aWYgKHBtZF95b3VuZyhwbWRlKSB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuIDQwNjpcdFx0XHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh3YWxrLVx1MDAzZW1tLFxuIDQwNzpcdFx0XHRcdFx0XHRcdGFkZHIpKVxuIDQwODpcdFx0XHRcdHByaXYtXHUwMDNleW91bmcgPSB0cnVlO1xuIDQwOTpcdGh1Z2Vfb3V0OlxuIDQxMDpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQxMTpcdFx0XHRyZXR1cm4gMDtcbiA0MTI6XHRcdH1cbiA0MTM6XHQjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIDQxNDpcdFxuIDQxNTpcdFx0cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVx1MDAzZW1tLCBwbWQsIGFkZHIsIFx1MDAyNnB0bCk7XG4gNDE2Olx0XHRpZiAoIXB0ZSlcbiA0MTc6XHRcdFx0cmV0dXJuIDA7XG4gNDE4Olx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gNDE5Olx0XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9kYW1vbi92YWRkci5jYCBmb3IgREFNT04gYW5kIFlvdW5nIEh1Z2VUTEIgSW50ZWdyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgaW50ZXJhY3Rpb24gb2YgREFNT04gd2l0aCBZb3VuZyBIdWdlVExCLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBoYW5kbGluZyB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeWAsIG9yIHBvdGVudGlhbGx5IGEgc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSwgdGhhdCB3aWxsIGhvcGVmdWxseSBpbGx1c3RyYXRlIGhvdyBEQU1PTiBpcyBtYW5hZ2luZyBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIFlvdW5nIEh1Z2VUTEIuIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlcmUgd2lsbCBiZSBhbiBlbnRyeSBwb2ludCBvciBzb21lIHNvcnQgb2YgaGFuZGxlciBmb3IgdGhpcy4gSXQgbWlnaHQgb2ZmZXIgY2x1ZXMgYXMgdG8gaG93IHRvIGVuaGFuY2UgREFNT04uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0XHRcdGdvdG8gb3V0O1xuIDQyMTpcdFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcbiA0MjI6XHRcdGlmICghZm9saW8pXG4gNDIzOlx0XHRcdGdvdG8gb3V0O1xuIDQyNDpcdFx0aWYgKHB0ZV95b3VuZyhwdGVudCkgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcbiA0MjU6XHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh3YWxrLVx1MDAzZW1tLCBhZGRyKSlcbiA0MjY6XHRcdFx0cHJpdi1cdTAwM2V5b3VuZyA9IHRydWU7XG4gNDI3Olx0b3V0OlxuIDQyODpcdFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XG4gNDI5Olx0XHRyZXR1cm4gMDtcbiA0MzA6XHR9XG4gNDMxOlx0XG4gNDMyOlx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiA0MzM6XHRzdGF0aWMgaW50IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiA0MzQ6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiA0MzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNDM2Olx0e1xuIDQzNzpcdFx0c3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiA0Mzg6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiA0Mzk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNDQwOlx0XHRzcGlubG9ja190ICpwdGw7XG4gNDQxOlx0XHRwdGVfdCBlbnRyeTtcbiA0NDI6XHRcbiA0NDM6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiA0NDQ6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIDQ0NTpcdFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4gNDQ2Olx0XHRcdGdvdG8gb3V0O1xuIDQ0NzpcdFxuIDQ0ODpcdFx0Zm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuIDQ0OTpcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiA0NTA6XHRcbiA0NTE6XHRcdGlmIChwdGVfeW91bmcoZW50cnkpIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4gNDUyOlx0XHQgICAgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay1cdTAwM2VtbSwgYWRkcikpXG4gNDUzOlx0XHRcdHByaXYtXHUwMDNleW91bmcgPSB0cnVlO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0NTY6XHRcbiA0NTc6XHRvdXQ6XG4gNDU4Olx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1OTpcdFx0cmV0dXJuIDA7XG4gNDYwOlx0fVxuIDQ2MTpcdCNlbHNlXG4gNDYyOlx0I2RlZmluZSBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTExcbiA0NjM6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDQ2NDpcdFxuIDQ2NTpcdHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gNDY2Olx0e1xuIDQ2NzpcdFx0c3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSBhcmcgPSB7XG4gNDY4Olx0XHRcdC55b3VuZyA9IGZhbHNlLFxuIDQ2OTpcdFx0fTtcbiA0NzA6XHRcbiA0NzE6XHRcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl95b3VuZ19vcHMgPSB7XG4gNDcyOlx0XHRcdC5wbWRfZW50cnkgPSBkYW1vbl95b3VuZ19wbWRfZW50cnksXG4gNDczOlx0XHRcdC5odWdldGxiX2VudHJ5ID0gZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeSxcbiA0NzQ6XHRcdH07XG4gNDc1Olx0XG4gNDc2Olx0XHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgJiM0MzsgMSwgXHUwMDI2ZGFtb25feW91bmdfb3BzLCBcdTAwMjZhcmcpO1xuIDQ3NzpcdFx0cmV0dXJuIGFyZy55b3VuZztcbiA0Nzg6XHR9XG4gNDc5Olx0XG4gNDgwOlx0LypcbiA0ODE6XHQgKiBDaGVjayB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGFjY2Vzc2VkIGFmdGVyIHRoZSBsYXN0IHByZXBhcmF0aW9uXG4gNDgyOlx0ICpcbiA0ODM6XHQgKiBtbVx0JiMzOTttbV9zdHJ1Y3QmIzM5OyBmb3IgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBzcGFjZVxuIDQ4NDpcdCAqIHJcdHRoZSByZWdpb24gdG8gYmUgY2hlY2tlZFxuIDQ4NTpcdCAqL1xuIDQ4NjpcdHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDQ4NzpcdFx0XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiA0ODg6XHR7XG4gNDg5Olx0XHRib29sIGFjY2Vzc2VkO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKCFtbSkge1xuIDQ5MjpcdFx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcbiA0OTM6XHRcdFx0cmV0dXJuO1xuIDQ5NDpcdFx0fVxuIDQ5NTpcdFxuIDQ5NjpcdFx0YWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cdTAwM2VzYW1wbGluZ19hZGRyKTtcbiA0OTc6XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgYWNjZXNzZWQpO1xuIDQ5ODpcdH1cbiA0OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gSHVnZSBQYWdlIFBURSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBEQU1PTiBoYW5kbGVzIG1ha2luZyBodWdlIHBhZ2UgUFRFcyAmIzM0O29sZCYjMzQ7LiAgQmVmb3JlLCB0aGUgY29kZSBkaXJlY3RseSBhY2Nlc3NlZCB0aGUgUFRFLCBjaGVja2VkIHRoZSB5b3VuZyBiaXQsIGFuZCB0aGVuIG1vZGlmaWVkIGl0LiBOb3csIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiwgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAuIFRoZSBjb3JlIGxvZ2ljIGlzIG5vdyBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoaXMgbmV3IGZ1bmN0aW9uLCB1c2luZyBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGJlZm9yZSBtYW5pcHVsYXRpb24uIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgcmVmYWN0b3JpbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBzcGVjaWZpY2FsbHkgJiMzNDtBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwmIzM0OyB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4gV2UmIzM5O3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBhbmQgbWFraW5nIHRoZW0gJiMzNDtvbGQuJiMzNDsgVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgc2NvcGUuICBJdCBzZWVtcyB0byBiZSBmaXhpbmcgb3IgY2hhbmdpbmcgaG93IGh1Z2V0bGIgUFRFIG1hbmlwdWxhdGlvbiBvY2N1cnMgd2l0aGluIERBTU9OLgoKSSBhbHNvIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3ltYm9scyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRgLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgaGVscGVyIGZ1bmN0aW9uLCBhbmQgbW9kaWZpZXMgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgLiAgV2UgYWxzbyBoYXZlIGBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5YCwgYGRhbW9uX3ZhX21rb2xkYCwgYW5kIGBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NgIGluIHRoaXMgZmlsZS4gTG9va2luZyBhdCB0aGUgY29kZSwgdGhleSBhbGwgYXBwZWFyIHRvIGJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGB2YWRkci5jYCwgd2hpY2ggbWFrZXMgdGhlbSBzcGVjaWZpYyB0byB0aGlzIERBTU9OIG1vZHVsZS4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBIVUdFVExCX1BBR0VgIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgaWYgaXQgaGFzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjEzOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTQyLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Mzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDUtXG5hcmNoL3NoL21tL0tjb25maWc6MTQ2OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDktXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTUxLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuLS1cbm1tL0tjb25maWctNjkxLVxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY5My1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4ODUKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogQ29uZmlybWVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgY2hlY2sgb2YgYGZzL0tjb25maWdgIGNvbmZpcm1lZCBgSFVHRVRMQkZTYCBpcyB0aGUga2V5LCBhbmQgaXQmIzM5O3MgdGllZCB0byBgSFVHRVRMQl9QQUdFYC4gU28sIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgdGhlIGZvdW5kYXRpb24uIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBpbiBwbGF5LgoKTmV4dCwgSSBuZWVkIHRvIGVuc3VyZSB1c2Vyc3BhY2UgY29udHJvbCBpcyBlbmFibGVkLiBgREFNT05fU1lTRlNgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGF0LCBhbmQgaW5kZWVkLCBpdCBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSB0aGF0IFN5emthbGxlciB3aWxsIHVzZS4gTm93LCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBpbnN0cnVjdGlvbnMgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIGFic29sdXRlbHkuIFRoaXMgaXMgY3JpdGljYWwuCiogICBgUmVhc29uaW5nYDogWWVzLCB0aGUgbW9kaWZpY2F0aW9uIHRvIERBTU9OJiMzOTtzIGh1Z2V0bGIgcGFnZSBhY2Nlc3MgbW9uaXRvcmluZyBpbiBgbW0vZGFtb24vdmFkZHIuY2Agd2l0aCB0aG9zZSBmdW5jdGlvbnMgaXMgYSBiaWcgZGVhbC4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIFBURSBoYW5kbGluZyBhbmQgYWx0ZXJpbmcgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gc2F0aXNmaWVkLgoqICAgYEZvY3VzU3ltYm9sc2A6IEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBzeW1ib2xzIChgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYCwgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgLCBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9ta29sZGAsIGFuZCBgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzYCkgYXJlIGV4YWN0bHkgYXMgc3BlY2lmaWVkLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJIHJlLXZhbGlkYXRlZCB0aGF0IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBIVUdFVExCX1BBR0VgLCBhbmQgYEhVR0VUTEJGU2AgYXJlIGNvcnJlY3QgYW5kIHJlYWR5LgoKRXZlcnl0aGluZyBpcyBtZXRpY3Vsb3VzbHkgY2hlY2tlZCBhbmQgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIGZvciBodWdldGxiIGVudHJpZXMgaW4gbW0vZGFtb24vdmFkZHIuYyBieSBleHRyYWN0aW5nIGFuZCB1cGRhdGluZyB0aGUgaHVnZXRsYiBQVEUgY2xlYXJpbmcgYW5kIGFnaW5nIGxvZ2ljICh1c2luZyBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcikuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGludmFyaWFudCB2aW9sYXRpb25zIGluIGh1Z2V0bGIgUFRFIG1hbmlwdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIGZvciBodWdldGxiIGVudHJpZXMgaW4gbW0vZGFtb24vdmFkZHIuYyBieSBleHRyYWN0aW5nIGFuZCB1cGRhdGluZyB0aGUgaHVnZXRsYiBQVEUgY2xlYXJpbmcgYW5kIGFnaW5nIGxvZ2ljICh1c2luZyBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcikuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGludmFyaWFudCB2aW9sYXRpb25zIGluIGh1Z2V0bGIgUFRFIG1hbmlwdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHBhZ2UgYWdpbmcgaW4gREFNT04gKG1tL2RhbW9uL3ZhZGRyLmMpIGJ5IGludHJvZHVjaW5nIHRoZSBoZWxwZXIgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKCkgd2hpY2ggcHJvcGVybHkgY2xlYXJzIHRoZSBQVEUgdmlhIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKCkgYmVmb3JlIG1hcmtpbmcgaXQgb2xkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChlLmcuIGVudHJ5LCByZWZlcmVuY2VkLCBwc2l6ZSkgYXJlIHNjYWxhci9QVEUgdHlwZXMgZnVsbHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcGFnZS10YWJsZSBoYW5kbGluZyBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU0YjQ4Nzk2Mzk3ZDA0M2U4MzI3YzU2YzhjMjRmZDMzYzcxNDRiODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggZjg4NGQzZjc4ZjMwYS4uOTFhMGQ0NDFjMWY5NCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0yODMsMjIgJiM0MzsyODMsMjkgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogfQogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwomIzQzOwomIzQzOwlpZiAoIXB0ZV95b3VuZygqZW50cnkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7CiYjNDM7CSplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpOwomIzQzOwlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlib29sIHJlZmVyZW5jZWQgPSBmYWxzZTsKIAlwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7Ci0JdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7CiAKIAlmb2xpb19nZXQoZm9saW8pOwogCi0JaWYgKHB0ZV95b3VuZyhlbnRyeSkpIHsKLQkJcmVmZXJlbmNlZCA9IHRydWU7Ci0JCWVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTsKLQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7Ci0JfQotCiYjNDM7CXJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCAmYW1wO2VudHJ5KTsKIAlpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLAogCQkJCSAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSkKIAkJcmVmZXJlbmNlZCA9IHRydWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciBpdC4gVGhlIGdvYWwgaXMgdG8gYmUgZWZmaWNpZW50IHdpdGggb3VyIHJlc291cmNlcyBhbmQgbm90IHRyaWdnZXIgdW5uZWNlc3NhcnkgZnV6emluZyBydW5zLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBgZGlmZmAgaXRzZWxmLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaGFuZGxpbmcgaHVnZSBwYWdlcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBtYXJraW5nIHBhZ2VzIGFzICYjMzQ7b2xkJiMzNDsuCgpUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IHdhczoKYGBgYwpzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAoJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKewoJYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7CglwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7CglzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwoKCWZvbGlvX2dldChmb2xpbyk7CgoJaWYgKHB0ZV95b3VuZyhlbnRyeSkpIHsKCQlyZWZlcmVuY2VkID0gdHJ1ZTsKCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7CgkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7Cgl9CgpgYGAKClRoaXMgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm93IHJlYWQ6CgpgYGBjCiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCnN0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpCnsKCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwoKCWlmICghcHRlX3lvdW5nKCplbnRyeSkpCgkJcmV0dXJuIGZhbHNlOwoJKmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpOwoJKmVudHJ5ID0gcHRlX21rb2xkKCplbnRyeSk7CglzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7CglyZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCnsKCWJvb2wgcmVmZXJlbmNlZCA9IGZhbHNlOwoJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwoJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7Cglmb2xpb19nZXQoZm9saW8pOwoKCXJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCAmYW1wO2VudHJ5KTsKCWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCgkJCQkgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpCgkJcmVmZXJlbmNlZCA9IHRydWU7CmBgYAoKVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uLCBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYCwgd2hpY2ggaGFuZGxlcyB0aGUgJiMzNDtnZXQgYW5kIGNsZWFyJiMzNDsgb2YgdGhlIFBURSBhbmQgdGhlIHNldHRpbmcgb2YgaXQgdG8gJiMzNDtvbGQmIzM0Oy4gVGhlcmUgaXMgYWxzbyB0aGUgdXNlIG9mIGEgYGZvbGlvYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBjaGFuZ2UgKml0c2VsZiogZG9lc24mIzM5O3QgbG9vayBsaWtlIGFuIG9idmlvdXMgS01TQU4gdHJpZ2dlci4gV2UgYXJlIGVzc2VudGlhbGx5IG1vZGlmeWluZyBwYWdlIHRhYmxlIGVudHJpZXMgdG8gcmVmbGVjdCBhY2Nlc3MsIHdoaWNoIGlzIGEgY29tbW9uIG9wZXJhdGlvbi4gSG93ZXZlciwgdGhlIHVzZSBvZiBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGlzIHdoZXJlIG15IGF0dGVudGlvbiBpcy4gU2luY2UgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyYCBtaWdodCBoYXZlIHNvbWUgc3VidGxlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgbG9ja2luZyBpbnZvbHZlZCwgd2Ugd2lsbCBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGxlbWVudGF0aW9uLiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGlzIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBjYWxsZWQgZnJvbS4KClRvIGdhaW4gbW9yZSBjb250ZXh0LCBJJiMzOTtsbCBub3cgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL2RhbW9uL3ZhZGRyLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmaWxlcy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUga2V5IGlzIHRvIGFzc2VzcyBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBtZW1vcnkgaW50ZXJhY3Rpb25zIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBjYXRjaGluZy4gSWYgdGhlIGNvbnRleHQgbG9va3MgYmVuaWduLCB3ZSBjYW4gcHJvYmFibHkgaG9sZCBvZmYgb24gZGVkaWNhdGVkIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2h1Z2V0bGJfbWtvbGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz0yODY9c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjk4LVxubW0vZGFtb24vdmFkZHIuYzoyOTk6c3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2RhbW9uL3ZhZGRyLmMtMzAwLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi92YWRkci5jPTMyMD1zdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTMzMi1cbm1tL2RhbW9uL3ZhZGRyLmM6MzMzOlx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXHUwMDNlbW0sIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMzM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGluIGBtbS9kYW1vbi92YWRkci5jYCoqCgpPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgZGlzc2VjdGluZyB0aGlzIGBkYW1vbl9odWdldGxiX21rb2xkYCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBpdHMgY29udGV4dCB3aXRoaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtodWdldGxiJiMzNDsg4oCTIHRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLCBhbmQgdGhhdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGFuZCBob3cgREFNT04gaW50ZXJhY3RzLiBUaGUgJiMzNDtta29sZCYjMzQ7IHBhcnQgaGludHMgYXQgbWFya2luZyBwYWdlcyBhcyAmIzM0O29sZCwmIzM0OyB3aGljaCwgaW4gdGhlIERBTU9OIGNvbnRleHQsIGxpa2VseSBpbmRpY2F0ZXMgYSB0cmFuc2l0aW9uIG9yIHJlLWV2YWx1YXRpb24gaW4gdXNhZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbiwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdGhlIGNvbnNlcXVlbmNlcyBvZiBtYXJraW5nIHRoZXNlIGh1Z2V0bGIgcGFnZXMgYXMgJiMzNDtvbGQmIzM0OyBhcmUuCgpJIGV4cGVjdCB0byBzZWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBwZXJoYXBzIG1hbmlwdWxhdGlvbnMgcmVsYXRlZCB0byB0aGUgaHVnZSBwYWdlIG1hcHBpbmcsIGFuZCBwb3NzaWJseSBzb21lIGludm9sdmVtZW50IHdpdGggREFNT04mIzM5O3MgbW9uaXRvcmluZyBzdHJ1Y3R1cmVzLiBJIGFudGljaXBhdGUgd2UmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggaHVnZXRsYmZzIGFuZCBEQU1PTiYjMzk7cyBvcGVyYXRpb25zIGNvbmN1cnJlbnRseS4gVGhpcyBzZWN0aW9uJiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIHByb3ZpZGUgZGV0YWlscyBhYm91dCBob3cgREFNT04gc3BlY2lmaWNhbGx5IGhhbmRsZXMgaHVnZSBwYWdlcyB3aGljaCBoYXMgYWx3YXlzIGJlZW4gYSBrZXkgYXJlYSBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCBpdC4gTGV0JiMzOTtzIHN0YXJ0IHBhcnNpbmcgdGhhdCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdG91dDpcbiAyODE6XHRcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuIDI4MjpcdFx0cmV0dXJuIDA7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gMjg2Olx0c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDI4NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxuIDI5MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjkzOlx0XHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG4gMjk0Olx0XHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcbiAyOTU6XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbiAyOTY6XHRcdHJldHVybiB0cnVlO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiAyOTk6XHRzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDMwMDpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiAzMDE6XHR7XG4gMzAyOlx0XHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiAzMDM6XHRcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiAzMDQ6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuIDMwNTpcdFxuIDMwNjpcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiAzMDc6XHRcbiAzMDg6XHRcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcdTAwMjZlbnRyeSk7XG4gMzA5Olx0XHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuIDMxMDpcdFx0XHRcdFx0ICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuIDMxMTpcdFx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiAzMTI6XHRcbiAzMTM6XHRcdGlmIChyZWZlcmVuY2VkKVxuIDMxNDpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuIDMxNTpcdFxuIDMxNjpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuIDMxNzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAzMTg6XHR9XG4gMzE5Olx0XG4gMzIwOlx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gMzIxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gMzIyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDMyMzpcdHtcbiAzMjQ6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiAzMjU6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAzMjY6XHRcdHB0ZV90IGVudHJ5O1xuIDMyNzpcdFxuIDMyODpcdFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVx1MDAzZW1tLCBwdGUpO1xuIDMyOTpcdFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4gMzMwOlx0XHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbiAzMzE6XHRcdFx0Z290byBvdXQ7XG4gMzMyOlx0XG4gMzMzOlx0XHRkYW1vbl9odWdldGxiX21rb2xkKHB0ZSwgd2Fsay1cdTAwM2VtbSwgd2Fsay1cdTAwM2V2bWEsIGFkZHIpO1xuIDMzNDpcdFxuIDMzNTpcdG91dDpcbiAzMzY6XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMzM3Olx0XHRyZXR1cm4gMDtcbiAzMzg6XHR9XG4gMzM5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0MQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogREFNT04gaHVnZXRsYiBQVEUgQWdpbmcgUmVmYWN0b3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBgZGFtb25faHVnZXRsYl9ta29sZCgpYCBwYXRjaCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciBLTVNBTiBjb25jZXJuLCBnaXZlbiB0aGUgd29yayBhcm91bmQgUFRFcy4gVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCBpcyBzdHJhaWdodGZvcndhcmQ6IGNoZWNrIGlmIHRoZSBQVEUgaXMgeW91bmcsIG1hcmsgaXQgb2xkIGlmIGl0IGlzLCBhbmQgdXBkYXRlLiBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0aGF0IGludG8gYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpYCB3aXRoIGEgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKClgIGNhbGwuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIHRoaXMgY2hhbmdlLgoKRmlyc3QsIEkgbWV0aWN1bG91c2x5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSB0byB2ZXJpZnkgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIGBlbnRyeWAgaXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2l0aCBgaHVnZV9wdGVwX2dldCgpYCwgYW5kIEkgc2VlIGl0IHBhc3NlZCBhcyBhIHBvaW50ZXIuIFRoZSBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKClgIGZ1bmN0aW9uIGl0c2VsZiBjaGVja3MgYHB0ZV95b3VuZygpYCAqYmVmb3JlKiBhbnkgbW9kaWZpY2F0aW9uLCBzbyB3ZSYjMzk7cmUgc2FmZSB0aGVyZS4gSXQgdGhlbiBwZXJmb3JtcyB0aGUgY2xlYXIgYW5kIHNldCBvcGVyYXRpb25zLCBidXQgaW1wb3J0YW50bHksIHRoZSB2YWx1ZXMgdXNlZCBhcmUgKmFsbCogZXhwbGljaXRseSBpbml0aWFsaXplZCwgbm8gY29tcGxleCBzdHJ1Y3R1cmVzLCBubyBhbGxvY2F0aW9ucywgYW5kIG5vIGNvcGllcyB0byB1c2Vyc3BhY2Ug4oCTIGEgYmlnIHJlbGllZi4KCkkgdGhlbiB3ZW50IHRocm91Z2ggdGhlIGNvbW1vbiBpc3N1ZXMgd2l0aCB0aGlzIGtpbmQgb2Ygd29yay4gVGhlIHZhcmlhYmxlcyBhcmUgYmFzaWMgdHlwZXMgYW5kIGZ1bGx5IGluaXRpYWxpemVkLiBUaGlzIGlzbiYjMzk7dCB3aGVyZSBLTVNBTiBzaGluZXMuIFRoaXMga2luZCBvZiBwYXRjaCBpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYnVncywgd2hpY2ggS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgTU0gYXNzZXJ0aW9ucyBzaG91bGQgY2F0Y2guIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZCBoZXJlLgoKVGhlcmVmb3JlLCBhZnRlciB0aGF0IGRlZXAgZGl2ZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBjcml0ZXJpYSBmb3IgS01TQU4gYXBwbGljYWJpbGl0eSDigJMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIOKAkyBhcmUgYWxsICpub3QqIHByZXNlbnQuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgcG9zZXMgbm8gcmlzayBvZiB0aGUgcHJvYmxlbXMgS01TQU4gc3BlY2lmaWNhbGx5IGFkZHJlc3Nlcy4gVGhlIG9sZCBgZGFtb25faHVnZXRsYl9ta29sZGAgZnVuY3Rpb24gaGFkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBhcyB3ZWxsLiBUaGUgcmVmYWN0b3JpbmcgaW1wcm92ZXMgdGhhdCBieSB1c2luZyBtb3JlIHJlbGlhYmxlIEFQSXMgaW4gdGhlIG1tIHN1YnN5c3RlbS4KClNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBwYWdlIGFnaW5nIGluIERBTU9OIChtbS9kYW1vbi92YWRkci5jKSBieSBpbnRyb2R1Y2luZyB0aGUgaGVscGVyIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpIHdoaWNoIHByb3Blcmx5IGNsZWFycyB0aGUgUFRFIHZpYSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpIGJlZm9yZSBtYXJraW5nIGl0IG9sZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoZS5nLiBlbnRyeSwgcmVmZXJlbmNlZCwgcHNpemUpIGFyZSBzY2FsYXIvUFRFIHR5cGVzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHBhZ2UtdGFibGUgaGFuZGxpbmcgYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBwYWdlIGFnaW5nIGluIERBTU9OIChtbS9kYW1vbi92YWRkci5jKSBieSBpbnRyb2R1Y2luZyB0aGUgaGVscGVyIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpIHdoaWNoIHByb3Blcmx5IGNsZWFycyB0aGUgUFRFIHZpYSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpIGJlZm9yZSBtYXJraW5nIGl0IG9sZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoZS5nLiBlbnRyeSwgcmVmZXJlbmNlZCwgcHNpemUpIGFyZSBzY2FsYXIvUFRFIHR5cGVzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHBhZ2UtdGFibGUgaGFuZGxpbmcgYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjA1LjAwMTc1NjMxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTE3MjI4MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25faHVnZXRsYl9wdGVwX21rb2xkXCIsXG4gICAgXCJkYW1vbl9odWdldGxiX21rb2xkXCIsXG4gICAgXCJkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5XCIsXG4gICAgXCJkYW1vbl92YV9ta29sZFwiLFxuICAgIFwiZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBwYWdlIGFnaW5nIGluIERBTU9OIChtbS9kYW1vbi92YWRkci5jKSBieSBpbnRyb2R1Y2luZyB0aGUgaGVscGVyIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpIHdoaWNoIHByb3Blcmx5IGNsZWFycyB0aGUgUFRFIHZpYSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpIGJlZm9yZSBtYXJraW5nIGl0IG9sZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoZS5nLiBlbnRyeSwgcmVmZXJlbmNlZCwgcHNpemUpIGFyZSBzY2FsYXIvUFRFIHR5cGVzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHBhZ2UtdGFibGUgaGFuZGxpbmcgYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgZm9yIGh1Z2V0bGIgZW50cmllcyBpbiBtbS9kYW1vbi92YWRkci5jIGJ5IGV4dHJhY3RpbmcgYW5kIHVwZGF0aW5nIHRoZSBodWdldGxiIFBURSBjbGVhcmluZyBhbmQgYWdpbmcgbG9naWMgKHVzaW5nIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMgaW4gaHVnZXRsYiBQVEUgbWFuaXB1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTowNS4wMDE3NjQwMDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDE3OTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0YjQ4Nzk2Mzk3ZDA0M2U4MzI3YzU2YzhjMjRmZDMzYzcxNDRiODBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjo1NTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtMjgzLDIyICsyODMsMjkgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbitzdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICplbnRyeSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4rXFxuK1xcdGlmICghcHRlX3lvdW5nKCplbnRyeSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xcbitcXHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcXG4rXFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsICplbnRyeSwgcHNpemUpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcXG4gXFx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XFxuIFxcbiBcXHRmb2xpb19nZXQoZm9saW8pO1xcbiBcXG4tXFx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcXG4tXFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuLVxcdFxcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcXG4tXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XFxuLVxcdH1cXG4tXFxuK1xcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcXHUwMDI2ZW50cnkpO1xcbiBcXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcXG4gXFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjA1LjY0MjY4ODEwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTU1OTk3NDk3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX21rb2xkXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRiNDg3OTYzOTdkMDQzZTgzMjdjNTZjOGMyNGZkMzNjNzE0NGI4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggZjg4NGQzZjc4ZjMwYS4uOTFhMGQ0NDFjMWY5NCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0yODMsMjIgKzI4MywyOSBAQCBzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4rXG4rXHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG4rXHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcbitcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiBcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXG4gXHRmb2xpb19nZXQoZm9saW8pO1xuIFxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4rXHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXHUwMDI2ZW50cnkpO1xuIFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbiBcdFx0XHRcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuIFx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjA1LjY0MjY5MTY3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1ODIxOTQzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBwYXRjaDpcblxuKipBbmFseXppbmcgdGhlIERBTU9OIHZhZGRyLmMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgcmV2aWV3IHJlcXVlc3QuIFRoZSB0YXJnZXQgZmlsZSBpcyBgbW0vZGFtb24vdmFkZHIuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0g4oCTIHNwZWNpZmljYWxseSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvciksIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoLiBUaW1lIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgZ2V0IGEgZ29vZCBncmFzcCBvZiB0aGUgY29udGV4dC5cblxuTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgdGhlIGRpZmYgb3BlbiBhbmQgcmVhbGx5IGV4YW1pbmUgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBmaWxlLiBUaGVuIEkgbmVlZCB0byBzZWUgdGhlIHJlbGF0ZWQgZmlsZXMuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSByZW1pbmQgbXlzZWxmIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJ2xsIHByb2JhYmx5IHB1bGwgdXAgYG1tL2RhbW9uL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbiBwbGF5LiBJJ2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRob3NlIHF1aWNrbHkgb3Blbi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OCwiT3V0cHV0VG9rZW5zIjo2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MTAuMjI0ODg4NDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzU6XFx0XFx0aWYgKCFwdGUpXFxuIDI3NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjc3OlxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlKSkpXFxuIDI3ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjc5OlxcdFxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbiAyODA6XFx0b3V0OlxcbiAyODE6XFx0XFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XFxuIDI4MjpcXHRcXHRyZXR1cm4gMDtcXG4gMjgzOlxcdH1cXG4gMjg0OlxcdFxcbiAyODU6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gMjg2OlxcdHN0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gMjg3OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICplbnRyeSlcXG4gMjg4OlxcdHtcXG4gMjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTM6XFx0XFx0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xcbiAyOTQ6XFx0XFx0KmVudHJ5ID0gcHRlX21rb2xkKCplbnRyeSk7XFxuIDI5NTpcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7XFxuIDI5NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gMzAwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDMwMTpcXHR7XFxuIDMwMjpcXHRcXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcXG4gMzAzOlxcdFxcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcXG4gMzA0OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXFx1MDAyNmVudHJ5KTtcXG4gMzA5OlxcdFxcdGlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsXFxuIDMxMDpcXHRcXHRcXHRcXHRcXHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcXG4gMzExOlxcdFxcdFxcdHJlZmVyZW5jZWQgPSB0cnVlO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHRpZiAocmVmZXJlbmNlZClcXG4gMzE0OlxcdFxcdFxcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcXG4gMzE3OlxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXFx1MDAzZXZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjEwLjIyNDk4MjkzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzg4NjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwOTUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG4tLVxcbm1tL2RhbW9uL01ha2VmaWxlPTM9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxubW0vZGFtb24vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxubW0vZGFtb24vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5PXN0YXRpYyBERUZJTkVfTVVURVgoZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzozMDpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcXG5tbS9kYW1vbi9jb3JlLmMtMzEtXFxubW0vZGFtb24vY29yZS5jPTMyPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFtb25fcmVnaW9uX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9kYW1vbi9jb3JlLmMtMzMtXFxubW0vZGFtb24vY29yZS5jOjM0Oi8qIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGFtb25fb3BzX2xvY2sgd2l0aCBpZCBzbWFsbGVyIHRoYW4gTlJfREFNT05fT1BTICovXFxubW0vZGFtb24vY29yZS5jLTM1LXN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01My1cXG5tbS9kYW1vbi9jb3JlLmM6NTQ6XFx0aWYgKGlkIFxcdTAwM2U9IE5SX0RBTU9OX09QUylcXG5tbS9kYW1vbi9jb3JlLmMtNTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo2MzogKiBkYW1vbl9yZWdpc3Rlcl9vcHMoKSAtIFJlZ2lzdGVyIGEgbW9uaXRvcmluZyBvcGVyYXRpb25zIHNldCB0byBEQU1PTi5cXG5tbS9kYW1vbi9jb3JlLmMtNjQtICogQG9wczpcXHRtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIHJlZ2lzdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTcxPWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NC1cXG5tbS9kYW1vbi9jb3JlLmM6NzU6XFx0aWYgKG9wcy1cXHUwMDNlaWQgXFx1MDAzZT0gTlJfREFNT05fT1BTKVxcbm1tL2RhbW9uL2NvcmUuYy03Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05OD1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMS1cXG5tbS9kYW1vbi9jb3JlLmM6MTAyOlxcdGlmIChpZCBcXHUwMDNlPSBOUl9EQU1PTl9PUFMpXFxubW0vZGFtb24vY29yZS5jLTEwMy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxMy0gKiBAcjpcXHRcXHRSZWdpb24gdG8gZ2V0IHRoZSBhY2Nlc3MgZnJlcXVlbmN5IG9mLlxcbm1tL2RhbW9uL2NvcmUuYzozMTQ6ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IG9mIEByLlxcbm1tL2RhbW9uL2NvcmUuYy0zMTUtICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDk9dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzcyLVxcbm1tL2RhbW9uL2NvcmUuYzozNzM6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtMzc0LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM4OT1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMS1cXHRyZWdpb24tXFx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NDAyOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmMtNDAzLVxcdFxcdHJlZ2lvbi1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9pbnNlcnRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDMwLVxcbm1tL2RhbW9uL2NvcmUuYzo0MzE6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtNDMyLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NzQ1PXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzYxLVxcdCAqIG5leHRfYXBwbHlfc2lzIHdpbGwgYmUgc2V0IHdoZW4ga2RhbW9uZCBzdGFydHMuICBXaGlsZSBrZGFtb25kIGlzXFxubW0vZGFtb24vY29yZS5jOjc2MjpcXHQgKiBydW5uaW5nLCBpdCB3aWxsIGFsc28gdXBkYXRlZCB3aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBEQU1PTiBjb250ZXh0LFxcbm1tL2RhbW9uL2NvcmUuYy03NjMtXFx0ICogb3IgZGFtb25fYXR0cnMgYXJlIHVwZGF0ZWQuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9OTAxPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05MzAtXFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQgPSAxO1xcbm1tL2RhbW9uL2NvcmUuYzo5MzE6XFx0Y3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gREFNT05fTUlOX1JFR0lPTl9TWjtcXG5tbS9kYW1vbi9jb3JlLmMtOTMyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXFxubW0vZGFtb24vY29yZS5jOjExMDg6ICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXFxubW0vZGFtb24vY29yZS5jLTExMDktICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjM0LSAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xcbm1tL2RhbW9uL2NvcmUuYzoxMjM1OiAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxcbm1tL2RhbW9uL2NvcmUuYy0xMjM2LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MzctXFx0XFx0bnJfcHJvYmVzKys7XFxubW0vZGFtb24vY29yZS5jOjE0Mzg6XFx0aWYgKG5yX3Byb2JlcyBcXHUwMDNlIERBTU9OX01BWF9QUk9CRVMpXFxubW0vZGFtb24vY29yZS5jLTE0MzktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3OTE9c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc5Ny1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNzk4OlxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jLTE3OTktXFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MjgtXFx0XFx0c3dpdGNoIChzcmNfZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxubW0vZGFtb24vY29yZS5jOjE4Mjk6XFx0XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9jb3JlLmMtMTgzMC1cXHRcXHRcXHRuZXdfZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9IHNyY19maWx0ZXItXFx1MDAzZW1lbWNnX2lkO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4Nzk9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg4OS1cXHQvKiBub2RlX2VsaWdpYmxlX21lbV9icCBtZXRyaWMgcmVxdWlyZXMgUEFERFIgb3BzICovXFxubW0vZGFtb24vY29yZS5jOjE4OTA6XFx0aWYgKHNyYy1cXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xcbm1tL2RhbW9uL2NvcmUuYy0xODkxLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5Mzc9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk1My0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTk1NDogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmM6MTk1NTogKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmM6MTk1NjogKiBAc3JjOlxcdFRoZSBjb21taXQgc291cmNlIERBTU9OIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTE5NTctICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTUxPXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjE2MTogKiBkYW1vbl9pc19ydW5uaW5nKCkgLSBSZXR1cm5zIGlmIGEgZ2l2ZW4gREFNT04gY29udGV4dCBpcyBydW5uaW5nLlxcbm1tL2RhbW9uL2NvcmUuYzoyMTYyOiAqIEBjdHg6XFx0VGhlIERBTU9OIGNvbnRleHQgdG8gc2VlIGlmIHJ1bm5pbmcuXFxubW0vZGFtb24vY29yZS5jLTIxNjMtICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTY2PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE3Ni0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjE3NzogKiBkYW1vbl9rZGFtb25kX3BpZCgpIC0gUmV0dXJuIHBpZCBvZiBhIGdpdmVuIERBTU9OIGNvbnRleHQncyB3b3JrZXIgdGhyZWFkLlxcbm1tL2RhbW9uL2NvcmUuYzoyMTc4OiAqIEBjdHg6XFx0VGhlIERBTU9OIGNvbnRleHQgb2YgdGhlIHF1ZXN0aW9uLlxcbm1tL2RhbW9uL2NvcmUuYy0yMTc5LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE4Mj1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxOTMtLyoqXFxubW0vZGFtb24vY29yZS5jOjIxOTQ6ICogZGFtb25fY2FsbCgpIC0gSW52b2tlIGEgZ2l2ZW4gZnVuY3Rpb24gb24gREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkuXFxubW0vZGFtb24vY29yZS5jOjIxOTU6ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cXG5tbS9kYW1vbi9jb3JlLmMtMjE5Ni0gKiBAY29udHJvbDpcXHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSBjYWxsIHJlcXVlc3QuXFxubW0vZGFtb24vY29yZS5jLTIxOTctICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE5ODogKiBBc2sgREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkgb2YgQGN0eCB0byBjYWxsIGEgZnVuY3Rpb24gd2l0aCBhblxcbm1tL2RhbW9uL2NvcmUuYy0yMTk5LSAqIGFyZ3VtZW50IGRhdGEgdGhhdCByZXNwZWN0aXZlbHkgcGFzc2VkIHZpYSBcXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVxcdTAwM2VmbiBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjE0PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjQ1LSAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXFxubW0vZGFtb24vY29yZS5jOjIyNDY6ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXFxubW0vZGFtb24vY29yZS5jLTIyNDctICogQGNvbnRyb2w6XFx0Q29udHJvbCB2YXJpYWJsZSBvZiB0aGUgd2FsayByZXF1ZXN0Llxcbm1tL2RhbW9uL2NvcmUuYy0yMjQ4LSAqXFxubW0vZGFtb24vY29yZS5jOjIyNDk6ICogQXNrIERBTU9OIHdvcmtlciB0aHJlYWQgKGtkYW1vbmQpIG9mIEBjdHggdG8gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lvblxcbm1tL2RhbW9uL2NvcmUuYy0yMjUwLSAqIHRoYXQgdGhlIGtkYW1vbmQgd2lsbCBhcHBseSBEQU1PUyBhY3Rpb24gdG8sIGFuZCB3YWl0IHVudGlsIHRoZSBrZGFtb25kXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjI5Mz1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzE1LVxcdFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MjMxNjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jLTIzMTctXFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gci1cXHUwMDNlcHJvYmVfaGl0c1tpXTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MzQtICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkXFxubW0vZGFtb24vY29yZS5jOjI0MzU6ICogcmVnaW9ucywgREFNT04gc2tpcHMgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gdGhlIHJlZ2lvbnMgdGhhdCBjaGFyZ2VkXFxubW0vZGFtb24vY29yZS5jLTI0MzYtICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY4Mj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjkwLVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjI2OTE6XFx0ICogV2UgcGxhbiB0byBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgcGVyIGtkYW1vbmQsIGFzIERBTU9OIHN5c2ZzXFxubW0vZGFtb24vY29yZS5jLTI2OTItXFx0ICogaW1wbGllcyB3aXRoICducl9jb250ZXh0cycgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yOTg4LVxcbm1tL2RhbW9uL2NvcmUuYzoyOTg5OiNpZmRlZiBDT05GSUdfREFNT05fUEFERFJcXG5tbS9kYW1vbi9jb3JlLmMtMjk5MC0vKlxcbm1tL2RhbW9uL2NvcmUuYy0yOTkxLSAqIGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoKSAtIENhbGN1bGF0ZSByYXcgZWxpZ2libGUgYnl0ZXMgcGVyIG5vZGUuXFxubW0vZGFtb24vY29yZS5jOjI5OTI6ICogQGM6XFx0XFx0VGhlIERBTU9OIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTI5OTMtICogQHM6XFx0XFx0VGhlIHNjaGVtZS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDAxLSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXFxubW0vZGFtb24vY29yZS5jOjMwMDI6ICogb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREFNT05fUEFERFIgaXMgZW5hYmxlZC4gSXQgYWxzbyByZXF1aXJlcyB0aGVcXG5tbS9kYW1vbi9jb3JlLmMtMzAwMy0gKiBjb250ZXh0IHRvIGJlIHVzaW5nIFBBRERSIG9wZXJhdGlvbnMgZm9yIG1lYW5pbmdmdWwgcmVzdWx0cy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwNzQtXFxubW0vZGFtb24vY29yZS5jOjMwNzU6XFx0aWYgKGMtXFx1MDAzZW9wcy5pZCAhPSBEQU1PTl9PUFNfUEFERFIpXFxubW0vZGFtb24vY29yZS5jLTMwNzYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA4OC19XFxubW0vZGFtb24vY29yZS5jOjMwODk6I2Vsc2UgLyogQ09ORklHX0RBTU9OX1BBRERSICovXFxubW0vZGFtb24vY29yZS5jLTMwOTAtc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA5NC19XFxubW0vZGFtb24vY29yZS5jOjMwOTU6I2VuZGlmIC8qIENPTkZJR19EQU1PTl9QQUREUiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0zMDk2LSNlbHNlIC8qIENPTkZJR19OVU1BICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM2Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDA3LVxcbm1tL2RhbW9uL2NvcmUuYzozNDA4OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jLTM0MDktc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM2LVxcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNDM3OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXFxubW0vZGFtb24vY29yZS5jLTM0MzgtXFx0XFx0bC1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldICogc3pfbCArIHItXFx1MDAzZXByb2JlX2hpdHNbaV1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDYxPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1MTItICogbWF4X25yX3JlZ2lvbnMgdG8gYSBudW1iZXIgdGhhdCBsb3dlciB0aGFuIHRoZSBjdXJyZW50IG51bWJlciBvZiByZWdpb25zXFxubW0vZGFtb24vY29yZS5jOjM1MTM6ICogd2hpbGUgREFNT04gaXMgcnVubmluZy4gIEZvciBzdWNoIGEgY2FzZSwgcmVwZWF0IG1lcmdpbmcgdW50aWwgdGhlIGxpbWl0IGlzXFxubW0vZGFtb24vY29yZS5jLTM1MTQtICogbWV0IHdoaWxlIGluY3JlYXNpbmcgQHRocmVzaG9sZCB1cCB0byBwb3NzaWJsZSBtYXhpbXVtIGxldmVsLlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM1MTY9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzU0Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzU0MzojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYy0zNTQ0LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzYwPXN0YXRpYyB2b2lkIGtkYW1vbmRfdXNsZWVwKHVuc2lnbmVkIGxvbmcgdXNlY3MpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc2Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Mzc2ODojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYy0zNzY5LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00MTI2PWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MTQyLSAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXFxubW0vZGFtb24vY29yZS5jOjQxNDM6ICogQHI6XFx0XFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0Llxcbm1tL2RhbW9uL2NvcmUuYy00MTQ0LSAqIEBhY2Nlc3NlZDpcXHRXaGV0aGVyIHRoZSByZWdpb24gaGFzIGFjY2Vzc2VkIGR1cmluZyBsYXN0IHNhbXBsaW5nIGludGVydmFsLlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQxNTE9dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDE1Ny0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDE1ODogKiBkYW1vbl9pbml0aWFsaXplZCgpIC0gUmV0dXJuIGlmIERBTU9OIGlzIHJlYWR5IHRvIGJlIHVzZWQuXFxubW0vZGFtb24vY29yZS5jLTQxNTktICpcXG5tbS9kYW1vbi9jb3JlLmM6NDE2MDogKiBSZXR1cm46IHRydWUgaWYgREFNT04gaXMgcmVhZHkgdG8gYmUgdXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbm1tL2RhbW9uL2NvcmUuYy00MTYxLSAqL1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yLS8qXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozOiAqIERBTU9OLWJhc2VkIExSVS1saXN0cyBTb3J0aW5nXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00LSAqL1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xOS0vKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjA6ICogRW5hYmxlIG9yIGRpc2FibGUgREFNT05fTFJVX1NPUlQuXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMS0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjI6ICogWW91IGNhbiBlbmFibGUgREFNT05fTFJVX1NPUlQgYnkgc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgYXNcXG5tbS9kYW1vbi9scnVfc29ydC5jOjIzOiAqIGBgWWBgLiAgU2V0dGluZyBpdCBhcyBgYE5gYCBkaXNhYmxlcyBEQU1PTl9MUlVfU09SVC4gIE5vdGUgdGhhdFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQ6ICogREFNT05fTFJVX1NPUlQgY291bGQgZG8gbm8gcmVhbCBtb25pdG9yaW5nIGFuZCBMUlUtbGlzdHMgc29ydGluZyBkdWUgdG8gdGhlXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNS0gKiB3YXRlcm1hcmtzLWJhc2VkIGFjdGl2YXRpb24gY29uZGl0aW9uLiAgUmVmZXIgdG8gYmVsb3cgZGVzY3JpcHRpb25zIGZvciB0aGVcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mjg9c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMC0vKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzE6ICogTWFrZSBEQU1PTl9MUlVfU09SVCByZWFkcyB0aGUgaW5wdXQgcGFyYW1ldGVycyBhZ2FpbiwgZXhjZXB0IGBgZW5hYmxlZGBgLlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzItICpcXG5tbS9kYW1vbi9scnVfc29ydC5jOjMzOiAqIElucHV0IHBhcmFtZXRlcnMgdGhhdCB1cGRhdGVkIHdoaWxlIERBTU9OX0xSVV9TT1JUIGlzIHJ1bm5pbmcgYXJlIG5vdFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQ6ICogYXBwbGllZCBieSBkZWZhdWx0LiAgT25jZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBZYGAsIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNS0gKiByZWFkcyB2YWx1ZXMgb2YgcGFyYW1ldGVycyBleGNlcHQgYGBlbmFibGVkYGAgYWdhaW4uICBPbmNlIHRoZSByZS1yZWFkaW5nIGlzXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNi0gKiBkb25lLCB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBOYGAuICBJZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIGZvdW5kIHdoaWxlXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzogKiB0aGUgcmUtcmVhZGluZywgREFNT05fTFJVX1NPUlQgd2lsbCBiZSBkaXNhYmxlZC5cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzk9c3RhdGljIGJvb2wgY29tbWl0X2lucHV0cyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00My0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDQ6ICogV2hpbGUga2VlcGluZyB0aGUgY2FwcyB0aGF0IHNldCBieSBvdGhlciBxdW90YXMsIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NS0gKiBhdXRvbWF0aWNhbGx5IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzPW1vZHVsZV9wYXJhbShhY3RpdmVfbWVtX2JwLCB1bG9uZywgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTU3LSAqXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1ODogKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBZYGAsIERBTU9OX0xSVV9TT1JUIGF1dG9tYXRpY2FsbHkgdHVuZXNcXG5tbS9kYW1vbi9scnVfc29ydC5jOjU5OiAqIERBTU9OJ3Mgc2FtcGxpbmcgYW5kIGFnZ3JlZ2F0aW9uIGludGVydmFscy4gIFRoZSBhdXRvLXR1bmluZyBhaW1zIHRvIGNhcHR1cmVcXG5tbS9kYW1vbi9scnVfc29ydC5jOjYwOiAqIG1lYW5pbmdmdWwgYW1vdW50IG9mIGFjY2VzcyBldmVudHMgaW4gZWFjaCBEQU1PTi1zbmFwc2hvdCwgd2hpbGUga2VlcGluZyB0aGVcXG5tbS9kYW1vbi9scnVfc29ydC5jLTYxLSAqIHNhbXBsaW5nIGludGVydmFsIDUgbWlsbGlzZWNvbmRzIGluIG1pbmltdW0sIGFuZCAxMCBzZWNvbmRzIGluIG1heGltdW0uXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTgyPW1vZHVsZV9wYXJhbShmaWx0ZXJfeW91bmdfcGFnZXMsIGJvb2wsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy04Ny0gKiBJZiBhIG1lbW9yeSByZWdpb24gaXMgYWNjZXNzZWQgaW4gZnJlcXVlbmN5IG9mIHRoaXMgb3IgaGlnaGVyLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6ODg6ICogREFNT05fTFJVX1NPUlQgaWRlbnRpZmllcyB0aGUgcmVnaW9uIGFzIGhvdCwgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQgb24gdGhlXFxubW0vZGFtb24vbHJ1X3NvcnQuYy04OS0gKiBMUlUgbGlzdCwgc28gdGhhdCBpdCBjb3VsZCBub3QgYmUgcmVjbGFpbWVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gIDUwJSBieVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz05Mz1tb2R1bGVfcGFyYW0oaG90X3RocmVzX2FjY2Vzc19mcmVxLCB1bG9uZywgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTk3LSAqXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo5ODogKiBJZiBhIG1lbW9yeSByZWdpb24gaXMgbm90IGFjY2Vzc2VkIGZvciB0aGlzIG9yIGxvbmdlciB0aW1lLCBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtOTktICogaWRlbnRpZmllcyB0aGUgcmVnaW9uIGFzIGNvbGQsIGFuZCBtYXJrIGl0IGFzIHVuYWNjZXNzZWQgb24gdGhlIExSVSBsaXN0LCBzb1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMDY9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9scnVfc29ydF9xdW90YSA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTE1LX07XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTctXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMTg9c3RhdGljIHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIGRhbW9uX2xydV9zb3J0X3dtYXJrcyA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTI0LX07XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMjU6REVGSU5FX0RBTU9OX01PRFVMRVNfV01BUktTX1BBUkFNUyhkYW1vbl9scnVfc29ydF93bWFya3MpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTI2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTI3PXN0YXRpYyBzdHJ1Y3QgZGFtb25fYXR0cnMgZGFtb25fbHJ1X3NvcnRfbW9uX2F0dHJzID0ge1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMzMtfTtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjEzNDpERUZJTkVfREFNT05fTU9EVUxFU19NT05fQVRUUlNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X21vbl9hdHRycyk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMzUtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTEzOC0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTM5OiAqIFRoZSBzdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIG1lbW9yeSByZWdpb24gdGhhdCBEQU1PTl9MUlVfU09SVCB3aWxsIGRvIHdvcmtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE0MC0gKiBhZ2FpbnN0LiAgQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSdzIGVudGlyZSBwaHlzaWNhbCBtZW1vcnkgaXMgdXNlZCBhcyB0aGVcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTQ0PW1vZHVsZV9wYXJhbShtb25pdG9yX3JlZ2lvbl9zdGFydCwgdWxvbmcsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNDgtICpcXG5tbS9kYW1vbi9scnVfc29ydC5jOjE0OTogKiBUaGUgZW5kIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IHJlZ2lvbiB0aGF0IERBTU9OX0xSVV9TT1JUIHdpbGwgZG8gd29ya1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTUwLSAqIGFnYWluc3QuICBCeSBkZWZhdWx0LCB0aGUgc3lzdGVtJ3MgZW50aXJlIHBoeXNpY2FsIG1lbW9yeSBpcyB1c2VkIGFzIHRoZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNTQ9bW9kdWxlX3BhcmFtKG1vbml0b3JfcmVnaW9uX2VuZCwgdWxvbmcsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNTYtLypcXG5tbS9kYW1vbi9scnVfc29ydC5jOjE1NzogKiBTY2FsZSBmYWN0b3IgZm9yIERBTU9OX0xSVV9TT1JUIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNTgtICpcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTYzPXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9scnVfc29ydF9ob3Rfc3RhdDtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjE2NDpERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19TVEFUU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfaG90X3N0YXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNjUtXFx0XFx0bHJ1X3NvcnRfdHJpZWRfaG90X3JlZ2lvbnMsIGxydV9zb3J0ZWRfaG90X3JlZ2lvbnMsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2OD1zdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fbHJ1X3NvcnRfY29sZF9zdGF0O1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTY5OkRFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9scnVfc29ydF9jb2xkX3N0YXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNzAtXFx0XFx0bHJ1X3NvcnRfdHJpZWRfY29sZF9yZWdpb25zLCBscnVfc29ydGVkX2NvbGRfcmVnaW9ucyxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwOS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjIxMDovKiBDcmVhdGUgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lIGZvciBob3QgbWVtb3J5IHJlZ2lvbnMgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIxMS1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZSh1bnNpZ25lZCBpbnQgaG90X3RocmVzKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMTgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMTk6LyogQ3JlYXRlIGEgREFNT04tYmFzZWQgb3BlcmF0aW9uIHNjaGVtZSBmb3IgY29sZCBtZW1vcnkgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjIwLXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19jb2xkX3NjaGVtZSh1bnNpZ25lZCBpbnQgY29sZF90aHJlcylcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yODQtXFx0cGFyYW1fY3R4LVxcdTAwM2VhZGRyX3VuaXQgPSBhZGRyX3VuaXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyODU6XFx0cGFyYW1fY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KERBTU9OX01JTl9SRUdJT05fU1ogLyBhZGRyX3VuaXQsIDEpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjg2LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00NDE9TU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NDI6XFx0XFxcIlNjYWxlIGZhY3RvciBmb3IgREFNT05fTFJVX1NPUlQgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSlcXFwiKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ0My1cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDg2PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4NzpcXHRcXFwiRW5hYmxlIG9yIGRpc2FibGUgREFNT05fTFJVX1NPUlQgKGRlZmF1bHQ6IGRpc2FibGVkKVxcXCIpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDg4LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz01MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGtkYW1vbmRfcGlkX3BhcmFtX29wcyA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTE3LS8qXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MTg6ICogUElEIG9mIHRoZSBEQU1PTiB0aHJlYWRcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUxOS0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTIwOiAqIElmIERBTU9OX0xSVV9TT1JUIGlzIGVuYWJsZWQsIHRoaXMgYmVjb21lcyB0aGUgUElEIG9mIHRoZSB3b3JrZXIgdGhyZWFkLlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTIxLSAqIEVsc2UsIC0xLlxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yLS8qXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzozOiAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBNb2R1bGVzXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy00LSAqL1xcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xMC0vKlxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MTE6ICogQWxsb2NhdGUsIHNldCwgYW5kIHJldHVybiBhIERBTU9OIGNvbnRleHQgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTItICogQGN0eHA6XFx0UG9pbnRlciB0byBzYXZlIHRoZSBwb2ludCB0byB0aGUgbmV3bHkgY3JlYXRlZCBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jPTE1PWludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yNC1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjI1OlxcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1BBRERSKSkge1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjYtXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMi0vKlxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6MzogKiBDb21tb24gQ29kZSBmb3IgREFNT04gTW9kdWxlc1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNC0gKi9cXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNy1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjg6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19NT05fQVRUUlNfUEFSQU1TKGF0dHJzKVxcdFxcdFxcdFxcXFxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTktXFx0bW9kdWxlX3BhcmFtX25hbWVkKHNhbXBsZV9pbnRlcnZhbCwgYXR0cnMuc2FtcGxlX2ludGVydmFsLFxcdFxcXFxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMTctXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoxODojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1RJTUVfUVVPVEEocXVvdGEpXFx0XFx0XFx0XFxcXFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMTktXFx0bW9kdWxlX3BhcmFtX25hbWVkKHF1b3RhX21zLCBxdW90YS5tcywgdWxvbmcsIDA2MDApO1xcdFxcdFxcXFxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMjItXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoyMzojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1FVT1RBUyhxdW90YSlcXHRcXHRcXHRcXFxcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoyNDpcXHRERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19USU1FX1FVT1RBKHF1b3RhKVxcdFxcdFxcdFxcXFxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTI1LVxcdG1vZHVsZV9wYXJhbV9uYW1lZChxdW90YV9zeiwgcXVvdGEuc3osIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTI2LVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6Mjc6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19XTUFSS1NfUEFSQU1TKHdtYXJrcylcXHRcXHRcXHRcXFxcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yOC1cXHRtb2R1bGVfcGFyYW1fbmFtZWQod21hcmtzX2ludGVydmFsLCB3bWFya3MuaW50ZXJ2YWwsIHVsb25nLFxcdFxcXFxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMzMtXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDozNDojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhzdGF0LCB0cnlfbmFtZSxcXHRcXHRcXFxcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0zNS1cXHRcXHRzdWNjX25hbWUsIHF0X2V4Y2VlZF9uYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MTAuMzA4ODc2NDM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NDg0NTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIEh1Z2VUTEIgUGFnZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kICp3aHkqLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHksIGxpbmUgYnkgbGluZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS9kYW1vbi92YWRkci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCB0aGUgY29kZSBjaGVja2VkIGlmIGEgUFRFIChQYWdlIFRhYmxlIEVudHJ5KSB3YXMgeW91bmcgdXNpbmcgYHB0ZV95b3VuZygpYC4gSWYgc28sIGl0IG1hcmtlZCB0aGUgUFRFIGFzIG9sZCB3aXRoIGBwdGVfbWtvbGQoKWAgYW5kIHRoZW4gdXBkYXRlZCB0aGUgUFRFIHVzaW5nIGBzZXRfaHVnZV9wdGVfYXQoKWAuXG5cbk5vdywgdGhlIGNvZGUgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGNhbGxzIGBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpYCAqYmVmb3JlKiBtb2RpZnlpbmcgdGhlIFBURSBhbmQgY2FsbGluZyBgc2V0X2h1Z2VfcHRlX2F0KClgLiBUaGUgaW1wbGljYXRpb24gb2YgY2FsbGluZyBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGZpcnN0IGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbk15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSBjb2RlIGNoYW5nZS4gVGhpcyBjb3VsZCBiZSBkdWUgdG8gYXJjaGl0ZWN0dXJhbCBudWFuY2VzIG9yIGh1Z2V0bGItc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBJdCdzIGxpa2VseSB0aGF0IGRpcmVjdGx5IG1vZGlmeWluZyB0aGUgSHVnZSBUTEIgUFRFIHVzaW5nIGBzZXRfaHVnZV9wdGVfYXQoKWAgd2l0aG91dCBmaXJzdCBwZXJmb3JtaW5nIGEgZ2V0LWFuZC1jbGVhciBvcGVyYXRpb24gbWlnaHQgbm90IGJlIGNvcnJlY3Qgb24gYWxsIGFyY2hpdGVjdHVyZXMuIEl0IGNvdWxkIGJyZWFrIFRMQiBjb25zaXN0ZW5jeSBvciB0aGUgc2VtYW50aWNzIG9mIEh1Z2VUTEIgUFRFIHVwZGF0ZXMuIEVpdGhlciB3YXksIGNhbGxpbmcgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyYCBpcyBjcml0aWNhbCB0byBwZXJmb3JtIGNvcnJlY3QgdXBkYXRlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLlxuXG5JJ2xsIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBkYW1vbl9odWdldGxiX21rb2xkYCB3aXRoaW4gYG1tL2RhbW9uL3ZhZGRyLmNgIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG1ha2Ugc3VyZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NToxNC44OTM3MjcxOTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGJvb2wgcmVmZXJlbmNlZCA9IGZhbHNlO1xcbiAzMDM6XFx0XFx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xcbiAzMDQ6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcXHUwMDI2ZW50cnkpO1xcbiAzMDk6XFx0XFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxcbiAzMTE6XFx0XFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdGlmIChyZWZlcmVuY2VkKVxcbiAzMTQ6XFx0XFx0XFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xcbiAzMTc6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuIDMyMTpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIDMyMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAzMjM6XFx0e1xcbiAzMjQ6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gMzI1OlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMzI2OlxcdFxcdHB0ZV90IGVudHJ5O1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbiAzMjk6XFx0XFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbiAzMzA6XFx0XFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXFxuIDMzMTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzMyOlxcdFxcbiAzMzM6XFx0XFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXFx1MDAzZW1tLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRvdXQ6XFxuIDMzNjpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAzMzc6XFx0XFx0cmV0dXJuIDA7XFxuIDMzODpcXHR9XFxuIDMzOTpcXHQjZWxzZVxcbiAzNDA6XFx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcXG4gMzQxOlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIDM0MjpcXHRcXG4gMzQzOlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDM0NDpcXHR7XFxuIDM0NTpcXHRcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fbWtvbGRfb3BzID0ge1xcbiAzNDY6XFx0XFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcXG4gMzQ3OlxcdFxcdFxcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeSxcXG4gMzQ4OlxcdFxcdH07XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xcbiAzNTE6XFx0fVxcbiAzNTI6XFx0XFxuIDM1MzpcXHQvKlxcbiAzNTQ6XFx0ICogRnVuY3Rpb25zIGZvciB0aGUgYWNjZXNzIGNoZWNraW5nIG9mIHRoZSByZWdpb25zXFxuIDM1NTpcXHQgKi9cXG4gMzU2OlxcdFxcbiAzNTc6XFx0c3RhdGljIHZvaWQgX19kYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIDM1OTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDM2MDpcXHR7XFxuIDM2MTpcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQpO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHRkYW1vbl92YV9ta29sZChtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkcik7XFxuIDM2NDpcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDM2NzpcXHR7XFxuIDM2ODpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbiAzNjk6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIDM3MDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuIDM3MzpcXHRcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcXG4gMzc0OlxcdFxcdFxcdGlmICghbW0pXFxuIDM3NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzc2OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxcbiAzNzc6XFx0XFx0XFx0XFx0X19kYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVjayhtbSwgciwgY3R4KTtcXG4gMzc4OlxcdFxcdFxcdG1tcHV0KG1tKTtcXG4gMzc5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MTQuODkzODg0MTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEzNzE1NzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBIdWdldGxiIEludGVncmF0aW9uOiBGdXp6aW5nIEZlYXNpYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGBkYW1vbl92YV9ta29sZGAgaXMgbGlua2VkIHRvIGBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5YCwgd2hpY2ggdGhlbiBjYWxscyBgZGFtb25faHVnZXRsYl9ta29sZGAgYW5kIHVsdGltYXRlbHkgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAuIElzIHRoaXMgcGF0aCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZvciBmdXp6aW5nPyBGcm9tIGEgcHJlbGltaW5hcnkgc2NhbiwgdGhpcyBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgZ29vZCB0YXJnZXQuXG5cblRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrKSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgd29ya2luZyBpbiBjb25qdW5jdGlvbiB3aXRoIGh1Z2V0bGIgcGFnZXMuIFJlYWNoYWJsZT8gWWVzLCBEQU1PTiBpcyBjb25maWd1cmFibGUgdGhyb3VnaCBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fVkFERFJgLCBldGMuKSBvciBkZWJ1Z2ZzIG9yIG1vZHVsZXMsIGFuZCBodWdldGxiIGlzIHByZXR0eSBzdGFuZGFyZCBpbiBtb3N0IGVudmlyb25tZW50cyBhbmQgdGVzdGVkLiBXZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gUUVNVSBvciBldmVuIEdDRSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMgYXJlLiBJJ2xsIGNoZWNrIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gTGV0J3MgZGlnIGludG8gYG1tL2RhbW9uL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RBTU9OX1ZBRERSYC4gSXQgZGVwZW5kcyBvbiBgREFNT04gXHUwMDI2XHUwMDI2IE1NVWAsIGFuZCBgSFVHRVRMQl9QQUdFYCBpcyB0aGUgc3RhbmRhcmQgaHVnZXRsYiBjb25maWcsIHNvIGl0IG5lZWRzIGBYODYgfHwgLi4uYC5cblxuVGhlIGZpbGUgbW9kaWZpZWQgaXMgb25seSBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgZ29vZCwgd2UgYXJlIHN0YXJ0aW5nIGluIGEgY29udGFpbmVkIGFyZWEuIExldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgaW52b2x2ZWQuIFRoZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4gYXJlOiBgZGFtb25faHVnZXRsYl9ta29sZGAgYW5kIGBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRgIChhIHN0YXRpYyBoZWxwZXIpLCB3aXRoIGNhbGxlcnMgYGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfbWtvbGRgLCBhbmQgYGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrc2AuIEknbGwgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucywgYW5kIG90aGVyIGZ1bmN0aW9ucyBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgYXJlIHByb3Blcmx5IGV4cG9zZWQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGFjY2Vzc2libGUgZm9yIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDk2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MjAuMDMxMDQ1MzE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdH1cXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0b3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuIDYwMzpcXHRcXHRpbHggPSB2bWFfc3RhcnRfcGdvZmYodm1hKSBcXHUwMDNlXFx1MDAzZSBvcmRlcjtcXG4gNjA0OlxcdFxcdGlseCArPSBsaW5lYXJfcGFnZV9kZWx0YSh2bWEsIGFkZHIpIFxcdTAwM2VcXHUwMDNlIG9yZGVyO1xcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGVzdHMtXFx1MDAzZW5yX2Rlc3RzOyBpKyspXFxuIDYwNzpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gZGVzdHMtXFx1MDAzZXdlaWdodF9hcnJbaV07XFxuIDYwODpcXHRcXG4gNjA5OlxcdFxcdC8qIElmIHRoZSB0b3RhbCB3ZWlnaHRzIGFyZSBzb21laG93IDAsIGRvbid0IG1pZ3JhdGUgYXQgYWxsICovXFxuIDYxMDpcXHRcXHRpZiAoIXdlaWdodF90b3RhbClcXG4gNjExOlxcdFxcdFxcdHJldHVybjtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0dGFyZ2V0ID0gaWx4ICUgd2VpZ2h0X3RvdGFsO1xcbiA2MTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRlc3RzLVxcdTAwM2Vucl9kZXN0czsgaSsrKSB7XFxuIDYxNTpcXHRcXHRcXHRpZiAodGFyZ2V0IFxcdTAwM2MgZGVzdHMtXFx1MDAzZXdlaWdodF9hcnJbaV0pXFxuIDYxNjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNjE3OlxcdFxcdFxcdHRhcmdldCAtPSBkZXN0cy1cXHUwMDNld2VpZ2h0X2FycltpXTtcXG4gNjE4OlxcdFxcdH1cXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0LyogSWYgdGhlIGZvbGlvIGlzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IG5vZGUsIGRvbid0IGRvIGFueXRoaW5nICovXFxuIDYyMTpcXHRcXHRpZiAoZm9saW9fbmlkKGZvbGlvKSA9PSBkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnJbaV0pXFxuIDYyMjpcXHRcXHRcXHRyZXR1cm47XFxuIDYyMzpcXHRcXG4gNjI0OlxcdGlzb2xhdGU6XFxuIDYyNTpcXHRcXHRpZiAoIWZvbGlvX2lzb2xhdGVfbHJ1KGZvbGlvKSlcXG4gNjI2OlxcdFxcdFxcdHJldHVybjtcXG4gNjI3OlxcdFxcdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xcbiA2Mjg6XFx0XFx0XFx0XFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcXG4gNjI5OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bWlncmF0aW9uX2xpc3RzW2ldKTtcXG4gNjMwOlxcdH1cXG4gNjMxOlxcdFxcbiA2MzI6XFx0c3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDYzMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiA2MzQ6XFx0e1xcbiA2MzU6XFx0XFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuIDYzNjpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICptaWdyYXRpb25fbGlzdHMgPSBwcml2LVxcdTAwM2VtaWdyYXRpb25fbGlzdHM7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVxcdTAwM2VzY2hlbWU7XFxuIDYzODpcXHRcXHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMgPSBcXHUwMDI2cy1cXHUwMDNlbWlncmF0ZV9kZXN0cztcXG4gNjM5OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY0MDpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDY0MTpcXHRcXHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcXG4gNjQyOlxcdFxcdGludCBucjtcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA2NDU6XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxuIDY0NjpcXHRcXHRpZiAocHRsKSB7XFxuIDY0NzpcXHRcXHRcXHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0XFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcXG4gNjUwOlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDY1MTpcXHRcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay1cXHUwMDNldm1hLCBhZGRyLCBwbWRlKTtcXG4gNjUyOlxcdFxcdFxcdGlmICghZm9saW8pXFxuIDY1MzpcXHRcXHRcXHRcXHRnb3RvIGh1Z2Vfb3V0O1xcbiA2NTQ6XFx0XFx0XFx0aWYgKGRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHdhbGstXFx1MDAzZXZtYSwgYWRkciwgTlVMTCwgcG1kKSlcXG4gNjU1OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDY1NjpcXHRcXHRcXHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcXG4gNjU3OlxcdFxcdFxcdFxcdFxcdG1pZ3JhdGlvbl9saXN0cyk7XFxuIDY1ODpcXHRodWdlX291dDpcXG4gNjU5OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDY2MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjYxOlxcdFxcdH1cXG4gNjYyOlxcdCNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXFx1MDAzZW1tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbiA2NjU6XFx0XFx0aWYgKCFwdGUpXFxuIDY2NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjY3OlxcdFxcbiA2Njg6XFx0XFx0Zm9yICg7IGFkZHIgXFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4gNjY5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuIDY3MDpcXHRcXG4gNjcxOlxcdFxcdFxcdG5yID0gMTtcXG4gNjcyOlxcdFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNjczOlxcdFxcbiA2NzQ6XFx0XFx0XFx0aWYgKHB0ZV9ub25lKHB0ZW50KSB8fCAhcHRlX3ByZXNlbnQocHRlbnQpKVxcbiA2NzU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDY3NjpcXHRcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcXG4gNjc3OlxcdFxcdFxcdGlmICghZm9saW8pXFxuIDY3ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjc5OlxcdFxcdFxcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZSwgTlVMTCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjIwLjAzMTE2NTk3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjczNTc5NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHZhZGRyLmMgT3BlcmF0aW9ucyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGp1bXAgcmlnaHQgdG8gdGhlIGVuZCBvZiBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSB1c3VhbCBhcHByb2FjaCwgcmlnaHQ/IFdoZW4gdHJ5aW5nIHRvIGdyYXNwIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaG93IHRoZSByZWdpc3RyYXRpb24gbWVjaGFuaXNtcyB3b3JrLCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIGlzIG9mdGVuIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIGZpZ3VyZSB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgaXRzZWxmLCBhbG9uZyB3aXRoIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzc+KAlGhvdyBpdCBnZXRzIGhvb2tlZCBpbnRvIHRoZSBsYXJnZXIgREFNT04gZnJhbWV3b3Jr4oCUd2lsbCBiZSBsYWlkIGJhcmUgYXQgdGhlIGNvbmNsdXNpb24uIEl0J3MgdGhlIHN0YW5kYXJkIHBhdHRlcm4sIHJlYWxseTogZGVmaW5lIHRoZSBndXRzLCB0aGVuIHN0aXRjaCBpdCBhbGwgdG9nZXRoZXIuIFRpbWUgdG8gZ2V0IGEgc2Vuc2UgZm9yIGhvdyB0aGlzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIGlzIGJlaW5nIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjIyLjcwNDc0OTE3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0LypcXG4gNjkxOlxcdCAqIEZ1bmN0aW9ucyBmb3IgdGhlIHRhcmdldCB2YWxpZGl0eSBjaGVjayBhbmQgY2xlYW51cFxcbiA2OTI6XFx0ICovXFxuIDY5MzpcXHRcXG4gNjk0OlxcdHN0YXRpYyBib29sIGRhbW9uX3ZhX3RhcmdldF92YWxpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbiA2OTU6XFx0e1xcbiA2OTY6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbiA2OTc6XFx0XFxuIDY5ODpcXHRcXHR0YXNrID0gZGFtb25fZ2V0X3Rhc2tfc3RydWN0KHQpO1xcbiA2OTk6XFx0XFx0aWYgKHRhc2spIHtcXG4gNzAwOlxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcXG4gNzAxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA3MDI6XFx0XFx0fVxcbiA3MDM6XFx0XFxuIDcwNDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcwNTpcXHR9XFxuIDcwNjpcXHRcXG4gNzA3OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuIDcwODpcXHR7XFxuIDcwOTpcXHRcXHRwdXRfcGlkKHQtXFx1MDAzZXBpZCk7XFxuIDcxMDpcXHR9XFxuIDcxMTpcXHRcXG4gNzEyOlxcdCNpZm5kZWYgQ09ORklHX0FEVklTRV9TWVNDQUxMU1xcbiA3MTM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuIDcxNDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBpbnQgYmVoYXZpb3IpXFxuIDcxNTpcXHR7XFxuIDcxNjpcXHRcXHRyZXR1cm4gMDtcXG4gNzE3OlxcdH1cXG4gNzE4OlxcdCNlbHNlXFxuIDcxOTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19tYWR2aXNlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG4gNzIwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGludCBiZWhhdmlvcilcXG4gNzIxOlxcdHtcXG4gNzIyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiA3MjM6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IFBBR0VfQUxJR04oci1cXHUwMDNlYXIuc3RhcnQpO1xcbiA3MjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBsZW4gPSBQQUdFX0FMSUdOKGRhbW9uX3N6X3JlZ2lvbihyKSk7XFxuIDcyNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGxpZWQ7XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdG1tID0gZGFtb25fZ2V0X21tKHRhcmdldCk7XFxuIDcyODpcXHRcXHRpZiAoIW1tKVxcbiA3Mjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDczMDpcXHRcXG4gNzMxOlxcdFxcdGFwcGxpZWQgPSBkb19tYWR2aXNlKG1tLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgPyAwIDogbGVuO1xcbiA3MzI6XFx0XFx0bW1wdXQobW0pO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRyZXR1cm4gYXBwbGllZDtcXG4gNzM1OlxcdH1cXG4gNzM2OlxcdCNlbmRpZlxcdC8qIENPTkZJR19BRFZJU0VfU1lTQ0FMTFMgKi9cXG4gNzM3OlxcdFxcbiA3Mzg6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuIDczOTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuIDc0MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkKVxcbiA3NDE6XFx0e1xcbiA3NDI6XFx0XFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xcbiA3NDM6XFx0XFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSBwcml2O1xcbiA3NDQ6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIDc0NTpcXHRcXHRpbnQgbnJfZGVzdHM7XFxuIDc0NjpcXHRcXHRpbnQgbmlkO1xcbiA3NDc6XFx0XFx0Ym9vbCB1c2VfdGFyZ2V0X25pZDtcXG4gNzQ4OlxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbGllZCA9IDA7XFxuIDc0OTpcXHRcXHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMgPSBcXHUwMDI2cy1cXHUwMDNlbWlncmF0ZV9kZXN0cztcXG4gNzUwOlxcdFxcdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcXG4gNzUxOlxcdFxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcXG4gNzUyOlxcdFxcdFxcdC5wdGVfZW50cnkgPSBOVUxMLFxcbiA3NTM6XFx0XFx0fTtcXG4gNzU0OlxcdFxcbiA3NTU6XFx0XFx0dXNlX3RhcmdldF9uaWQgPSBkZXN0cy1cXHUwMDNlbnJfZGVzdHMgPT0gMDtcXG4gNzU2OlxcdFxcdG5yX2Rlc3RzID0gdXNlX3RhcmdldF9uaWQgPyAxIDogZGVzdHMtXFx1MDAzZW5yX2Rlc3RzO1xcbiA3NTc6XFx0XFx0cHJpdi5zY2hlbWUgPSBzO1xcbiA3NTg6XFx0XFx0cHJpdi5taWdyYXRpb25fbGlzdHMgPSBrbWFsbG9jX29ianMoKnByaXYubWlncmF0aW9uX2xpc3RzLCBucl9kZXN0cyk7XFxuIDc1OTpcXHRcXHRpZiAoIXByaXYubWlncmF0aW9uX2xpc3RzKVxcbiA3NjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHRcXG4gNzYyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbnJfZGVzdHM7IGkrKylcXG4gNzYzOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwcml2Lm1pZ3JhdGlvbl9saXN0c1tpXSk7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0bW0gPSBkYW1vbl9nZXRfbW0odGFyZ2V0KTtcXG4gNzY3OlxcdFxcdGlmICghbW0pXFxuIDc2ODpcXHRcXHRcXHRnb3RvIGZyZWVfbGlzdHM7XFxuIDc2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MjIuNzA1NTI4MTYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTQ5MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0cywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGZpZWxkIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgdmFkZHIuY2AgLSBMZXQncyBTZWUgV2hhdCdzIGF0IHRoZSBGaW5pc2gqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBtbS9kYW1vbi92YWRkci5jYCwgYW5kIEknbSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSwgbW9zdCByZWNlbnQsIG9yIG1vc3QgaW1wb3J0YW50IHN0dWZmLiBJIHdhbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkb25lICpsYXN0KiBpbiB0aGlzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50IG1vZHVsZSBmb3IgRGFtb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmaW5hbCBpbnRlcmFjdGlvbnMgb3IgY2xlYW4tdXAgbG9naWMsIG1heWJlIHRoZSBtYWluIGZ1bmN0aW9uIG9yIHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBrZXkgRGFtb24tc3BlY2lmaWMgb3BlcmF0aW9uIGludm9sdmluZyB2aXJ0dWFsIGFkZHJlc3Nlcy5cblxuSSdtIGtlZW4gdG8gZ3Jhc3AgdGhlIGNvbmNsdXNpb24gb2YgdGhlIGZ1bmN0aW9uLiBJcyBpdCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZT8gSXMgaXQgZG9pbmcgc29tZXRoaW5nIG1vcmUgc3VidGxlLCBsaWtlIHVwZGF0aW5nIHNvbWUgZ2xvYmFsIHN0YXRlPyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZXhpdCBjb25kaXRpb25zIGFuZCBhbnkgZmluYWwgZGF0YSBtYW5pcHVsYXRpb25zLiBHaXZlbiB0aGUgZmlsZW5hbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBtYW5pcHVsYXRpb25zIGFyZSBnb2luZyB0byBiZSByZWxhdGVkIHRvIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nIG9yIG1hbmlwdWxhdGlvbi4gUGVyaGFwcyBpdCBob2xkcyB0aGUgbWFpbiByb3V0aW5lPyBNYXliZSBhIGNsZWFudXAgcHJvY2VkdXJlPyBXaGF0ZXZlciBpdCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gdGhlIGNvbnRleHQgb2YgRGFtb24ncyBvdmVyYWxsIGdvYWxzLCB3aGljaCBJIGFzc3VtZSBhcmUgdG8gaGVscCB3aXRoIG1lbW9yeSBhY2Nlc3MsIG9wdGltaXphdGlvbiwgb3Igd2hhdGV2ZXIgdGhlIHByb2plY3QgaXMgYWJvdXQuIEknbSBjdXJpb3VzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIERhbW9uLWNlbnRyaWMgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgYXQgcGxheSBpbiB0aGlzIGZpbmFsIHBhcnQsIG9yIGlmIGl0J3MgcmVseWluZyBvbiBtb3JlIGdlbmVyYWwga2VybmVsIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MjUuMjYwNDYwMDYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQsIFxcdTAwMjZ3YWxrX29wcywgXFx1MDAyNnByaXYpO1xcbiA3NzE6XFx0XFx0bW1wdXQobW0pO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5yX2Rlc3RzOyBpKyspIHtcXG4gNzc0OlxcdFxcdFxcdG5pZCA9IHVzZV90YXJnZXRfbmlkID8gcy1cXHUwMDNldGFyZ2V0X25pZCA6IGRlc3RzLVxcdTAwM2Vub2RlX2lkX2FycltpXTtcXG4gNzc1OlxcdFxcdFxcdGFwcGxpZWQgKz0gZGFtb25fbWlncmF0ZV9wYWdlcyhcXHUwMDI2cHJpdi5taWdyYXRpb25fbGlzdHNbaV0sIG5pZCk7XFxuIDc3NjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNzc3OlxcdFxcdH1cXG4gNzc4OlxcdFxcbiA3Nzk6XFx0ZnJlZV9saXN0czpcXG4gNzgwOlxcdFxcdGtmcmVlKHByaXYubWlncmF0aW9uX2xpc3RzKTtcXG4gNzgxOlxcdFxcdHJldHVybiBhcHBsaWVkICogUEFHRV9TSVpFO1xcbiA3ODI6XFx0fVxcbiA3ODM6XFx0XFxuIDc4NDpcXHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlIHtcXG4gNzg1OlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbiA3ODY6XFx0XFx0dW5zaWduZWQgbG9uZyAqc3pfZmlsdGVyX3Bhc3NlZDtcXG4gNzg3OlxcdH07XFxuIDc4ODpcXHRcXG4gNzg5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vc192YV9pbnZhbGlkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDc5MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuIDc5MTpcXHR7XFxuIDc5MjpcXHRcXHRyZXR1cm4gIWZvbGlvIHx8IGZvbGlvID09IHMtXFx1MDAzZWxhc3RfYXBwbGllZDtcXG4gNzkzOlxcdH1cXG4gNzk0OlxcdFxcbiA3OTU6XFx0c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDc5NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiA3OTc6XFx0e1xcbiA3OTg6XFx0XFx0c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuIDc5OTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVxcdTAwM2VzY2hlbWU7XFxuIDgwMDpcXHRcXHR1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkID0gcHJpdi1cXHUwMDNlc3pfZmlsdGVyX3Bhc3NlZDtcXG4gODAxOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cXHUwMDNldm1hO1xcbiA4MDI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gODAzOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gODA0OlxcdFxcdHB0ZV90ICpzdGFydF9wdGUsICpwdGUsIHB0ZW50O1xcbiA4MDU6XFx0XFx0aW50IG5yO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgwODpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4gODA5OlxcdFxcdGlmIChwdGwpIHtcXG4gODEwOlxcdFxcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxcbiA4MTM6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHZtYSwgYWRkciwgcG1kZSk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdFxcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcXG4gODE4OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBOVUxMLCBwbWQpKVxcbiA4MjE6XFx0XFx0XFx0XFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbyk7XFxuIDgyMjpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG4gODIzOlxcdFxcbiA4MjQ6XFx0aHVnZV91bmxvY2s6XFxuIDgyNTpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA4MjY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgyNzpcXHRcXHR9XFxuIDgyODpcXHQjZW5kaWZcXG4gODI5OlxcdFxcdHN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gODMwOlxcdFxcdGlmICghc3RhcnRfcHRlKVxcbiA4MzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgzMjpcXHRcXG4gODMzOlxcdFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuIDgzNDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRcXHRuciA9IDE7XFxuIDgzNzpcXHRcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdFxcdGlmIChwdGVfbm9uZShwdGVudCkgfHwgIXB0ZV9wcmVzZW50KHB0ZW50KSlcXG4gODQwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NDE6XFx0XFxuIDg0MjpcXHRcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh2bWEsIGFkZHIsIHB0ZW50KTtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0XFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxcbiA4NDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg0NjpcXHRcXG4gODQ3OlxcdFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxcbiA4NDg6XFx0XFx0XFx0XFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbyk7XFxuIDg0OTpcXHRcXHRcXHRwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NToyNS4yNjA2MTAwNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE4MTQ5MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpczpcblxuKipEaXZpbmcgQmFjayBpbnRvIHRoZSBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3Nlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGF0IGBtbS9kYW1vbi92YWRkci5jYCBmaWxlLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gdHJvdWJsZXNob290aW5nLCBvcHRpbWl6aW5nLCBvciBwZXJoYXBzIGp1c3QgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGFuZCBob3cgaXQgaGFuZGxlcyB2aXJ0dWFsIGFkZHJlc3MgbWFuYWdlbWVudC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUsIGFuIGFsZ29yaXRobSwgb3IgYSBzdWJ0bGUgYnVnIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB3aGF0IEkgYW0gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NToyOC40NDIxMDU4NzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XFxuIDg1MTpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG4gODUyOlxcdFxcdH1cXG4gODUzOlxcdFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcbiA4NTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDg1NTpcXHR9XFxuIDg1NjpcXHRcXG4gODU3OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbiA4NTg6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbiA4NTk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3pfZmlsdGVyX3Bhc3NlZClcXG4gODYwOlxcdHtcXG4gODYxOlxcdFxcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUgcHJpdjtcXG4gODYyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiA4NjM6XFx0XFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbiA4NjQ6XFx0XFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5LFxcbiA4NjU6XFx0XFx0fTtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0cHJpdi5zY2hlbWUgPSBzO1xcbiA4Njg6XFx0XFx0cHJpdi5zel9maWx0ZXJfcGFzc2VkID0gc3pfZmlsdGVyX3Bhc3NlZDtcXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0aWYgKCFkYW1vc19vcHNfaGFzX2ZpbHRlcihzKSlcXG4gODcxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0YXJnZXQpO1xcbiA4NzQ6XFx0XFx0aWYgKCFtbSlcXG4gODc1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQsIFxcdTAwMjZ3YWxrX29wcywgXFx1MDAyNnByaXYpO1xcbiA4Nzg6XFx0XFx0bW1wdXQobW0pO1xcbiA4Nzk6XFx0XFx0cmV0dXJuIDA7XFxuIDg4MDpcXHR9XFxuIDg4MTpcXHRcXG4gODgyOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3ZhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIDg4MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiA4ODQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXFxuIDg4NTpcXHR7XFxuIDg4NjpcXHRcXHRpbnQgbWFkdl9hY3Rpb247XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdHN3aXRjaCAoc2NoZW1lLVxcdTAwM2VhY3Rpb24pIHtcXG4gODg5OlxcdFxcdGNhc2UgREFNT1NfV0lMTE5FRUQ6XFxuIDg5MDpcXHRcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfV0lMTE5FRUQ7XFxuIDg5MTpcXHRcXHRcXHRicmVhaztcXG4gODkyOlxcdFxcdGNhc2UgREFNT1NfQ09MRDpcXG4gODkzOlxcdFxcdFxcdG1hZHZfYWN0aW9uID0gTUFEVl9DT0xEO1xcbiA4OTQ6XFx0XFx0XFx0YnJlYWs7XFxuIDg5NTpcXHRcXHRjYXNlIERBTU9TX1BBR0VPVVQ6XFxuIDg5NjpcXHRcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfUEFHRU9VVDtcXG4gODk3OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTg6XFx0XFx0Y2FzZSBEQU1PU19IVUdFUEFHRTpcXG4gODk5OlxcdFxcdFxcdG1hZHZfYWN0aW9uID0gTUFEVl9IVUdFUEFHRTtcXG4gOTAwOlxcdFxcdFxcdGJyZWFrO1xcbiA5MDE6XFx0XFx0Y2FzZSBEQU1PU19OT0hVR0VQQUdFOlxcbiA5MDI6XFx0XFx0XFx0bWFkdl9hY3Rpb24gPSBNQURWX05PSFVHRVBBR0U7XFxuIDkwMzpcXHRcXHRcXHRicmVhaztcXG4gOTA0OlxcdFxcdGNhc2UgREFNT1NfQ09MTEFQU0U6XFxuIDkwNTpcXHRcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MTEFQU0U7XFxuIDkwNjpcXHRcXHRcXHRicmVhaztcXG4gOTA3OlxcdFxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxuIDkwODpcXHRcXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcXG4gOTA5OlxcdFxcdFxcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxuIDkxMDpcXHRcXHRjYXNlIERBTU9TX1NUQVQ6XFxuIDkxMTpcXHRcXHRcXHRyZXR1cm4gZGFtb3NfdmFfc3RhdCh0LCByLCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbiA5MTI6XFx0XFx0ZGVmYXVsdDpcXG4gOTEzOlxcdFxcdFxcdC8qXFxuIDkxNDpcXHRcXHRcXHQgKiBEQU1PUyBhY3Rpb25zIHRoYXQgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5ICd2YWRkcicuXFxuIDkxNTpcXHRcXHRcXHQgKi9cXG4gOTE2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MTc6XFx0XFx0fVxcbiA5MTg6XFx0XFxuIDkxOTpcXHRcXHRyZXR1cm4gZGFtb3NfbWFkdmlzZSh0LCByLCBtYWR2X2FjdGlvbik7XFxuIDkyMDpcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdHN0YXRpYyBpbnQgZGFtb25fdmFfc2NoZW1lX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXFxuIDkyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcbiA5MjY6XFx0XFx0c3dpdGNoIChzY2hlbWUtXFx1MDAzZWFjdGlvbikge1xcbiA5Mjc6XFx0XFx0Y2FzZSBEQU1PU19QQUdFT1VUOlxcbiA5Mjg6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX2NvbGRfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcXG4gOTI5OlxcdFxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjI4LjQ0MjIzNTM2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA0MTE2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG1tL2RhbW9uL3ZhZGRyLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50IHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IHRoZSBgdmFkZHIuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgY29tcG9uZW50IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlcyBhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCB0aGVyZSBhcmUgc29tZSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb25zIG9yIHBlcmhhcHMgc29tZSBub3ZlbCBhcHByb2FjaGVzIHRvIHNhbXBsaW5nIG9yIG1hbmFnaW5nIHZpcnR1YWwgYWRkcmVzcyByZWdpb25zIHdpdGhpbiB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGJlaW5nIGFkZHJlc3NlZCBhbmQgaWYgaXQgaXMgdXNpbmcgc3BlY2lhbCBhbGdvcml0aG1zIHRvIGhhbmRsZSBvciBpZ25vcmUgY2VydGFpbiBtZW1vcnkgcmVnaW9ucy4gSSdtIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlci1sZXZlbCBWTSBjb3JlLCBhbmQgaWYgaXQgaXMgdXNpbmcgYW55IHNwZWNpZmljIGhvb2tzIG9yIGNhbGxiYWNrcy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBjbGV2ZXJuZXNzIGhlcmUsIHNpbmNlIERBTU9OJ3MgY29yZSBmdW5jdGlvbiBpcyB0byBtb25pdG9yIGFuZCBhY3Qgb24gbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgaXQgc2FtcGxlcyB0aGUgbWVtb3J5LiBBbmQgSSBhbSBjdXJpb3VzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGp1c3QgaG9va2luZyBpbnRvIGV4aXN0aW5nIFZNIGluZnJhc3RydWN0dXJlLCBvciBpZiBpdCBpcyBpbXBsZW1lbnRpbmcgaXRzIG93biBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGZvciBtYW5hZ2luZyB0aGUgbW9uaXRvcmVkIHJlZ2lvbnMuIE9rYXksIGxldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTozMS42NDYzNTQ2NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9ob3Rfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcXG4gOTMxOlxcdFxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbiA5MzI6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX2NvbGRfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcXG4gOTMzOlxcdFxcdGRlZmF1bHQ6XFxuIDkzNDpcXHRcXHRcXHRicmVhaztcXG4gOTM1OlxcdFxcdH1cXG4gOTM2OlxcdFxcbiA5Mzc6XFx0XFx0cmV0dXJuIERBTU9TX01BWF9TQ09SRTtcXG4gOTM4OlxcdH1cXG4gOTM5OlxcdFxcbiA5NDA6XFx0c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4gOTQxOlxcdHtcXG4gOTQyOlxcdFxcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcXG4gOTQzOlxcdFxcdFxcdC5pZCA9IERBTU9OX09QU19WQUREUixcXG4gOTQ0OlxcdFxcdFxcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcXG4gOTQ1OlxcdFxcdFxcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXFxuIDk0NjpcXHRcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbiA5NDc6XFx0XFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXFxuIDk0ODpcXHRcXHRcXHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxcbiA5NDk6XFx0XFx0XFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXFxuIDk1MDpcXHRcXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcbiA5NTE6XFx0XFx0XFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl92YV9zY2hlbWVfc2NvcmUsXFxuIDk1MjpcXHRcXHR9O1xcbiA5NTM6XFx0XFx0Lyogb3BzIGZvciBmaXhlZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VzICovXFxuIDk1NDpcXHRcXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHNfZnZhZGRyID0gb3BzO1xcbiA5NTU6XFx0XFx0aW50IGVycjtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0XFx0LyogRG9uJ3Qgc2V0IHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIGZvciB0aGUgZW50aXJlIG1hcHBpbmcgKi9cXG4gOTU4OlxcdFxcdG9wc19mdmFkZHIuaWQgPSBEQU1PTl9PUFNfRlZBRERSO1xcbiA5NTk6XFx0XFx0b3BzX2Z2YWRkci5pbml0ID0gTlVMTDtcXG4gOTYwOlxcdFxcdG9wc19mdmFkZHIudXBkYXRlID0gTlVMTDtcXG4gOTYxOlxcdFxcbiA5NjI6XFx0XFx0ZXJyID0gZGFtb25fcmVnaXN0ZXJfb3BzKFxcdTAwMjZvcHMpO1xcbiA5NjM6XFx0XFx0aWYgKGVycilcXG4gOTY0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk2NTpcXHRcXHRyZXR1cm4gZGFtb25fcmVnaXN0ZXJfb3BzKFxcdTAwMjZvcHNfZnZhZGRyKTtcXG4gOTY2OlxcdH1cXG4gOTY3OlxcdFxcbiA5Njg6XFx0c3Vic3lzX2luaXRjYWxsKGRhbW9uX3ZhX2luaXRjYWxsKTtcXG4gOTY5OlxcdFxcbiA5NzA6XFx0I2luY2x1ZGUgXFxcInRlc3RzL3ZhZGRyLWt1bml0LmhcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjMxLjY0NjQ3NjAwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQzNDY1ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgQWNjZXNzIENoZWNrcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IERBTU9OLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nLCBoYW5kbGVzIGl0cyBhY2Nlc3MgY2hlY2tzLiBNeSBpbml0aWFsIHBsYW4gaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBkYW1vbl92YV9jaGVja19hY2Nlc3Nlc2AgYW5kIGBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NgIGZ1bmN0aW9ucywgdGhleSBzb3VuZCBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBUbyBnZXQgc3RhcnRlZCwgSSdsbCBoZWFkIG92ZXIgdG8gdGhlIGBtbS9kYW1vbi92YWRkci5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAzNDAgdG8gNDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjb250ZXh0IGFuZCBhIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBiZWhpbmQgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmQgYW5kIGZvcndhcmQgdGhyb3VnaCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBhY2Nlc3MgY2hlY2tpbmcgc3lzdGVtIGlzIGRlc2lnbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MzYuNDg5OTQ2NTc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHQjZGVmaW5lIGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkgTlVMTFxcbiAzNDE6XFx0I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4gMzQyOlxcdFxcbiAzNDM6XFx0c3RhdGljIHZvaWQgZGFtb25fdmFfbWtvbGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9ta29sZF9vcHMgPSB7XFxuIDM0NjpcXHRcXHRcXHQucG1kX2VudHJ5ID0gZGFtb25fbWtvbGRfcG1kX2VudHJ5LFxcbiAzNDc6XFx0XFx0XFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxcbiAzNDg6XFx0XFx0fTtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXFx1MDAyNmRhbW9uX21rb2xkX29wcywgTlVMTCk7XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdC8qXFxuIDM1NDpcXHQgKiBGdW5jdGlvbnMgZm9yIHRoZSBhY2Nlc3MgY2hlY2tpbmcgb2YgdGhlIHJlZ2lvbnNcXG4gMzU1OlxcdCAqL1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gMzYwOlxcdHtcXG4gMzYxOlxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cXHUwMDNlYXIuc3RhcnQsIHItXFx1MDAzZWFyLmVuZCk7XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVxcdTAwM2VzYW1wbGluZ19hZGRyKTtcXG4gMzY0OlxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gMzY3OlxcdHtcXG4gMzY4OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuIDM2OTpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gMzcwOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4gMzczOlxcdFxcdFxcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xcbiAzNzQ6XFx0XFx0XFx0aWYgKCFtbSlcXG4gMzc1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzNzY6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXFxuIDM3NzpcXHRcXHRcXHRcXHRfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKG1tLCByLCBjdHgpO1xcbiAzNzg6XFx0XFx0XFx0bW1wdXQobW0pO1xcbiAzNzk6XFx0XFx0fVxcbiAzODA6XFx0fVxcbiAzODE6XFx0XFxuIDM4MjpcXHRzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlIHtcXG4gMzgzOlxcdFxcdGJvb2wgeW91bmc7XFxuIDM4NDpcXHR9O1xcbiAzODU6XFx0XFxuIDM4NjpcXHRzdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDM4NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAzODg6XFx0e1xcbiAzODk6XFx0XFx0cHRlX3QgKnB0ZTtcXG4gMzkwOlxcdFxcdHB0ZV90IHB0ZW50O1xcbiAzOTE6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAzOTI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gMzkzOlxcdFxcdHN0cnVjdCBkYW1vbl95b3VuZ193YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiAzOTQ6XFx0XFxuIDM5NTpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDM5NjpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4gMzk3OlxcdFxcdGlmIChwdGwpIHtcXG4gMzk4OlxcdFxcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxcbiA0MDE6XFx0XFx0XFx0XFx0Z290byBodWdlX291dDtcXG4gNDAyOlxcdFxcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xcbiA0MDM6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4gNDA0OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDQwNTpcXHRcXHRcXHRpZiAocG1kX3lvdW5nKHBtZGUpIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuIDQwNjpcXHRcXHRcXHRcXHRcXHRcXHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh3YWxrLVxcdTAwM2VtbSxcXG4gNDA3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGFkZHIpKVxcbiA0MDg6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNleW91bmcgPSB0cnVlO1xcbiA0MDk6XFx0aHVnZV9vdXQ6XFxuIDQxMDpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0MTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQxMjpcXHRcXHR9XFxuIDQxMzpcXHQjZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVxcdTAwM2VtbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gNDE2OlxcdFxcdGlmICghcHRlKVxcbiA0MTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQxODpcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuIDQxOTpcXHRcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MzYuNDkwMTAyNjM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODU5MTQ3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL2RhbW9uL3ZhZGRyLmNgIGZvciBEQU1PTiBhbmQgWW91bmcgSHVnZVRMQiBJbnRlZ3JhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIG1vcmUgYWJvdXQgdGhlIGludGVyYWN0aW9uIG9mIERBTU9OIHdpdGggWW91bmcgSHVnZVRMQi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9kYW1vbi92YWRkci5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgdmlydHVhbCBhZGRyZXNzIHJhbmdlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3Igc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeWAsIG9yIHBvdGVudGlhbGx5IGEgc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSwgdGhhdCB3aWxsIGhvcGVmdWxseSBpbGx1c3RyYXRlIGhvdyBEQU1PTiBpcyBtYW5hZ2luZyBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIFlvdW5nIEh1Z2VUTEIuIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlcmUgd2lsbCBiZSBhbiBlbnRyeSBwb2ludCBvciBzb21lIHNvcnQgb2YgaGFuZGxlciBmb3IgdGhpcy4gSXQgbWlnaHQgb2ZmZXIgY2x1ZXMgYXMgdG8gaG93IHRvIGVuaGFuY2UgREFNT04uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTozOC45NzYwMjE1MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MjE6XFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XFxuIDQyMjpcXHRcXHRpZiAoIWZvbGlvKVxcbiA0MjM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQyNDpcXHRcXHRpZiAocHRlX3lvdW5nKHB0ZW50KSB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxcbiA0MjU6XFx0XFx0XFx0XFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay1cXHUwMDNlbW0sIGFkZHIpKVxcbiA0MjY6XFx0XFx0XFx0cHJpdi1cXHUwMDNleW91bmcgPSB0cnVlO1xcbiA0Mjc6XFx0b3V0OlxcbiA0Mjg6XFx0XFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XFxuIDQyOTpcXHRcXHRyZXR1cm4gMDtcXG4gNDMwOlxcdH1cXG4gNDMxOlxcdFxcbiA0MzI6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gNDMzOlxcdHN0YXRpYyBpbnQgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiA0MzQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gNDM2OlxcdHtcXG4gNDM3OlxcdFxcdHN0cnVjdCBkYW1vbl95b3VuZ193YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiA0Mzg6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gNDM5OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDQ0MDpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDQ0MTpcXHRcXHRwdGVfdCBlbnRyeTtcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG4gNDQ0OlxcdFxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG4gNDQ1OlxcdFxcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxcbiA0NDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4gNDQ5OlxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdFxcdGlmIChwdGVfeW91bmcoZW50cnkpIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuIDQ1MjpcXHRcXHQgICAgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay1cXHUwMDNlbW0sIGFkZHIpKVxcbiA0NTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNleW91bmcgPSB0cnVlO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRvdXQ6XFxuIDQ1ODpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0NTk6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2MDpcXHR9XFxuIDQ2MTpcXHQjZWxzZVxcbiA0NjI6XFx0I2RlZmluZSBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTExcXG4gNDYzOlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIDQ2NDpcXHRcXG4gNDY1OlxcdHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDQ2NjpcXHR7XFxuIDQ2NzpcXHRcXHRzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlIGFyZyA9IHtcXG4gNDY4OlxcdFxcdFxcdC55b3VuZyA9IGZhbHNlLFxcbiA0Njk6XFx0XFx0fTtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX3lvdW5nX29wcyA9IHtcXG4gNDcyOlxcdFxcdFxcdC5wbWRfZW50cnkgPSBkYW1vbl95b3VuZ19wbWRfZW50cnksXFxuIDQ3MzpcXHRcXHRcXHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnksXFxuIDQ3NDpcXHRcXHR9O1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBcXHUwMDI2ZGFtb25feW91bmdfb3BzLCBcXHUwMDI2YXJnKTtcXG4gNDc3OlxcdFxcdHJldHVybiBhcmcueW91bmc7XFxuIDQ3ODpcXHR9XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdC8qXFxuIDQ4MTpcXHQgKiBDaGVjayB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGFjY2Vzc2VkIGFmdGVyIHRoZSBsYXN0IHByZXBhcmF0aW9uXFxuIDQ4MjpcXHQgKlxcbiA0ODM6XFx0ICogbW1cXHQnbW1fc3RydWN0JyBmb3IgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBzcGFjZVxcbiA0ODQ6XFx0ICogclxcdHRoZSByZWdpb24gdG8gYmUgY2hlY2tlZFxcbiA0ODU6XFx0ICovXFxuIDQ4NjpcXHRzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gNDg3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuIDQ4ODpcXHR7XFxuIDQ4OTpcXHRcXHRib29sIGFjY2Vzc2VkO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAoIW1tKSB7XFxuIDQ5MjpcXHRcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcXG4gNDkzOlxcdFxcdFxcdHJldHVybjtcXG4gNDk0OlxcdFxcdH1cXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0YWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkcik7XFxuIDQ5NzpcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGFjY2Vzc2VkKTtcXG4gNDk4OlxcdH1cXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTozOC45NzYyMTkyMDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMyNzQ1MzYxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBIdWdlIFBhZ2UgUFRFIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBEQU1PTiBoYW5kbGVzIG1ha2luZyBodWdlIHBhZ2UgUFRFcyBcIm9sZFwiLiAgQmVmb3JlLCB0aGUgY29kZSBkaXJlY3RseSBhY2Nlc3NlZCB0aGUgUFRFLCBjaGVja2VkIHRoZSB5b3VuZyBiaXQsIGFuZCB0aGVuIG1vZGlmaWVkIGl0LiBOb3csIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uLCBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYC4gVGhlIGNvcmUgbG9naWMgaXMgbm93IGVuY2Fwc3VsYXRlZCB3aXRoaW4gdGhpcyBuZXcgZnVuY3Rpb24sIHVzaW5nIGBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcmAgYmVmb3JlIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyByZWZhY3RvcmluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgc3BlY2lmaWNhbGx5IFwiQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksXCIgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnkuIFdlJ3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBhbmQgbWFraW5nIHRoZW0gXCJvbGQuXCIgVGhhdCdzIGRlZmluaXRlbHkgd2l0aGluIHRoZSBzY29wZS4gIEl0IHNlZW1zIHRvIGJlIGZpeGluZyBvciBjaGFuZ2luZyBob3cgaHVnZXRsYiBQVEUgbWFuaXB1bGF0aW9uIG9jY3VycyB3aXRoaW4gREFNT04uXG5cbkkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiwgYW5kIG1vZGlmaWVzIGBkYW1vbl9odWdldGxiX21rb2xkYC4gIFdlIGFsc28gaGF2ZSBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9ta29sZGAsIGFuZCBgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzYCBpbiB0aGlzIGZpbGUuIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXkgYWxsIGFwcGVhciB0byBiZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgdmFkZHIuY2AsIHdoaWNoIG1ha2VzIHRoZW0gc3BlY2lmaWMgdG8gdGhpcyBEQU1PTiBtb2R1bGUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBpZiBpdCBoYXMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYyNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTo1Mi4yNTA3NjEyMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTk2NzE0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTM2LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Mi1cXG5hcmNoL3NoL21tL0tjb25maWc6MTQzOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ1LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0OS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE1MS1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTEtXFxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTMtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTo1NC40NTA0Mzg5ODNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY3OTU1NzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IENvbmZpcm1lZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBjaGVjayBvZiBgZnMvS2NvbmZpZ2AgY29uZmlybWVkIGBIVUdFVExCRlNgIGlzIHRoZSBrZXksIGFuZCBpdCdzIHRpZWQgdG8gYEhVR0VUTEJfUEFHRWAuIFNvLCBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAgYXJlIHRoZSBmb3VuZGF0aW9uLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBpbiBwbGF5LlxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIHVzZXJzcGFjZSBjb250cm9sIGlzIGVuYWJsZWQuIGBEQU1PTl9TWVNGU2AgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoYXQsIGFuZCBpbmRlZWQsIGl0IGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIHRoYXQgU3l6a2FsbGVyIHdpbGwgdXNlLiBOb3csIEknbGwgZ28gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIGFic29sdXRlbHkuIFRoaXMgaXMgY3JpdGljYWwuXG4qICAgYFJlYXNvbmluZ2A6IFllcywgdGhlIG1vZGlmaWNhdGlvbiB0byBEQU1PTidzIGh1Z2V0bGIgcGFnZSBhY2Nlc3MgbW9uaXRvcmluZyBpbiBgbW0vZGFtb24vdmFkZHIuY2Agd2l0aCB0aG9zZSBmdW5jdGlvbnMgaXMgYSBiaWcgZGVhbC4gSXQncyB0b3VjaGluZyB0aGUgUFRFIGhhbmRsaW5nIGFuZCBhbHRlcmluZyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIHNhdGlzZmllZC5cbiogICBgRm9jdXNTeW1ib2xzYDogSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgc3ltYm9scyAoYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfbWtvbGRgLCBhbmQgYGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrc2ApIGFyZSBleGFjdGx5IGFzIHNwZWNpZmllZC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEkgcmUtdmFsaWRhdGVkIHRoYXQgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1NZU0ZTYCwgYEhVR0VUTEJfUEFHRWAsIGFuZCBgSFVHRVRMQkZTYCBhcmUgY29ycmVjdCBhbmQgcmVhZHkuXG5cbkV2ZXJ5dGhpbmcgaXMgbWV0aWN1bG91c2x5IGNoZWNrZWQgYW5kIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4ODUsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjAxLjEyOTk5OTEwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQyOTg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX21rb2xkXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX21rb2xkXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjAxLjI0MjQ0MzIyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NzY1MjgxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NjowMS4yNDMyMzU0NjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTY3NTczMDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgcGFnZSBhZ2luZyBpbiBEQU1PTiAobW0vZGFtb24vdmFkZHIuYykgYnkgaW50cm9kdWNpbmcgdGhlIGhlbHBlciBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQoKSB3aGljaCBwcm9wZXJseSBjbGVhcnMgdGhlIFBURSB2aWEgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoKSBiZWZvcmUgbWFya2luZyBpdCBvbGQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGUuZy4gZW50cnksIHJlZmVyZW5jZWQsIHBzaXplKSBhcmUgc2NhbGFyL1BURSB0eXBlcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBwYWdlLXRhYmxlIGhhbmRsaW5nIGJ1Z3Mgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0YjQ4Nzk2Mzk3ZDA0M2U4MzI3YzU2YzhjMjRmZDMzYzcxNDRiODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU1OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtMjgzLDIyICsyODMsMjkgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKmVudHJ5KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1xuK1x0aWYgKCFwdGVfeW91bmcoKmVudHJ5KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xuK1x0KmVudHJ5ID0gcHRlX21rb2xkKCplbnRyeSk7XG4rXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4gXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbi1cdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFxuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiBcbi1cdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4tXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuLVx0XHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XG4tXHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuLVx0fVxuLVxuK1x0cmVmZXJlbmNlZCA9IGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGUsIG1tLCB2bWEsIGFkZHIsIFx1MDAyNmVudHJ5KTtcbiBcdGlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsXG4gXHRcdFx0XHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcbiBcdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NjowMS4yNDMyMzY3NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg5OTM3NDc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIGl0LiBUaGUgZ29hbCBpcyB0byBiZSBlZmZpY2llbnQgd2l0aCBvdXIgcmVzb3VyY2VzIGFuZCBub3QgdHJpZ2dlciB1bm5lY2Vzc2FyeSBmdXp6aW5nIHJ1bnMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSBgZGlmZmAgaXRzZWxmLiBXZSdyZSBsb29raW5nIGF0IGBtbS9kYW1vbi92YWRkci5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBoYW5kbGluZyBodWdlIHBhZ2VzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG1hcmtpbmcgcGFnZXMgYXMgXCJvbGRcIi5cblxuVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCB3YXM6XG5gYGBjXG5zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxue1xuXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcblx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xuXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcblx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG5cblx0Zm9saW9fZ2V0KGZvbGlvKTtcblxuXHRpZiAocHRlX3lvdW5nKGVudHJ5KSkge1xuXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcblx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnksIHBzaXplKTtcblx0fVxuXG5gYGBcblxuVGhpcyBoYXMgYmVlbiBtb2RpZmllZCB0byBub3cgcmVhZDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbnN0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcblx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG57XG5cdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuXG5cdGlmICghcHRlX3lvdW5nKCplbnRyeSkpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG5cdCplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpO1xuXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG5zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxue1xuXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcblx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xuXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcblx0Zm9saW9fZ2V0KGZvbGlvKTtcblxuXHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXHUwMDI2ZW50cnkpO1xuXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuXHRcdFx0XHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcblx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbmBgYFxuXG5UaGUgcGF0Y2ggbm93IGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24sIGBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRgLCB3aGljaCBoYW5kbGVzIHRoZSBcImdldCBhbmQgY2xlYXJcIiBvZiB0aGUgUFRFIGFuZCB0aGUgc2V0dGluZyBvZiBpdCB0byBcIm9sZFwiLiBUaGVyZSBpcyBhbHNvIHRoZSB1c2Ugb2YgYSBgZm9saW9gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgY2hhbmdlICppdHNlbGYqIGRvZXNuJ3QgbG9vayBsaWtlIGFuIG9idmlvdXMgS01TQU4gdHJpZ2dlci4gV2UgYXJlIGVzc2VudGlhbGx5IG1vZGlmeWluZyBwYWdlIHRhYmxlIGVudHJpZXMgdG8gcmVmbGVjdCBhY2Nlc3MsIHdoaWNoIGlzIGEgY29tbW9uIG9wZXJhdGlvbi4gSG93ZXZlciwgdGhlIHVzZSBvZiBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGlzIHdoZXJlIG15IGF0dGVudGlvbiBpcy4gU2luY2UgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyYCBtaWdodCBoYXZlIHNvbWUgc3VidGxlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgbG9ja2luZyBpbnZvbHZlZCwgd2Ugd2lsbCBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGxlbWVudGF0aW9uLiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGlzIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBjYWxsZWQgZnJvbS5cblxuVG8gZ2FpbiBtb3JlIGNvbnRleHQsIEknbGwgbm93IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIGBtbS9kYW1vbi92YWRkci5jYCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgZmlsZXMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGtleSBpcyB0byBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgbWVtb3J5IGludGVyYWN0aW9ucyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgY2F0Y2hpbmcuIElmIHRoZSBjb250ZXh0IGxvb2tzIGJlbmlnbiwgd2UgY2FuIHByb2JhYmx5IGhvbGQgb2ZmIG9uIGRlZGljYXRlZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTY6MDcuMTQyNjE1MTYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIyMjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9odWdldGxiX21rb2xkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTI4Nj1zdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTI5OC1cXG5tbS9kYW1vbi92YWRkci5jOjI5OTpzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2RhbW9uL3ZhZGRyLmMtMzAwLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTMyMD1zdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzMyLVxcbm1tL2RhbW9uL3ZhZGRyLmM6MzMzOlxcdGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2VtbSwgd2Fsay1cXHUwMDNldm1hLCBhZGRyKTtcXG5tbS9kYW1vbi92YWRkci5jLTMzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTY6MDcuMTg3ODQ0MjMyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODAzNTgwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGluIGBtbS9kYW1vbi92YWRkci5jYCoqXG5cbk9rYXksIGxldCdzIHN0YXJ0IGRpc3NlY3RpbmcgdGhpcyBgZGFtb25faHVnZXRsYl9ta29sZGAgZnVuY3Rpb24sIGFsb25nIHdpdGggaXRzIGNvbnRleHQgd2l0aGluIGBtbS9kYW1vbi92YWRkci5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiaHVnZXRsYlwiIOKAkyB0aGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLCBhbmQgdGhhdCdzIGdvaW5nIHRvIGluZmx1ZW5jZSBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGhvdyBEQU1PTiBpbnRlcmFjdHMuIFRoZSBcIm1rb2xkXCIgcGFydCBoaW50cyBhdCBtYXJraW5nIHBhZ2VzIGFzIFwib2xkLFwiIHdoaWNoLCBpbiB0aGUgREFNT04gY29udGV4dCwgbGlrZWx5IGluZGljYXRlcyBhIHRyYW5zaXRpb24gb3IgcmUtZXZhbHVhdGlvbiBpbiB1c2FnZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCB0aGUgY29uc2VxdWVuY2VzIG9mIG1hcmtpbmcgdGhlc2UgaHVnZXRsYiBwYWdlcyBhcyBcIm9sZFwiIGFyZS5cblxuSSBleHBlY3QgdG8gc2VlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIHRhYmxlcywgcGVyaGFwcyBtYW5pcHVsYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGh1Z2UgcGFnZSBtYXBwaW5nLCBhbmQgcG9zc2libHkgc29tZSBpbnZvbHZlbWVudCB3aXRoIERBTU9OJ3MgbW9uaXRvcmluZyBzdHJ1Y3R1cmVzLiBJIGFudGljaXBhdGUgd2UnbGwgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBodWdldGxiZnMgYW5kIERBTU9OJ3Mgb3BlcmF0aW9ucyBjb25jdXJyZW50bHkuIFRoaXMgc2VjdGlvbidzIHByb2JhYmx5IGdvaW5nIHRvIHByb3ZpZGUgZGV0YWlscyBhYm91dCBob3cgREFNT04gc3BlY2lmaWNhbGx5IGhhbmRsZXMgaHVnZSBwYWdlcyB3aGljaCBoYXMgYWx3YXlzIGJlZW4gYSBrZXkgYXJlYSBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgaXQuIExldCdzIHN0YXJ0IHBhcnNpbmcgdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTY6MDkuOTY4MjA0OTI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdG91dDpcXG4gMjgxOlxcdFxcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xcbiAyODI6XFx0XFx0cmV0dXJuIDA7XFxuIDI4MzpcXHR9XFxuIDI4NDpcXHRcXG4gMjg1OlxcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIDI4NjpcXHRzdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIDI4NzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHR1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0aWYgKCFwdGVfeW91bmcoKmVudHJ5KSlcXG4gMjkyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjkzOlxcdFxcdCplbnRyeSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGUsIHBzaXplKTtcXG4gMjk0OlxcdFxcdCplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpO1xcbiAyOTU6XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsICplbnRyeSwgcHNpemUpO1xcbiAyOTY6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI5NzpcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdHN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIDMwMDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiAzMDE6XFx0e1xcbiAzMDI6XFx0XFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XFxuIDMwMzpcXHRcXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XFxuIDMwNDpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0cmVmZXJlbmNlZCA9IGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGUsIG1tLCB2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSk7XFxuIDMwOTpcXHRcXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxcbiAzMTA6XFx0XFx0XFx0XFx0XFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXFxuIDMxMTpcXHRcXHRcXHRyZWZlcmVuY2VkID0gdHJ1ZTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0aWYgKHJlZmVyZW5jZWQpXFxuIDMxNDpcXHRcXHRcXHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XFxuIDMxNzpcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAzMTg6XFx0fVxcbiAzMTk6XFx0XFxuIDMyMDpcXHRzdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVxcdTAwM2V2bWEpO1xcbiAzMjU6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAzMjY6XFx0XFx0cHRlX3QgZW50cnk7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cXHUwMDNlbW0sIHB0ZSk7XFxuIDMyOTpcXHRcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuIDMzMDpcXHRcXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcXG4gMzMxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRkYW1vbl9odWdldGxiX21rb2xkKHB0ZSwgd2Fsay1cXHUwMDNlbW0sIHdhbGstXFx1MDAzZXZtYSwgYWRkcik7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdG91dDpcXG4gMzM2OlxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDMzNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzM4OlxcdH1cXG4gMzM5OlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjA5Ljk2ODI5OTE4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTUwNjQ0NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IERBTU9OIGh1Z2V0bGIgUFRFIEFnaW5nIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGBkYW1vbl9odWdldGxiX21rb2xkKClgIHBhdGNoIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIEtNU0FOIGNvbmNlcm4sIGdpdmVuIHRoZSB3b3JrIGFyb3VuZCBQVEVzLiBUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hlY2sgaWYgdGhlIFBURSBpcyB5b3VuZywgbWFyayBpdCBvbGQgaWYgaXQgaXMsIGFuZCB1cGRhdGUuIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoYXQgaW50byBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKClgIHdpdGggYSBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoKWAgY2FsbC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byB0aGlzIGNoYW5nZS5cblxuRmlyc3QsIEkgbWV0aWN1bG91c2x5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSB0byB2ZXJpZnkgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIGBlbnRyeWAgaXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2l0aCBgaHVnZV9wdGVwX2dldCgpYCwgYW5kIEkgc2VlIGl0IHBhc3NlZCBhcyBhIHBvaW50ZXIuIFRoZSBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKClgIGZ1bmN0aW9uIGl0c2VsZiBjaGVja3MgYHB0ZV95b3VuZygpYCAqYmVmb3JlKiBhbnkgbW9kaWZpY2F0aW9uLCBzbyB3ZSdyZSBzYWZlIHRoZXJlLiBJdCB0aGVuIHBlcmZvcm1zIHRoZSBjbGVhciBhbmQgc2V0IG9wZXJhdGlvbnMsIGJ1dCBpbXBvcnRhbnRseSwgdGhlIHZhbHVlcyB1c2VkIGFyZSAqYWxsKiBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBubyBjb21wbGV4IHN0cnVjdHVyZXMsIG5vIGFsbG9jYXRpb25zLCBhbmQgbm8gY29waWVzIHRvIHVzZXJzcGFjZSDigJMgYSBiaWcgcmVsaWVmLlxuXG5JIHRoZW4gd2VudCB0aHJvdWdoIHRoZSBjb21tb24gaXNzdWVzIHdpdGggdGhpcyBraW5kIG9mIHdvcmsuIFRoZSB2YXJpYWJsZXMgYXJlIGJhc2ljIHR5cGVzIGFuZCBmdWxseSBpbml0aWFsaXplZC4gVGhpcyBpc24ndCB3aGVyZSBLTVNBTiBzaGluZXMuIFRoaXMga2luZCBvZiBwYXRjaCBpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYnVncywgd2hpY2ggS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgTU0gYXNzZXJ0aW9ucyBzaG91bGQgY2F0Y2guIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZCBoZXJlLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHRoYXQgZGVlcCBkaXZlLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZSBjcml0ZXJpYSBmb3IgS01TQU4gYXBwbGljYWJpbGl0eSDigJMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIOKAkyBhcmUgYWxsICpub3QqIHByZXNlbnQuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGNoYW5nZSBwb3NlcyBubyByaXNrIG9mIHRoZSBwcm9ibGVtcyBLTVNBTiBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzLiBUaGUgb2xkIGBkYW1vbl9odWdldGxiX21rb2xkYCBmdW5jdGlvbiBoYWQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGFzIHdlbGwuIFRoZSByZWZhY3RvcmluZyBpbXByb3ZlcyB0aGF0IGJ5IHVzaW5nIG1vcmUgcmVsaWFibGUgQVBJcyBpbiB0aGUgbW0gc3Vic3lzdGVtLlxuXG5TbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQxLCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjE2LjkxODk0NjE4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgcGFnZSBhZ2luZyBpbiBEQU1PTiAobW0vZGFtb24vdmFkZHIuYykgYnkgaW50cm9kdWNpbmcgdGhlIGhlbHBlciBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQoKSB3aGljaCBwcm9wZXJseSBjbGVhcnMgdGhlIFBURSB2aWEgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoKSBiZWZvcmUgbWFya2luZyBpdCBvbGQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGUuZy4gZW50cnksIHJlZmVyZW5jZWQsIHBzaXplKSBhcmUgc2NhbGFyL1BURSB0eXBlcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBwYWdlLXRhYmxlIGhhbmRsaW5nIGJ1Z3Mgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHBhZ2UgYWdpbmcgaW4gREFNT04gKG1tL2RhbW9uL3ZhZGRyLmMpIGJ5IGludHJvZHVjaW5nIHRoZSBoZWxwZXIgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKCkgd2hpY2ggcHJvcGVybHkgY2xlYXJzIHRoZSBQVEUgdmlhIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKCkgYmVmb3JlIG1hcmtpbmcgaXQgb2xkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChlLmcuIGVudHJ5LCByZWZlcmVuY2VkLCBwc2l6ZSkgYXJlIHNjYWxhci9QVEUgdHlwZXMgZnVsbHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcGFnZS10YWJsZSBoYW5kbGluZyBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 02:17:12 +0000 UTC FinishedAt: 2026-09-07 02:56:17 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLB_PAGE", "HUGETLBFS" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLB_PAGE", "HUGETLBFS" ], "series_id": "5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_hugetlb_ptep_mkold", "damon_hugetlb_mkold", "damon_mkold_hugetlb_entry", "damon_va_mkold", "damon_va_prepare_access_checks" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHBhZ2UgYWdpbmcgaW4gREFNT04gKG1tL2RhbW9uL3ZhZGRyLmMpIGJ5IGludHJvZHVjaW5nIHRoZSBoZWxwZXIgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKCkgd2hpY2ggcHJvcGVybHkgY2xlYXJzIHRoZSBQVEUgdmlhIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKCkgYmVmb3JlIG1hcmtpbmcgaXQgb2xkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChlLmcuIGVudHJ5LCByZWZlcmVuY2VkLCBwc2l6ZSkgYXJlIHNjYWxhci9QVEUgdHlwZXMgZnVsbHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcGFnZS10YWJsZSBoYW5kbGluZyBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgZm9yIGh1Z2V0bGIgZW50cmllcyBpbiBtbS9kYW1vbi92YWRkci5jIGJ5IGV4dHJhY3RpbmcgYW5kIHVwZGF0aW5nIHRoZSBodWdldGxiIFBURSBjbGVhcmluZyBhbmQgYWdpbmcgbG9naWMgKHVzaW5nIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMgaW4gaHVnZXRsYiBQVEUgbWFuaXB1bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTRiNDg3OTYzOTdkMDQzZTgzMjdjNTZjOGMyNGZkMzNjNzE0NGI4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTU6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtMjgzLDIyICYjNDM7MjgzLDI5IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4mIzQzO1xuJiM0MztcdGlmICghcHRlX3lvdW5nKCplbnRyeSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xuJiM0MztcdCplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpO1xuJiM0MztcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiBcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXG4gXHRmb2xpb19nZXQoZm9saW8pO1xuIFxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4mIzQzO1x0cmVmZXJlbmNlZCA9IGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGUsIG1tLCB2bWEsIGFkZHIsIFx1MDAyNmVudHJ5KTtcbiBcdGlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsXG4gXHRcdFx0XHQgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4gXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGI0ODc5NjM5N2QwNDNlODMyN2M1NmM4YzI0ZmQzM2M3MTQ0YjgwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMjo1NTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtMjgzLDIyICYjNDM7MjgzLDI5IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIH0KIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfeW91bmcoKmVudHJ5KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJKmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpOwomIzQzOwkqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTsKJiM0MzsJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsICplbnRyeSwgcHNpemUpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7CiAJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCiAJZm9saW9fZ2V0KGZvbGlvKTsKIAotCWlmIChwdGVfeW91bmcoZW50cnkpKSB7Ci0JCXJlZmVyZW5jZWQgPSB0cnVlOwotCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7Ci0JCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwotCX0KLQomIzQzOwlyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgJmFtcDtlbnRyeSk7CiAJaWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkciwKIAkJCQkgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpCiAJCXJlZmVyZW5jZWQgPSB0cnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ4CgkJCQkJCQlvdXRwdXQ6IDYzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyB0aGUgREFNT04gdmFkZHIuYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHJldmlldyByZXF1ZXN0LiBUaGUgdGFyZ2V0IGZpbGUgaXMgYG1tL2RhbW9uL3ZhZGRyLmNgLCB3aGljaCBpcyByaWdodCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHkgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpLCB3aGljaCBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgZ2V0IGEgZ29vZCBncmFzcCBvZiB0aGUgY29udGV4dC4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBkaWZmIG9wZW4gYW5kIHJlYWxseSBleGFtaW5lIHdoYXQgbW9kaWZpY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgZmlsZS4gVGhlbiBJIG5lZWQgdG8gc2VlIHRoZSByZWxhdGVkIGZpbGVzLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHF1aWNrbHkgcmVtaW5kIG15c2VsZiBvZiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSYjMzk7bGwgcHJvYmFibHkgcHVsbCB1cCBgbW0vZGFtb24vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRob3NlIHF1aWNrbHkgb3Blbi4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NTpcdFx0aWYgKCFwdGUpXG4gMjc2Olx0XHRcdHJldHVybiAwO1xuIDI3NzpcdFx0aWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGUpKSlcbiAyNzg6XHRcdFx0Z290byBvdXQ7XG4gMjc5Olx0XHRkYW1vbl9wdGVwX21rb2xkKHB0ZSwgd2Fsay1cdTAwM2V2bWEsIGFkZHIpO1xuIDI4MDpcdG91dDpcbiAyODE6XHRcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuIDI4MjpcdFx0cmV0dXJuIDA7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gMjg2Olx0c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDI4NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxuIDI5MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjkzOlx0XHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG4gMjk0Olx0XHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcbiAyOTU6XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbiAyOTY6XHRcdHJldHVybiB0cnVlO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiAyOTk6XHRzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDMwMDpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiAzMDE6XHR7XG4gMzAyOlx0XHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiAzMDM6XHRcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiAzMDQ6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuIDMwNTpcdFxuIDMwNjpcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiAzMDc6XHRcbiAzMDg6XHRcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcdTAwMjZlbnRyeSk7XG4gMzA5Olx0XHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuIDMxMDpcdFx0XHRcdFx0ICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuIDMxMTpcdFx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiAzMTI6XHRcbiAzMTM6XHRcdGlmIChyZWZlcmVuY2VkKVxuIDMxNDpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuIDMxNTpcdFxuIDMxNjpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuIDMxNzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAzMTg6XHR9XG4gMzE5Olx0XG4gMzIwOlx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gMzIxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gMzIyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDMyMzpcdHtcbiAzMjQ6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDk1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbi0tXG5tbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xubW0vZGFtb24vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbm1tL2RhbW9uL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbm1tL2RhbW9uL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xubW0vZGFtb24vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOT1zdGF0aWMgREVGSU5FX01VVEVYKGRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYzozMDpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcbm1tL2RhbW9uL2NvcmUuYy0zMS1cbm1tL2RhbW9uL2NvcmUuYz0zMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9kYW1vbi9jb3JlLmMtMzMtXG5tbS9kYW1vbi9jb3JlLmM6MzQ6LyogU2hvdWxkIGJlIGNhbGxlZCB1bmRlciBkYW1vbl9vcHNfbG9jayB3aXRoIGlkIHNtYWxsZXIgdGhhbiBOUl9EQU1PTl9PUFMgKi9cbm1tL2RhbW9uL2NvcmUuYy0zNS1zdGF0aWMgYm9vbCBfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01My1cbm1tL2RhbW9uL2NvcmUuYzo1NDpcdGlmIChpZCBcdTAwM2U9IE5SX0RBTU9OX09QUylcbm1tL2RhbW9uL2NvcmUuYy01NS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy02Mi0vKipcbm1tL2RhbW9uL2NvcmUuYzo2MzogKiBkYW1vbl9yZWdpc3Rlcl9vcHMoKSAtIFJlZ2lzdGVyIGEgbW9uaXRvcmluZyBvcGVyYXRpb25zIHNldCB0byBEQU1PTi5cbm1tL2RhbW9uL2NvcmUuYy02NC0gKiBAb3BzOlx0bW9uaXRvcmluZyBvcGVyYXRpb25zIHNldCB0byByZWdpc3Rlci5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzE9aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NC1cbm1tL2RhbW9uL2NvcmUuYzo3NTpcdGlmIChvcHMtXHUwMDNlaWQgXHUwMDNlPSBOUl9EQU1PTl9PUFMpXG5tbS9kYW1vbi9jb3JlLmMtNzYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz05OD1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDEtXG5tbS9kYW1vbi9jb3JlLmM6MTAyOlx0aWYgKGlkIFx1MDAzZT0gTlJfREFNT05fT1BTKVxubW0vZGFtb24vY29yZS5jLTEwMy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vY29yZS5jPTMwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9tdnN1bSh1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTMxMy0gKiBAcjpcdFx0UmVnaW9uIHRvIGdldCB0aGUgYWNjZXNzIGZyZXF1ZW5jeSBvZi5cbm1tL2RhbW9uL2NvcmUuYzozMTQ6ICogQGN0eDpcdERBTU9OIGNvbnRleHQgb2YgQHIuXG5tbS9kYW1vbi9jb3JlLmMtMzE1LSAqXG4tLVxubW0vZGFtb24vY29yZS5jPTM0OT11bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzcyLVxubW0vZGFtb24vY29yZS5jOjM3MzojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jLTM3NC1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMS1cdHJlZ2lvbi1cdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDAyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYy00MDMtXHRcdHJlZ2lvbi1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9pbnNlcnRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTQzMC1cbm1tL2RhbW9uL2NvcmUuYzo0MzE6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYy00MzItc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzQ1PXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG4tLVxubW0vZGFtb24vY29yZS5jLTc2MS1cdCAqIG5leHRfYXBwbHlfc2lzIHdpbGwgYmUgc2V0IHdoZW4ga2RhbW9uZCBzdGFydHMuICBXaGlsZSBrZGFtb25kIGlzXG5tbS9kYW1vbi9jb3JlLmM6NzYyOlx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbm1tL2RhbW9uL2NvcmUuYy03NjMtXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTAxPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTMwLVx0Y3R4LVx1MDAzZWFkZHJfdW5pdCA9IDE7XG5tbS9kYW1vbi9jb3JlLmM6OTMxOlx0Y3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBEQU1PTl9NSU5fUkVHSU9OX1NaO1xubW0vZGFtb24vY29yZS5jLTkzMi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA4Mz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXG5tbS9kYW1vbi9jb3JlLmM6MTEwODogKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcbm1tL2RhbW9uL2NvcmUuYy0xMTA5LSAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIxNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjM0LSAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xubW0vZGFtb24vY29yZS5jOjEyMzU6ICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXG5tbS9kYW1vbi9jb3JlLmMtMTIzNi0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDI3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MzctXHRcdG5yX3Byb2JlcyYjNDM7JiM0Mzs7XG5tbS9kYW1vbi9jb3JlLmM6MTQzODpcdGlmIChucl9wcm9iZXMgXHUwMDNlIERBTU9OX01BWF9QUk9CRVMpXG5tbS9kYW1vbi9jb3JlLmMtMTQzOS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzkxPXN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzk3LVx0c3dpdGNoIChkc3QtXHUwMDNldHlwZSkge1xubW0vZGFtb24vY29yZS5jOjE3OTg6XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vY29yZS5jLTE3OTktXHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgwNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODI4LVx0XHRzd2l0Y2ggKHNyY19maWx0ZXItXHUwMDNldHlwZSkge1xubW0vZGFtb24vY29yZS5jOjE4Mjk6XHRcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmMtMTgzMC1cdFx0XHRuZXdfZmlsdGVyLVx1MDAzZW1lbWNnX2lkID0gc3JjX2ZpbHRlci1cdTAwM2VtZW1jZ19pZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg4OS1cdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cbm1tL2RhbW9uL2NvcmUuYzoxODkwOlx0aWYgKHNyYy1cdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTg5MS1cdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XG4tLVxubW0vZGFtb24vY29yZS5jPTE5Mzc9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5NTMtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTk1NDogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbm1tL2RhbW9uL2NvcmUuYzoxOTU1OiAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9OIGNvbnRleHQuXG5tbS9kYW1vbi9jb3JlLmM6MTk1NjogKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTU3LSAqXG4tLVxubW0vZGFtb24vY29yZS5jPTIxNTE9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC0vKipcbm1tL2RhbW9uL2NvcmUuYzoyMTYxOiAqIGRhbW9uX2lzX3J1bm5pbmcoKSAtIFJldHVybnMgaWYgYSBnaXZlbiBEQU1PTiBjb250ZXh0IGlzIHJ1bm5pbmcuXG5tbS9kYW1vbi9jb3JlLmM6MjE2MjogKiBAY3R4Olx0VGhlIERBTU9OIGNvbnRleHQgdG8gc2VlIGlmIHJ1bm5pbmcuXG5tbS9kYW1vbi9jb3JlLmMtMjE2My0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTY2PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNzYtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjE3NzogKiBkYW1vbl9rZGFtb25kX3BpZCgpIC0gUmV0dXJuIHBpZCBvZiBhIGdpdmVuIERBTU9OIGNvbnRleHQmIzM5O3Mgd29ya2VyIHRocmVhZC5cbm1tL2RhbW9uL2NvcmUuYzoyMTc4OiAqIEBjdHg6XHRUaGUgREFNT04gY29udGV4dCBvZiB0aGUgcXVlc3Rpb24uXG5tbS9kYW1vbi9jb3JlLmMtMjE3OS0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTgyPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxOTMtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjE5NDogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cbm1tL2RhbW9uL2NvcmUuYzoyMTk1OiAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cbm1tL2RhbW9uL2NvcmUuYy0yMTk2LSAqIEBjb250cm9sOlx0Q29udHJvbCB2YXJpYWJsZSBvZiB0aGUgY2FsbCByZXF1ZXN0LlxubW0vZGFtb24vY29yZS5jLTIxOTctICpcbm1tL2RhbW9uL2NvcmUuYzoyMTk4OiAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiB3aXRoIGFuXG5tbS9kYW1vbi9jb3JlLmMtMjE5OS0gKiBhcmd1bWVudCBkYXRhIHRoYXQgcmVzcGVjdGl2ZWx5IHBhc3NlZCB2aWEgXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVx1MDAzZWZuIGFuZFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjE0PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI0NS0gKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxubW0vZGFtb24vY29yZS5jOjIyNDY6ICogQGN0eDpcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cbm1tL2RhbW9uL2NvcmUuYy0yMjQ3LSAqIEBjb250cm9sOlx0Q29udHJvbCB2YXJpYWJsZSBvZiB0aGUgd2FsayByZXF1ZXN0LlxubW0vZGFtb24vY29yZS5jLTIyNDgtICpcbm1tL2RhbW9uL2NvcmUuYzoyMjQ5OiAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCByZWdpb25cbm1tL2RhbW9uL2NvcmUuYy0yMjUwLSAqIHRoYXQgdGhlIGtkYW1vbmQgd2lsbCBhcHBseSBEQU1PUyBhY3Rpb24gdG8sIGFuZCB3YWl0IHVudGlsIHRoZSBrZGFtb25kXG4tLVxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTUtXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MjMxNjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jLTIzMTctXHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXHUwMDNlcHJvYmVfaGl0c1tpXTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQzNC0gKiByZWdpb25zLiAgVG8gYXZvaWQgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gb25seSBhbHJlYWR5IGFwcGxpZWRcbm1tL2RhbW9uL2NvcmUuYzoyNDM1OiAqIHJlZ2lvbnMsIERBTU9OIHNraXBzIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIHRoZSByZWdpb25zIHRoYXQgY2hhcmdlZFxubW0vZGFtb24vY29yZS5jLTI0MzYtICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXG4tLVxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2OTAtXHQvKlxubW0vZGFtb24vY29yZS5jOjI2OTE6XHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcbm1tL2RhbW9uL2NvcmUuYy0yNjkyLVx0ICogaW1wbGllcyB3aXRoICYjMzk7bnJfY29udGV4dHMmIzM5OyBmaWxlLiAgTmV2ZXJ0aGVsZXNzLCBvbmx5IHNpbmdsZSBjb250ZXh0XG4tLVxubW0vZGFtb24vY29yZS5jPTI5NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjk4OC1cbm1tL2RhbW9uL2NvcmUuYzoyOTg5OiNpZmRlZiBDT05GSUdfREFNT05fUEFERFJcbm1tL2RhbW9uL2NvcmUuYy0yOTkwLS8qXG5tbS9kYW1vbi9jb3JlLmMtMjk5MS0gKiBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKCkgLSBDYWxjdWxhdGUgcmF3IGVsaWdpYmxlIGJ5dGVzIHBlciBub2RlLlxubW0vZGFtb24vY29yZS5jOjI5OTI6ICogQGM6XHRcdFRoZSBEQU1PTiBjb250ZXh0LlxubW0vZGFtb24vY29yZS5jLTI5OTMtICogQHM6XHRcdFRoZSBzY2hlbWUuXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMDEtICogTm90ZTogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkYW1vbl9nZXRfZm9saW8oKSBmcm9tIG9wcy1jb21tb24uYywgd2hpY2ggaXNcbm1tL2RhbW9uL2NvcmUuYzozMDAyOiAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXG5tbS9kYW1vbi9jb3JlLmMtMzAwMy0gKiBjb250ZXh0IHRvIGJlIHVzaW5nIFBBRERSIG9wZXJhdGlvbnMgZm9yIG1lYW5pbmdmdWwgcmVzdWx0cy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzA2OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA3NC1cbm1tL2RhbW9uL2NvcmUuYzozMDc1Olx0aWYgKGMtXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUilcbm1tL2RhbW9uL2NvcmUuYy0zMDc2LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA4OC19XG5tbS9kYW1vbi9jb3JlLmM6MzA4OTojZWxzZSAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cbm1tL2RhbW9uL2NvcmUuYy0zMDkwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDk0LX1cbm1tL2RhbW9uL2NvcmUuYzozMDk1OiNlbmRpZiAvKiBDT05GSUdfREFNT05fUEFERFIgKi9cbm1tL2RhbW9uL2NvcmUuYy0zMDk2LSNlbHNlIC8qIENPTkZJR19OVU1BICovXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNjc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDctXG5tbS9kYW1vbi9jb3JlLmM6MzQwODojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jLTM0MDktc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDI2PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MzYtXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbm1tL2RhbW9uL2NvcmUuYzozNDM3Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmMtMzQzOC1cdFx0bC1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXHUwMDNlcHJvYmVfaGl0c1tpXSAqIHN6X2wgJiM0Mzsgci1cdTAwM2Vwcm9iZV9oaXRzW2ldXG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM1MTItICogbWF4X25yX3JlZ2lvbnMgdG8gYSBudW1iZXIgdGhhdCBsb3dlciB0aGFuIHRoZSBjdXJyZW50IG51bWJlciBvZiByZWdpb25zXG5tbS9kYW1vbi9jb3JlLmM6MzUxMzogKiB3aGlsZSBEQU1PTiBpcyBydW5uaW5nLiAgRm9yIHN1Y2ggYSBjYXNlLCByZXBlYXQgbWVyZ2luZyB1bnRpbCB0aGUgbGltaXQgaXNcbm1tL2RhbW9uL2NvcmUuYy0zNTE0LSAqIG1ldCB3aGlsZSBpbmNyZWFzaW5nIEB0aHJlc2hvbGQgdXAgdG8gcG9zc2libGUgbWF4aW11bSBsZXZlbC5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzUxNj1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU0Mi1cbm1tL2RhbW9uL2NvcmUuYzozNTQzOiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzU0NC1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NjA9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc2Ny1cbm1tL2RhbW9uL2NvcmUuYzozNzY4OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9jb3JlLmMtMzc2OS1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jPTQxMjY9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MTQyLSAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmM6NDE0MzogKiBAcjpcdFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxubW0vZGFtb24vY29yZS5jLTQxNDQtICogQGFjY2Vzc2VkOlx0V2hldGhlciB0aGUgcmVnaW9uIGhhcyBhY2Nlc3NlZCBkdXJpbmcgbGFzdCBzYW1wbGluZyBpbnRlcnZhbC5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDE1MT12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDE1Ny0vKipcbm1tL2RhbW9uL2NvcmUuYzo0MTU4OiAqIGRhbW9uX2luaXRpYWxpemVkKCkgLSBSZXR1cm4gaWYgREFNT04gaXMgcmVhZHkgdG8gYmUgdXNlZC5cbm1tL2RhbW9uL2NvcmUuYy00MTU5LSAqXG5tbS9kYW1vbi9jb3JlLmM6NDE2MDogKiBSZXR1cm46IHRydWUgaWYgREFNT04gaXMgcmVhZHkgdG8gYmUgdXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxubW0vZGFtb24vY29yZS5jLTQxNjEtICovXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yLS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjM6ICogREFNT04tYmFzZWQgTFJVLWxpc3RzIFNvcnRpbmdcbm1tL2RhbW9uL2xydV9zb3J0LmMtNC0gKi9cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5LS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjIwOiAqIEVuYWJsZSBvciBkaXNhYmxlIERBTU9OX0xSVV9TT1JULlxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMS0gKlxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMjogKiBZb3UgY2FuIGVuYWJsZSBEQU1PTl9MUlVfU09SVCBieSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBhc1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzogKiBgYFlgYC4gIFNldHRpbmcgaXQgYXMgYGBOYGAgZGlzYWJsZXMgREFNT05fTFJVX1NPUlQuICBOb3RlIHRoYXRcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQ6ICogREFNT05fTFJVX1NPUlQgY291bGQgZG8gbm8gcmVhbCBtb25pdG9yaW5nIGFuZCBMUlUtbGlzdHMgc29ydGluZyBkdWUgdG8gdGhlXG5tbS9kYW1vbi9scnVfc29ydC5jLTI1LSAqIHdhdGVybWFya3MtYmFzZWQgYWN0aXZhdGlvbiBjb25kaXRpb24uICBSZWZlciB0byBiZWxvdyBkZXNjcmlwdGlvbnMgZm9yIHRoZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9Mjg9c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAtLypcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzE6ICogTWFrZSBEQU1PTl9MUlVfU09SVCByZWFkcyB0aGUgaW5wdXQgcGFyYW1ldGVycyBhZ2FpbiwgZXhjZXB0IGBgZW5hYmxlZGBgLlxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMi0gKlxubW0vZGFtb24vbHJ1X3NvcnQuYzozMzogKiBJbnB1dCBwYXJhbWV0ZXJzIHRoYXQgdXBkYXRlZCB3aGlsZSBEQU1PTl9MUlVfU09SVCBpcyBydW5uaW5nIGFyZSBub3Rcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQ6ICogYXBwbGllZCBieSBkZWZhdWx0LiAgT25jZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBZYGAsIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1LSAqIHJlYWRzIHZhbHVlcyBvZiBwYXJhbWV0ZXJzIGV4Y2VwdCBgYGVuYWJsZWRgYCBhZ2Fpbi4gIE9uY2UgdGhlIHJlLXJlYWRpbmcgaXNcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzYtICogZG9uZSwgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgTmBgLiAgSWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBmb3VuZCB3aGlsZVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzogKiB0aGUgcmUtcmVhZGluZywgREFNT05fTFJVX1NPUlQgd2lsbCBiZSBkaXNhYmxlZC5cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgtICovXG5tbS9kYW1vbi9scnVfc29ydC5jPTM5PXN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQzLSAqXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ0OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NS0gKiBhdXRvbWF0aWNhbGx5IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz01Mz1tb2R1bGVfcGFyYW0oYWN0aXZlX21lbV9icCwgdWxvbmcsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNTctICpcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTg6ICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgWWBgLCBEQU1PTl9MUlVfU09SVCBhdXRvbWF0aWNhbGx5IHR1bmVzXG5tbS9kYW1vbi9scnVfc29ydC5jOjU5OiAqIERBTU9OJiMzOTtzIHNhbXBsaW5nIGFuZCBhZ2dyZWdhdGlvbiBpbnRlcnZhbHMuICBUaGUgYXV0by10dW5pbmcgYWltcyB0byBjYXB0dXJlXG5tbS9kYW1vbi9scnVfc29ydC5jOjYwOiAqIG1lYW5pbmdmdWwgYW1vdW50IG9mIGFjY2VzcyBldmVudHMgaW4gZWFjaCBEQU1PTi1zbmFwc2hvdCwgd2hpbGUga2VlcGluZyB0aGVcbm1tL2RhbW9uL2xydV9zb3J0LmMtNjEtICogc2FtcGxpbmcgaW50ZXJ2YWwgNSBtaWxsaXNlY29uZHMgaW4gbWluaW11bSwgYW5kIDEwIHNlY29uZHMgaW4gbWF4aW11bS5cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTgyPW1vZHVsZV9wYXJhbShmaWx0ZXJfeW91bmdfcGFnZXMsIGJvb2wsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtODctICogSWYgYSBtZW1vcnkgcmVnaW9uIGlzIGFjY2Vzc2VkIGluIGZyZXF1ZW5jeSBvZiB0aGlzIG9yIGhpZ2hlcixcbm1tL2RhbW9uL2xydV9zb3J0LmM6ODg6ICogREFNT05fTFJVX1NPUlQgaWRlbnRpZmllcyB0aGUgcmVnaW9uIGFzIGhvdCwgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQgb24gdGhlXG5tbS9kYW1vbi9scnVfc29ydC5jLTg5LSAqIExSVSBsaXN0LCBzbyB0aGF0IGl0IGNvdWxkIG5vdCBiZSByZWNsYWltZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiAgNTAlIGJ5XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz05Mz1tb2R1bGVfcGFyYW0oaG90X3RocmVzX2FjY2Vzc19mcmVxLCB1bG9uZywgMDYwMCk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy05Ny0gKlxubW0vZGFtb24vbHJ1X3NvcnQuYzo5ODogKiBJZiBhIG1lbW9yeSByZWdpb24gaXMgbm90IGFjY2Vzc2VkIGZvciB0aGlzIG9yIGxvbmdlciB0aW1lLCBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vbHJ1X3NvcnQuYy05OS0gKiBpZGVudGlmaWVzIHRoZSByZWdpb24gYXMgY29sZCwgYW5kIG1hcmsgaXQgYXMgdW5hY2Nlc3NlZCBvbiB0aGUgTFJVIGxpc3QsIHNvXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMDY9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9scnVfc29ydF9xdW90YSA9IHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTExNS19O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTExNy1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MTE4PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyBkYW1vbl9scnVfc29ydF93bWFya3MgPSB7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMjQtfTtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTI1OkRFRklORV9EQU1PTl9NT0RVTEVTX1dNQVJLU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfd21hcmtzKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTI2LVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMjc9c3RhdGljIHN0cnVjdCBkYW1vbl9hdHRycyBkYW1vbl9scnVfc29ydF9tb25fYXR0cnMgPSB7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMzMtfTtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTM0OkRFRklORV9EQU1PTl9NT0RVTEVTX01PTl9BVFRSU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfbW9uX2F0dHJzKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTM1LVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTM4LSAqXG5tbS9kYW1vbi9scnVfc29ydC5jOjEzOTogKiBUaGUgc3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgcmVnaW9uIHRoYXQgREFNT05fTFJVX1NPUlQgd2lsbCBkbyB3b3JrXG5tbS9kYW1vbi9scnVfc29ydC5jLTE0MC0gKiBhZ2FpbnN0LiAgQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSYjMzk7cyBlbnRpcmUgcGh5c2ljYWwgbWVtb3J5IGlzIHVzZWQgYXMgdGhlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNDQ9bW9kdWxlX3BhcmFtKG1vbml0b3JfcmVnaW9uX3N0YXJ0LCB1bG9uZywgMDYwMCk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNDgtICpcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTQ5OiAqIFRoZSBlbmQgcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgcmVnaW9uIHRoYXQgREFNT05fTFJVX1NPUlQgd2lsbCBkbyB3b3JrXG5tbS9kYW1vbi9scnVfc29ydC5jLTE1MC0gKiBhZ2FpbnN0LiAgQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSYjMzk7cyBlbnRpcmUgcGh5c2ljYWwgbWVtb3J5IGlzIHVzZWQgYXMgdGhlXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNTQ9bW9kdWxlX3BhcmFtKG1vbml0b3JfcmVnaW9uX2VuZCwgdWxvbmcsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTU2LS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjE1NzogKiBTY2FsZSBmYWN0b3IgZm9yIERBTU9OX0xSVV9TT1JUIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXG5tbS9kYW1vbi9scnVfc29ydC5jLTE1OC0gKlxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MTYzPXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9scnVfc29ydF9ob3Rfc3RhdDtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTY0OkRFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9scnVfc29ydF9ob3Rfc3RhdCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTY1LVx0XHRscnVfc29ydF90cmllZF9ob3RfcmVnaW9ucywgbHJ1X3NvcnRlZF9ob3RfcmVnaW9ucyxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2OD1zdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fbHJ1X3NvcnRfY29sZF9zdGF0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoxNjk6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X2NvbGRfc3RhdCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTcwLVx0XHRscnVfc29ydF90cmllZF9jb2xkX3JlZ2lvbnMsIGxydV9zb3J0ZWRfY29sZF9yZWdpb25zLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMDktXG5tbS9kYW1vbi9scnVfc29ydC5jOjIxMDovKiBDcmVhdGUgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lIGZvciBob3QgbWVtb3J5IHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjExLXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19ob3Rfc2NoZW1lKHVuc2lnbmVkIGludCBob3RfdGhyZXMpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMTgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjIxOTovKiBDcmVhdGUgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lIGZvciBjb2xkIG1lbW9yeSByZWdpb25zICovXG5tbS9kYW1vbi9scnVfc29ydC5jLTIyMC1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfY29sZF9zY2hlbWUodW5zaWduZWQgaW50IGNvbGRfdGhyZXMpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yODQtXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyODU6XHRwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjg2LVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDQxPU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NDI6XHRcJiMzNDtTY2FsZSBmYWN0b3IgZm9yIERBTU9OX0xSVV9TT1JUIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24gKGRlZmF1bHQ6IDEpXCYjMzQ7KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDQzLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDg2PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDg3Olx0XCYjMzQ7RW5hYmxlIG9yIGRpc2FibGUgREFNT05fTFJVX1NPUlQgKGRlZmF1bHQ6IGRpc2FibGVkKVwmIzM0Oyk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4OC1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTUxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMga2RhbW9uZF9waWRfcGFyYW1fb3BzID0ge1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNTE3LS8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjUxODogKiBQSUQgb2YgdGhlIERBTU9OIHRocmVhZFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MTktICpcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTIwOiAqIElmIERBTU9OX0xSVV9TT1JUIGlzIGVuYWJsZWQsIHRoaXMgYmVjb21lcyB0aGUgUElEIG9mIHRoZSB3b3JrZXIgdGhyZWFkLlxubW0vZGFtb24vbHJ1X3NvcnQuYy01MjEtICogRWxzZSwgLTEuXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yLS8qXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjM6ICogQ29tbW9uIENvZGUgZm9yIERBTU9OIE1vZHVsZXNcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtNC0gKi9cbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTEwLS8qXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjExOiAqIEFsbG9jYXRlLCBzZXQsIGFuZCByZXR1cm4gYSBEQU1PTiBjb250ZXh0IGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTItICogQGN0eHA6XHRQb2ludGVyIHRvIHNhdmUgdGhlIHBvaW50IHRvIHRoZSBuZXdseSBjcmVhdGVkIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jPTE1PWludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjQtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjI1Olx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfUEFERFIpKSB7XG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTI2LVx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMi0vKlxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDozOiAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBNb2R1bGVzXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQtICovXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC03LVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDo4OiNkZWZpbmUgREVGSU5FX0RBTU9OX01PRFVMRVNfTU9OX0FUVFJTX1BBUkFNUyhhdHRycylcdFx0XHRcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC05LVx0bW9kdWxlX3BhcmFtX25hbWVkKHNhbXBsZV9pbnRlcnZhbCwgYXR0cnMuc2FtcGxlX2ludGVydmFsLFx0XFxcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTE3LVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoxODojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1RJTUVfUVVPVEEocXVvdGEpXHRcdFx0XFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMTktXHRtb2R1bGVfcGFyYW1fbmFtZWQocXVvdGFfbXMsIHF1b3RhLm1zLCB1bG9uZywgMDYwMCk7XHRcdFxcXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yMi1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6MjM6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19RVU9UQVMocXVvdGEpXHRcdFx0XFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6MjQ6XHRERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19USU1FX1FVT1RBKHF1b3RhKVx0XHRcdFxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTI1LVx0bW9kdWxlX3BhcmFtX25hbWVkKHF1b3RhX3N6LCBxdW90YS5zeiwgdWxvbmcsIDA2MDApO1xubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yNi1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6Mjc6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19XTUFSS1NfUEFSQU1TKHdtYXJrcylcdFx0XHRcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yOC1cdG1vZHVsZV9wYXJhbV9uYW1lZCh3bWFya3NfaW50ZXJ2YWwsIHdtYXJrcy5pbnRlcnZhbCwgdWxvbmcsXHRcXFxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMzMtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjM0OiNkZWZpbmUgREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKHN0YXQsIHRyeV9uYW1lLFx0XHRcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0zNS1cdFx0c3VjY19uYW1lLCBxdF9leGNlZWRfbmFtZSlcdFx0XHRcdFxcXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIEh1Z2VUTEIgUGFnZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kICp3aHkqLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHksIGxpbmUgYnkgbGluZS4KCkFscmlnaHQsIHRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkYW1vbl9odWdldGxiX21rb2xkYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgdGhlIGNvZGUgY2hlY2tlZCBpZiBhIFBURSAoUGFnZSBUYWJsZSBFbnRyeSkgd2FzIHlvdW5nIHVzaW5nIGBwdGVfeW91bmcoKWAuIElmIHNvLCBpdCBtYXJrZWQgdGhlIFBURSBhcyBvbGQgd2l0aCBgcHRlX21rb2xkKClgIGFuZCB0aGVuIHVwZGF0ZWQgdGhlIFBURSB1c2luZyBgc2V0X2h1Z2VfcHRlX2F0KClgLgoKTm93LCB0aGUgY29kZSBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYC4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgY2FsbHMgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKClgICpiZWZvcmUqIG1vZGlmeWluZyB0aGUgUFRFIGFuZCBjYWxsaW5nIGBzZXRfaHVnZV9wdGVfYXQoKWAuIFRoZSBpbXBsaWNhdGlvbiBvZiBjYWxsaW5nIGBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcmAgZmlyc3QgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCk15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gY29kZSBjaGFuZ2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyBvciBodWdldGxiLXNwZWNpZmljIHJlcXVpcmVtZW50cy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBIdWdlIFRMQiBQVEUgdXNpbmcgYHNldF9odWdlX3B0ZV9hdCgpYCB3aXRob3V0IGZpcnN0IHBlcmZvcm1pbmcgYSBnZXQtYW5kLWNsZWFyIG9wZXJhdGlvbiBtaWdodCBub3QgYmUgY29ycmVjdCBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4gSXQgY291bGQgYnJlYWsgVExCIGNvbnNpc3RlbmN5IG9yIHRoZSBzZW1hbnRpY3Mgb2YgSHVnZVRMQiBQVEUgdXBkYXRlcy4gRWl0aGVyIHdheSwgY2FsbGluZyBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGlzIGNyaXRpY2FsIHRvIHBlcmZvcm0gY29ycmVjdCB1cGRhdGVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uCgpJJiMzOTtsbCBjaGVjayB0aGUgY2FsbGVycyBvZiBgZGFtb25faHVnZXRsYl9ta29sZGAgd2l0aGluIGBtbS9kYW1vbi92YWRkci5jYCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzAxOlx0e1xuIDMwMjpcdFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4gMzAzOlx0XHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4gMzA0Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbiAzMDU6XHRcbiAzMDY6XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gMzA3Olx0XG4gMzA4Olx0XHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXHUwMDI2ZW50cnkpO1xuIDMwOTpcdFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbiAzMTA6XHRcdFx0XHRcdCAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcbiAzMTE6XHRcdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4gMzEyOlx0XG4gMzEzOlx0XHRpZiAocmVmZXJlbmNlZClcbiAzMTQ6XHRcdFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcbiAzMTU6XHRcbiAzMTY6XHRcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcbiAzMTc6XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuIDMyMDpcdHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIDMyMTpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIDMyMjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4gMzI1Olx0XHRzcGlubG9ja190ICpwdGw7XG4gMzI2Olx0XHRwdGVfdCBlbnRyeTtcbiAzMjc6XHRcbiAzMjg6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiAzMjk6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIDMzMDpcdFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4gMzMxOlx0XHRcdGdvdG8gb3V0O1xuIDMzMjpcdFxuIDMzMzpcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXHUwMDNlbW0sIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbiAzMzQ6XHRcbiAzMzU6XHRvdXQ6XG4gMzM2Olx0XHRzcGluX3VubG9jayhwdGwpO1xuIDMzNzpcdFx0cmV0dXJuIDA7XG4gMzM4Olx0fVxuIDMzOTpcdCNlbHNlXG4gMzQwOlx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbiAzNDE6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDM0MjpcdFxuIDM0MzpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHtcbiAzNDY6XHRcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcbiAzNDc6XHRcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxuIDM0ODpcdFx0fTtcbiAzNDk6XHRcbiAzNTA6XHRcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xuIDM1MTpcdH1cbiAzNTI6XHRcbiAzNTM6XHQvKlxuIDM1NDpcdCAqIEZ1bmN0aW9ucyBmb3IgdGhlIGFjY2VzcyBjaGVja2luZyBvZiB0aGUgcmVnaW9uc1xuIDM1NTpcdCAqL1xuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gMzU4Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gMzU5Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAzNjA6XHR7XG4gMzYxOlx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCwgci1cdTAwM2Vhci5lbmQpO1xuIDM2MjpcdFxuIDM2MzpcdFx0ZGFtb25fdmFfbWtvbGQobW0sIHItXHUwMDNlc2FtcGxpbmdfYWRkcik7XG4gMzY0Olx0fVxuIDM2NTpcdFxuIDM2NjpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gMzY3Olx0e1xuIDM2ODpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiAzNjk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDM3MDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiAzNzE6XHRcbiAzNzI6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiAzNzM6XHRcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4gMzc0Olx0XHRcdGlmICghbW0pXG4gMzc1Olx0XHRcdFx0Y29udGludWU7XG4gMzc2Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxuIDM3NzpcdFx0XHRcdF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2sobW0sIHIsIGN0eCk7XG4gMzc4Olx0XHRcdG1tcHV0KG1tKTtcbiAzNzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBIdWdldGxiIEludGVncmF0aW9uOiBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogYGRhbW9uX3ZhX21rb2xkYCBpcyBsaW5rZWQgdG8gYGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlgLCB3aGljaCB0aGVuIGNhbGxzIGBkYW1vbl9odWdldGxiX21rb2xkYCBhbmQgdWx0aW1hdGVseSBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYC4gSXMgdGhpcyBwYXRoIHdvcnRoIGludmVzdGlnYXRpbmcgZm9yIGZ1enppbmc/IEZyb20gYSBwcmVsaW1pbmFyeSBzY2FuLCB0aGlzIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIHRhcmdldC4KClRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrKSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgd29ya2luZyBpbiBjb25qdW5jdGlvbiB3aXRoIGh1Z2V0bGIgcGFnZXMuIFJlYWNoYWJsZT8gWWVzLCBEQU1PTiBpcyBjb25maWd1cmFibGUgdGhyb3VnaCBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fVkFERFJgLCBldGMuKSBvciBkZWJ1Z2ZzIG9yIG1vZHVsZXMsIGFuZCBodWdldGxiIGlzIHByZXR0eSBzdGFuZGFyZCBpbiBtb3N0IGVudmlyb25tZW50cyBhbmQgdGVzdGVkLiBXZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gUUVNVSBvciBldmVuIEdDRSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlnIHJlcXVpcmVtZW50cyBhcmUuIEkmIzM5O2xsIGNoZWNrIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9kYW1vbi9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19EQU1PTl9WQUREUmAuIEl0IGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgTU1VYCwgYW5kIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBzdGFuZGFyZCBodWdldGxiIGNvbmZpZywgc28gaXQgbmVlZHMgYFg4NiB8fCAuLi5gLgoKVGhlIGZpbGUgbW9kaWZpZWQgaXMgb25seSBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgZ29vZCwgd2UgYXJlIHN0YXJ0aW5nIGluIGEgY29udGFpbmVkIGFyZWEuIExldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIGludm9sdmVkLiBUaGUgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmU6IGBkYW1vbl9odWdldGxiX21rb2xkYCBhbmQgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAgKGEgc3RhdGljIGhlbHBlciksIHdpdGggY2FsbGVycyBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9ta29sZGAsIGFuZCBgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzYC4gSSYjMzk7bGwgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucywgYW5kIG90aGVyIGZ1bmN0aW9ucyBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgYXJlIHByb3Blcmx5IGV4cG9zZWQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGFjY2Vzc2libGUgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcdH1cbiA2MDE6XHRcbiA2MDI6XHRcdG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIDYwMzpcdFx0aWx4ID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSkgXHUwMDNlXHUwMDNlIG9yZGVyO1xuIDYwNDpcdFx0aWx4ICYjNDM7PSBsaW5lYXJfcGFnZV9kZWx0YSh2bWEsIGFkZHIpIFx1MDAzZVx1MDAzZSBvcmRlcjtcbiA2MDU6XHRcbiA2MDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRlc3RzLVx1MDAzZW5yX2Rlc3RzOyBpJiM0MzsmIzQzOylcbiA2MDc6XHRcdFx0d2VpZ2h0X3RvdGFsICYjNDM7PSBkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyW2ldO1xuIDYwODpcdFxuIDYwOTpcdFx0LyogSWYgdGhlIHRvdGFsIHdlaWdodHMgYXJlIHNvbWVob3cgMCwgZG9uJiMzOTt0IG1pZ3JhdGUgYXQgYWxsICovXG4gNjEwOlx0XHRpZiAoIXdlaWdodF90b3RhbClcbiA2MTE6XHRcdFx0cmV0dXJuO1xuIDYxMjpcdFxuIDYxMzpcdFx0dGFyZ2V0ID0gaWx4ICUgd2VpZ2h0X3RvdGFsO1xuIDYxNDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGVzdHMtXHUwMDNlbnJfZGVzdHM7IGkmIzQzOyYjNDM7KSB7XG4gNjE1Olx0XHRcdGlmICh0YXJnZXQgXHUwMDNjIGRlc3RzLVx1MDAzZXdlaWdodF9hcnJbaV0pXG4gNjE2Olx0XHRcdFx0YnJlYWs7XG4gNjE3Olx0XHRcdHRhcmdldCAtPSBkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyW2ldO1xuIDYxODpcdFx0fVxuIDYxOTpcdFxuIDYyMDpcdFx0LyogSWYgdGhlIGZvbGlvIGlzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IG5vZGUsIGRvbiYjMzk7dCBkbyBhbnl0aGluZyAqL1xuIDYyMTpcdFx0aWYgKGZvbGlvX25pZChmb2xpbykgPT0gZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnJbaV0pXG4gNjIyOlx0XHRcdHJldHVybjtcbiA2MjM6XHRcbiA2MjQ6XHRpc29sYXRlOlxuIDYyNTpcdFx0aWYgKCFmb2xpb19pc29sYXRlX2xydShmb2xpbykpXG4gNjI2Olx0XHRcdHJldHVybjtcbiA2Mjc6XHRcdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0MztcbiA2Mjg6XHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIDYyOTpcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZtaWdyYXRpb25fbGlzdHNbaV0pO1xuIDYzMDpcdH1cbiA2MzE6XHRcbiA2MzI6XHRzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiA2MzM6XHRcdFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiA2MzQ6XHR7XG4gNjM1Olx0XHRzdHJ1Y3QgZGFtb3NfdmFfbWlncmF0ZV9wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIDYzNjpcdFx0c3RydWN0IGxpc3RfaGVhZCAqbWlncmF0aW9uX2xpc3RzID0gcHJpdi1cdTAwM2VtaWdyYXRpb25fbGlzdHM7XG4gNjM3Olx0XHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVx1MDAzZXNjaGVtZTtcbiA2Mzg6XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkZXN0cyA9IFx1MDAyNnMtXHUwMDNlbWlncmF0ZV9kZXN0cztcbiA2Mzk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNjQwOlx0XHRzcGlubG9ja190ICpwdGw7XG4gNjQxOlx0XHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcbiA2NDI6XHRcdGludCBucjtcbiA2NDM6XHRcbiA2NDQ6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gNjQ1Olx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xuIDY0NjpcdFx0aWYgKHB0bCkge1xuIDY0NzpcdFx0XHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcbiA2NDg6XHRcbiA2NDk6XHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiA2NTA6XHRcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuIDY1MTpcdFx0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay1cdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xuIDY1MjpcdFx0XHRpZiAoIWZvbGlvKVxuIDY1MzpcdFx0XHRcdGdvdG8gaHVnZV9vdXQ7XG4gNjU0Olx0XHRcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgTlVMTCwgcG1kKSlcbiA2NTU6XHRcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuIDY1NjpcdFx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxuIDY1NzpcdFx0XHRcdFx0bWlncmF0aW9uX2xpc3RzKTtcbiA2NTg6XHRodWdlX291dDpcbiA2NTk6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA2NjA6XHRcdFx0cmV0dXJuIDA7XG4gNjYxOlx0XHR9XG4gNjYyOlx0I2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiA2NjM6XHRcbiA2NjQ6XHRcdHN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cdTAwM2VtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDY2NTpcdFx0aWYgKCFwdGUpXG4gNjY2Olx0XHRcdHJldHVybiAwO1xuIDY2NzpcdFxuIDY2ODpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4gNjY5Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4gNjcwOlx0XG4gNjcxOlx0XHRcdG5yID0gMTtcbiA2NzI6XHRcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuIDY3MzpcdFxuIDY3NDpcdFx0XHRpZiAocHRlX25vbmUocHRlbnQpIHx8ICFwdGVfcHJlc2VudChwdGVudCkpXG4gNjc1Olx0XHRcdFx0Y29udGludWU7XG4gNjc2Olx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4gNjc3Olx0XHRcdGlmICghZm9saW8pXG4gNjc4Olx0XHRcdFx0Y29udGludWU7XG4gNjc5Olx0XHRcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVx1MDAzZXZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2YWRkci5jIE9wZXJhdGlvbnMgU3RydWN0dXJlKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGp1bXAgcmlnaHQgdG8gdGhlIGVuZCBvZiBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSB1c3VhbCBhcHByb2FjaCwgcmlnaHQ/IFdoZW4gdHJ5aW5nIHRvIGdyYXNwIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaG93IHRoZSByZWdpc3RyYXRpb24gbWVjaGFuaXNtcyB3b3JrLCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIGlzIG9mdGVuIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIGZpZ3VyZSB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgaXRzZWxmLCBhbG9uZyB3aXRoIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzc+KAlGhvdyBpdCBnZXRzIGhvb2tlZCBpbnRvIHRoZSBsYXJnZXIgREFNT04gZnJhbWV3b3Jr4oCUd2lsbCBiZSBsYWlkIGJhcmUgYXQgdGhlIGNvbmNsdXNpb24uIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuLCByZWFsbHk6IGRlZmluZSB0aGUgZ3V0cywgdGhlbiBzdGl0Y2ggaXQgYWxsIHRvZ2V0aGVyLiBUaW1lIHRvIGdldCBhIHNlbnNlIGZvciBob3cgdGhpcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBpcyBiZWluZyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0LypcbiA2OTE6XHQgKiBGdW5jdGlvbnMgZm9yIHRoZSB0YXJnZXQgdmFsaWRpdHkgY2hlY2sgYW5kIGNsZWFudXBcbiA2OTI6XHQgKi9cbiA2OTM6XHRcbiA2OTQ6XHRzdGF0aWMgYm9vbCBkYW1vbl92YV90YXJnZXRfdmFsaWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiA2OTU6XHR7XG4gNjk2Olx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4gNjk3Olx0XG4gNjk4Olx0XHR0YXNrID0gZGFtb25fZ2V0X3Rhc2tfc3RydWN0KHQpO1xuIDY5OTpcdFx0aWYgKHRhc2spIHtcbiA3MDA6XHRcdFx0cHV0X3Rhc2tfc3RydWN0KHRhc2spO1xuIDcwMTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA3MDI6XHRcdH1cbiA3MDM6XHRcbiA3MDQ6XHRcdHJldHVybiBmYWxzZTtcbiA3MDU6XHR9XG4gNzA2Olx0XG4gNzA3Olx0c3RhdGljIHZvaWQgZGFtb25fdmFfY2xlYW51cF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiA3MDg6XHR7XG4gNzA5Olx0XHRwdXRfcGlkKHQtXHUwMDNlcGlkKTtcbiA3MTA6XHR9XG4gNzExOlx0XG4gNzEyOlx0I2lmbmRlZiBDT05GSUdfQURWSVNFX1NZU0NBTExTXG4gNzEzOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4gNzE0Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGludCBiZWhhdmlvcilcbiA3MTU6XHR7XG4gNzE2Olx0XHRyZXR1cm4gMDtcbiA3MTc6XHR9XG4gNzE4Olx0I2Vsc2VcbiA3MTk6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19tYWR2aXNlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbiA3MjA6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgaW50IGJlaGF2aW9yKVxuIDcyMTpcdHtcbiA3MjI6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDcyMzpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IFBBR0VfQUxJR04oci1cdTAwM2Vhci5zdGFydCk7XG4gNzI0Olx0XHR1bnNpZ25lZCBsb25nIGxlbiA9IFBBR0VfQUxJR04oZGFtb25fc3pfcmVnaW9uKHIpKTtcbiA3MjU6XHRcdHVuc2lnbmVkIGxvbmcgYXBwbGllZDtcbiA3MjY6XHRcbiA3Mjc6XHRcdG1tID0gZGFtb25fZ2V0X21tKHRhcmdldCk7XG4gNzI4Olx0XHRpZiAoIW1tKVxuIDcyOTpcdFx0XHRyZXR1cm4gMDtcbiA3MzA6XHRcbiA3MzE6XHRcdGFwcGxpZWQgPSBkb19tYWR2aXNlKG1tLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgPyAwIDogbGVuO1xuIDczMjpcdFx0bW1wdXQobW0pO1xuIDczMzpcdFxuIDczNDpcdFx0cmV0dXJuIGFwcGxpZWQ7XG4gNzM1Olx0fVxuIDczNjpcdCNlbmRpZlx0LyogQ09ORklHX0FEVklTRV9TWVNDQUxMUyAqL1xuIDczNzpcdFxuIDczODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxuIDczOTpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4gNzQwOlx0XHRcdHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4gNzQxOlx0e1xuIDc0MjpcdFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xuIDc0MzpcdFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSBwcml2O1xuIDc0NDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gNzQ1Olx0XHRpbnQgbnJfZGVzdHM7XG4gNzQ2Olx0XHRpbnQgbmlkO1xuIDc0NzpcdFx0Ym9vbCB1c2VfdGFyZ2V0X25pZDtcbiA3NDg6XHRcdHVuc2lnbmVkIGxvbmcgYXBwbGllZCA9IDA7XG4gNzQ5Olx0XHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMgPSBcdTAwMjZzLVx1MDAzZW1pZ3JhdGVfZGVzdHM7XG4gNzUwOlx0XHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG4gNzUxOlx0XHRcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcbiA3NTI6XHRcdFx0LnB0ZV9lbnRyeSA9IE5VTEwsXG4gNzUzOlx0XHR9O1xuIDc1NDpcdFxuIDc1NTpcdFx0dXNlX3RhcmdldF9uaWQgPSBkZXN0cy1cdTAwM2Vucl9kZXN0cyA9PSAwO1xuIDc1NjpcdFx0bnJfZGVzdHMgPSB1c2VfdGFyZ2V0X25pZCA/IDEgOiBkZXN0cy1cdTAwM2Vucl9kZXN0cztcbiA3NTc6XHRcdHByaXYuc2NoZW1lID0gcztcbiA3NTg6XHRcdHByaXYubWlncmF0aW9uX2xpc3RzID0ga21hbGxvY19vYmpzKCpwcml2Lm1pZ3JhdGlvbl9saXN0cywgbnJfZGVzdHMpO1xuIDc1OTpcdFx0aWYgKCFwcml2Lm1pZ3JhdGlvbl9saXN0cylcbiA3NjA6XHRcdFx0cmV0dXJuIDA7XG4gNzYxOlx0XG4gNzYyOlx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbnJfZGVzdHM7IGkmIzQzOyYjNDM7KVxuIDc2MzpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2Lm1pZ3JhdGlvbl9saXN0c1tpXSk7XG4gNzY0Olx0XG4gNzY1Olx0XG4gNzY2Olx0XHRtbSA9IGRhbW9uX2dldF9tbSh0YXJnZXQpO1xuIDc2NzpcdFx0aWYgKCFtbSlcbiA3Njg6XHRcdFx0Z290byBmcmVlX2xpc3RzO1xuIDc2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHRzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgdmFkZHIuY2AgLSBMZXQmIzM5O3MgU2VlIFdoYXQmIzM5O3MgYXQgdGhlIEZpbmlzaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgbW0vZGFtb24vdmFkZHIuY2AsIGFuZCBJJiMzOTttIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSwgbW9zdCByZWNlbnQsIG9yIG1vc3QgaW1wb3J0YW50IHN0dWZmLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSAqbGFzdCogaW4gdGhpcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWFuYWdlbWVudCBtb2R1bGUgZm9yIERhbW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGZpbmFsIGludGVyYWN0aW9ucyBvciBjbGVhbi11cCBsb2dpYywgbWF5YmUgdGhlIG1haW4gZnVuY3Rpb24gb3IgdGhlIGVudHJ5IHBvaW50IGZvciBzb21lIGtleSBEYW1vbi1zcGVjaWZpYyBvcGVyYXRpb24gaW52b2x2aW5nIHZpcnR1YWwgYWRkcmVzc2VzLgoKSSYjMzk7bSBrZWVuIHRvIGdyYXNwIHRoZSBjb25jbHVzaW9uIG9mIHRoZSBmdW5jdGlvbi4gSXMgaXQgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGU/IElzIGl0IGRvaW5nIHNvbWV0aGluZyBtb3JlIHN1YnRsZSwgbGlrZSB1cGRhdGluZyBzb21lIGdsb2JhbCBzdGF0ZT8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBleGl0IGNvbmRpdGlvbnMgYW5kIGFueSBmaW5hbCBkYXRhIG1hbmlwdWxhdGlvbnMuIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBtYW5pcHVsYXRpb25zIGFyZSBnb2luZyB0byBiZSByZWxhdGVkIHRvIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nIG9yIG1hbmlwdWxhdGlvbi4gUGVyaGFwcyBpdCBob2xkcyB0aGUgbWFpbiByb3V0aW5lPyBNYXliZSBhIGNsZWFudXAgcHJvY2VkdXJlPyBXaGF0ZXZlciBpdCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gdGhlIGNvbnRleHQgb2YgRGFtb24mIzM5O3Mgb3ZlcmFsbCBnb2Fscywgd2hpY2ggSSBhc3N1bWUgYXJlIHRvIGhlbHAgd2l0aCBtZW1vcnkgYWNjZXNzLCBvcHRpbWl6YXRpb24sIG9yIHdoYXRldmVyIHRoZSBwcm9qZWN0IGlzIGFib3V0LiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgRGFtb24tY2VudHJpYyBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcyBhdCBwbGF5IGluIHRoaXMgZmluYWwgcGFydCwgb3IgaWYgaXQmIzM5O3MgcmVseWluZyBvbiBtb3JlIGdlbmVyYWwga2VybmVsIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MDpcdFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCByLVx1MDAzZWFyLnN0YXJ0LCByLVx1MDAzZWFyLmVuZCwgXHUwMDI2d2Fsa19vcHMsIFx1MDAyNnByaXYpO1xuIDc3MTpcdFx0bW1wdXQobW0pO1xuIDc3MjpcdFxuIDc3MzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc3RzOyBpJiM0MzsmIzQzOykge1xuIDc3NDpcdFx0XHRuaWQgPSB1c2VfdGFyZ2V0X25pZCA/IHMtXHUwMDNldGFyZ2V0X25pZCA6IGRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyW2ldO1xuIDc3NTpcdFx0XHRhcHBsaWVkICYjNDM7PSBkYW1vbl9taWdyYXRlX3BhZ2VzKFx1MDAyNnByaXYubWlncmF0aW9uX2xpc3RzW2ldLCBuaWQpO1xuIDc3NjpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA3Nzc6XHRcdH1cbiA3Nzg6XHRcbiA3Nzk6XHRmcmVlX2xpc3RzOlxuIDc4MDpcdFx0a2ZyZWUocHJpdi5taWdyYXRpb25fbGlzdHMpO1xuIDc4MTpcdFx0cmV0dXJuIGFwcGxpZWQgKiBQQUdFX1NJWkU7XG4gNzgyOlx0fVxuIDc4MzpcdFxuIDc4NDpcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUge1xuIDc4NTpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4gNzg2Olx0XHR1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkO1xuIDc4NzpcdH07XG4gNzg4Olx0XG4gNzg5Olx0c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiA3OTA6XHRcdFx0c3RydWN0IGRhbW9zICpzKVxuIDc5MTpcdHtcbiA3OTI6XHRcdHJldHVybiAhZm9saW8gfHwgZm9saW8gPT0gcy1cdTAwM2VsYXN0X2FwcGxpZWQ7XG4gNzkzOlx0fVxuIDc5NDpcdFxuIDc5NTpcdHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDc5NjpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDc5NzpcdHtcbiA3OTg6XHRcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNzk5Olx0XHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVx1MDAzZXNjaGVtZTtcbiA4MDA6XHRcdHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQgPSBwcml2LVx1MDAzZXN6X2ZpbHRlcl9wYXNzZWQ7XG4gODAxOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuIDgwMjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA4MDM6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiA4MDQ6XHRcdHB0ZV90ICpzdGFydF9wdGUsICpwdGUsIHB0ZW50O1xuIDgwNTpcdFx0aW50IG5yO1xuIDgwNjpcdFxuIDgwNzpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MDg6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuIDgwOTpcdFx0aWYgKHB0bCkge1xuIDgxMDpcdFx0XHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcbiA4MTE6XHRcbiA4MTI6XHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiA4MTM6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDgxNDpcdFxuIDgxNTpcdFx0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQodm1hLCBhZGRyLCBwbWRlKTtcbiA4MTY6XHRcbiA4MTc6XHRcdFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxuIDgxODpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gODE5Olx0XG4gODIwOlx0XHRcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBOVUxMLCBwbWQpKVxuIDgyMTpcdFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiA4MjI6XHRcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiA4MjM6XHRcbiA4MjQ6XHRodWdlX3VubG9jazpcbiA4MjU6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA4MjY6XHRcdFx0cmV0dXJuIDA7XG4gODI3Olx0XHR9XG4gODI4Olx0I2VuZGlmXG4gODI5Olx0XHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDgzMDpcdFx0aWYgKCFzdGFydF9wdGUpXG4gODMxOlx0XHRcdHJldHVybiAwO1xuIDgzMjpcdFxuIDgzMzpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4gODM0Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4gODM1Olx0XG4gODM2Olx0XHRcdG5yID0gMTtcbiA4Mzc6XHRcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuIDgzODpcdFxuIDgzOTpcdFx0XHRpZiAocHRlX25vbmUocHRlbnQpIHx8ICFwdGVfcHJlc2VudChwdGVudCkpXG4gODQwOlx0XHRcdFx0Y29udGludWU7XG4gODQxOlx0XG4gODQyOlx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHZtYSwgYWRkciwgcHRlbnQpO1xuIDg0MzpcdFxuIDg0NDpcdFx0XHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXG4gODQ1Olx0XHRcdFx0Y29udGludWU7XG4gODQ2Olx0XG4gODQ3Olx0XHRcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxuIDg0ODpcdFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiA4NDk6XHRcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UocHRlbnQpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzOgoKKipEaXZpbmcgQmFjayBpbnRvIHRoZSBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGJhY2sgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHZpcnR1YWwgYWRkcmVzc2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoYXQgYG1tL2RhbW9uL3ZhZGRyLmNgIGZpbGUuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvcHRpbWl6aW5nLCBvciBwZXJoYXBzIGp1c3QgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGFuZCBob3cgaXQgaGFuZGxlcyB2aXJ0dWFsIGFkZHJlc3MgbWFuYWdlbWVudC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLCBhbiBhbGdvcml0aG0sIG9yIGEgc3VidGxlIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZy4gTGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBmaW5kIHdoYXQgSSBhbSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiA4NTE6XHRcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiA4NTI6XHRcdH1cbiA4NTM6XHRcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIDg1NDpcdFx0cmV0dXJuIDA7XG4gODU1Olx0fVxuIDg1NjpcdFxuIDg1NzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxuIDg1ODpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4gODU5Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4gODYwOlx0e1xuIDg2MTpcdFx0c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSBwcml2O1xuIDg2MjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gODYzOlx0XHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG4gODY0Olx0XHRcdC5wbWRfZW50cnkgPSBkYW1vc192YV9zdGF0X3BtZF9lbnRyeSxcbiA4NjU6XHRcdH07XG4gODY2Olx0XG4gODY3Olx0XHRwcml2LnNjaGVtZSA9IHM7XG4gODY4Olx0XHRwcml2LnN6X2ZpbHRlcl9wYXNzZWQgPSBzel9maWx0ZXJfcGFzc2VkO1xuIDg2OTpcdFxuIDg3MDpcdFx0aWYgKCFkYW1vc19vcHNfaGFzX2ZpbHRlcihzKSlcbiA4NzE6XHRcdFx0cmV0dXJuIDA7XG4gODcyOlx0XG4gODczOlx0XHRtbSA9IGRhbW9uX2dldF9tbSh0YXJnZXQpO1xuIDg3NDpcdFx0aWYgKCFtbSlcbiA4NzU6XHRcdFx0cmV0dXJuIDA7XG4gODc2Olx0XG4gODc3Olx0XHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXHUwMDNlYXIuc3RhcnQsIHItXHUwMDNlYXIuZW5kLCBcdTAwMjZ3YWxrX29wcywgXHUwMDI2cHJpdik7XG4gODc4Olx0XHRtbXB1dChtbSk7XG4gODc5Olx0XHRyZXR1cm4gMDtcbiA4ODA6XHR9XG4gODgxOlx0XG4gODgyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fdmFfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiA4ODM6XHRcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiA4ODQ6XHRcdFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXG4gODg1Olx0e1xuIDg4NjpcdFx0aW50IG1hZHZfYWN0aW9uO1xuIDg4NzpcdFxuIDg4ODpcdFx0c3dpdGNoIChzY2hlbWUtXHUwMDNlYWN0aW9uKSB7XG4gODg5Olx0XHRjYXNlIERBTU9TX1dJTExORUVEOlxuIDg5MDpcdFx0XHRtYWR2X2FjdGlvbiA9IE1BRFZfV0lMTE5FRUQ7XG4gODkxOlx0XHRcdGJyZWFrO1xuIDg5MjpcdFx0Y2FzZSBEQU1PU19DT0xEOlxuIDg5MzpcdFx0XHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MRDtcbiA4OTQ6XHRcdFx0YnJlYWs7XG4gODk1Olx0XHRjYXNlIERBTU9TX1BBR0VPVVQ6XG4gODk2Olx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9QQUdFT1VUO1xuIDg5NzpcdFx0XHRicmVhaztcbiA4OTg6XHRcdGNhc2UgREFNT1NfSFVHRVBBR0U6XG4gODk5Olx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9IVUdFUEFHRTtcbiA5MDA6XHRcdFx0YnJlYWs7XG4gOTAxOlx0XHRjYXNlIERBTU9TX05PSFVHRVBBR0U6XG4gOTAyOlx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9OT0hVR0VQQUdFO1xuIDkwMzpcdFx0XHRicmVhaztcbiA5MDQ6XHRcdGNhc2UgREFNT1NfQ09MTEFQU0U6XG4gOTA1Olx0XHRcdG1hZHZfYWN0aW9uID0gTUFEVl9DT0xMQVBTRTtcbiA5MDY6XHRcdFx0YnJlYWs7XG4gOTA3Olx0XHRjYXNlIERBTU9TX01JR1JBVEVfSE9UOlxuIDkwODpcdFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XG4gOTA5Olx0XHRcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG4gOTEwOlx0XHRjYXNlIERBTU9TX1NUQVQ6XG4gOTExOlx0XHRcdHJldHVybiBkYW1vc192YV9zdGF0KHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG4gOTEyOlx0XHRkZWZhdWx0OlxuIDkxMzpcdFx0XHQvKlxuIDkxNDpcdFx0XHQgKiBEQU1PUyBhY3Rpb25zIHRoYXQgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5ICYjMzk7dmFkZHImIzM5Oy5cbiA5MTU6XHRcdFx0ICovXG4gOTE2Olx0XHRcdHJldHVybiAwO1xuIDkxNzpcdFx0fVxuIDkxODpcdFxuIDkxOTpcdFx0cmV0dXJuIGRhbW9zX21hZHZpc2UodCwgciwgbWFkdl9hY3Rpb24pO1xuIDkyMDpcdH1cbiA5MjE6XHRcbiA5MjI6XHRzdGF0aWMgaW50IGRhbW9uX3ZhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuIDkyMzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbiA5MjQ6XHR7XG4gOTI1Olx0XG4gOTI2Olx0XHRzd2l0Y2ggKHNjaGVtZS1cdTAwM2VhY3Rpb24pIHtcbiA5Mjc6XHRcdGNhc2UgREFNT1NfUEFHRU9VVDpcbiA5Mjg6XHRcdFx0cmV0dXJuIGRhbW9uX2NvbGRfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcbiA5Mjk6XHRcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtbS9kYW1vbi92YWRkci5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1hbmFnZW1lbnQgd2l0aGluIERBTU9OLCBzcGVjaWZpY2FsbHkgdGhlIGB2YWRkci5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgdGFibGVzIGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHRoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgcGVyaGFwcyBzb21lIG5vdmVsIGFwcHJvYWNoZXMgdG8gc2FtcGxpbmcgb3IgbWFuYWdpbmcgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbnMgd2l0aGluIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgYmVpbmcgYWRkcmVzc2VkIGFuZCBpZiBpdCBpcyB1c2luZyBzcGVjaWFsIGFsZ29yaXRobXMgdG8gaGFuZGxlIG9yIGlnbm9yZSBjZXJ0YWluIG1lbW9yeSByZWdpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlci1sZXZlbCBWTSBjb3JlLCBhbmQgaWYgaXQgaXMgdXNpbmcgYW55IHNwZWNpZmljIGhvb2tzIG9yIGNhbGxiYWNrcy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGNsZXZlcm5lc3MgaGVyZSwgc2luY2UgREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbiBpcyB0byBtb25pdG9yIGFuZCBhY3Qgb24gbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgaXQgc2FtcGxlcyB0aGUgbWVtb3J5LiBBbmQgSSBhbSBjdXJpb3VzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGp1c3QgaG9va2luZyBpbnRvIGV4aXN0aW5nIFZNIGluZnJhc3RydWN0dXJlLCBvciBpZiBpdCBpcyBpbXBsZW1lbnRpbmcgaXRzIG93biBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGZvciBtYW5hZ2luZyB0aGUgbW9uaXRvcmVkIHJlZ2lvbnMuIE9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRcdFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xuIDkzMTpcdFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XG4gOTMyOlx0XHRcdHJldHVybiBkYW1vbl9jb2xkX3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG4gOTMzOlx0XHRkZWZhdWx0OlxuIDkzNDpcdFx0XHRicmVhaztcbiA5MzU6XHRcdH1cbiA5MzY6XHRcbiA5Mzc6XHRcdHJldHVybiBEQU1PU19NQVhfU0NPUkU7XG4gOTM4Olx0fVxuIDkzOTpcdFxuIDk0MDpcdHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4gOTQxOlx0e1xuIDk0MjpcdFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xuIDk0MzpcdFx0XHQuaWQgPSBEQU1PTl9PUFNfVkFERFIsXG4gOTQ0Olx0XHRcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcbiA5NDU6XHRcdFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcbiA5NDY6XHRcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbiA5NDc6XHRcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXG4gOTQ4Olx0XHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4gOTQ5Olx0XHRcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxuIDk1MDpcdFx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxuIDk1MTpcdFx0XHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcbiA5NTI6XHRcdH07XG4gOTUzOlx0XHQvKiBvcHMgZm9yIGZpeGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZXMgKi9cbiA5NTQ6XHRcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wc19mdmFkZHIgPSBvcHM7XG4gOTU1Olx0XHRpbnQgZXJyO1xuIDk1NjpcdFxuIDk1NzpcdFx0LyogRG9uJiMzOTt0IHNldCB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBmb3IgdGhlIGVudGlyZSBtYXBwaW5nICovXG4gOTU4Olx0XHRvcHNfZnZhZGRyLmlkID0gREFNT05fT1BTX0ZWQUREUjtcbiA5NTk6XHRcdG9wc19mdmFkZHIuaW5pdCA9IE5VTEw7XG4gOTYwOlx0XHRvcHNfZnZhZGRyLnVwZGF0ZSA9IE5VTEw7XG4gOTYxOlx0XG4gOTYyOlx0XHRlcnIgPSBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKTtcbiA5NjM6XHRcdGlmIChlcnIpXG4gOTY0Olx0XHRcdHJldHVybiBlcnI7XG4gOTY1Olx0XHRyZXR1cm4gZGFtb25fcmVnaXN0ZXJfb3BzKFx1MDAyNm9wc19mdmFkZHIpO1xuIDk2NjpcdH1cbiA5Njc6XHRcbiA5Njg6XHRzdWJzeXNfaW5pdGNhbGwoZGFtb25fdmFfaW5pdGNhbGwpO1xuIDk2OTpcdFxuIDk3MDpcdCNpbmNsdWRlIFwmIzM0O3Rlc3RzL3ZhZGRyLWt1bml0LmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgREFNT04mIzM5O3MgVmlydHVhbCBBZGRyZXNzIFNwYWNlIEFjY2VzcyBDaGVja3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFNT04sIHNwZWNpZmljYWxseSB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcsIGhhbmRsZXMgaXRzIGFjY2VzcyBjaGVja3MuIE15IGluaXRpYWwgcGxhbiBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBkYW1vbl92YV9jaGVja19hY2Nlc3Nlc2AgYW5kIGBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NgIGZ1bmN0aW9ucywgdGhleSBzb3VuZCBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBUbyBnZXQgc3RhcnRlZCwgSSYjMzk7bGwgaGVhZCBvdmVyIHRvIHRoZSBgbW0vZGFtb24vdmFkZHIuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgMzQwIHRvIDQwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY29udGV4dCBhbmQgYSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYmVoaW5kIHRob3NlIHR3byBmdW5jdGlvbnMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgZm9yd2FyZCB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGFjY2VzcyBjaGVja2luZyBzeXN0ZW0gaXMgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbiAzNDE6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDM0MjpcdFxuIDM0MzpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHtcbiAzNDY6XHRcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcbiAzNDc6XHRcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxuIDM0ODpcdFx0fTtcbiAzNDk6XHRcbiAzNTA6XHRcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xuIDM1MTpcdH1cbiAzNTI6XHRcbiAzNTM6XHQvKlxuIDM1NDpcdCAqIEZ1bmN0aW9ucyBmb3IgdGhlIGFjY2VzcyBjaGVja2luZyBvZiB0aGUgcmVnaW9uc1xuIDM1NTpcdCAqL1xuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gMzU4Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gMzU5Olx0XHRcdFx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiAzNjA6XHR7XG4gMzYxOlx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCwgci1cdTAwM2Vhci5lbmQpO1xuIDM2MjpcdFxuIDM2MzpcdFx0ZGFtb25fdmFfbWtvbGQobW0sIHItXHUwMDNlc2FtcGxpbmdfYWRkcik7XG4gMzY0Olx0fVxuIDM2NTpcdFxuIDM2NjpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gMzY3Olx0e1xuIDM2ODpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiAzNjk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDM3MDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiAzNzE6XHRcbiAzNzI6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiAzNzM6XHRcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4gMzc0Olx0XHRcdGlmICghbW0pXG4gMzc1Olx0XHRcdFx0Y29udGludWU7XG4gMzc2Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxuIDM3NzpcdFx0XHRcdF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2sobW0sIHIsIGN0eCk7XG4gMzc4Olx0XHRcdG1tcHV0KG1tKTtcbiAzNzk6XHRcdH1cbiAzODA6XHR9XG4gMzgxOlx0XG4gMzgyOlx0c3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSB7XG4gMzgzOlx0XHRib29sIHlvdW5nO1xuIDM4NDpcdH07XG4gMzg1Olx0XG4gMzg2Olx0c3RhdGljIGludCBkYW1vbl95b3VuZ19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDM4NzpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDM4ODpcdHtcbiAzODk6XHRcdHB0ZV90ICpwdGU7XG4gMzkwOlx0XHRwdGVfdCBwdGVudDtcbiAzOTE6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAzOTI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gMzkzOlx0XHRzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIDM5NDpcdFxuIDM5NTpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAzOTY6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4gMzk3Olx0XHRpZiAocHRsKSB7XG4gMzk4Olx0XHRcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xuIDM5OTpcdFxuIDQwMDpcdFx0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxuIDQwMTpcdFx0XHRcdGdvdG8gaHVnZV9vdXQ7XG4gNDAyOlx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4gNDAzOlx0XHRcdGlmICghZm9saW8pXG4gNDA0Olx0XHRcdFx0Z290byBodWdlX291dDtcbiA0MDU6XHRcdFx0aWYgKHBtZF95b3VuZyhwbWRlKSB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuIDQwNjpcdFx0XHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh3YWxrLVx1MDAzZW1tLFxuIDQwNzpcdFx0XHRcdFx0XHRcdGFkZHIpKVxuIDQwODpcdFx0XHRcdHByaXYtXHUwMDNleW91bmcgPSB0cnVlO1xuIDQwOTpcdGh1Z2Vfb3V0OlxuIDQxMDpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQxMTpcdFx0XHRyZXR1cm4gMDtcbiA0MTI6XHRcdH1cbiA0MTM6XHQjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIDQxNDpcdFxuIDQxNTpcdFx0cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVx1MDAzZW1tLCBwbWQsIGFkZHIsIFx1MDAyNnB0bCk7XG4gNDE2Olx0XHRpZiAoIXB0ZSlcbiA0MTc6XHRcdFx0cmV0dXJuIDA7XG4gNDE4Olx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gNDE5Olx0XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9kYW1vbi92YWRkci5jYCBmb3IgREFNT04gYW5kIFlvdW5nIEh1Z2VUTEIgSW50ZWdyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgaW50ZXJhY3Rpb24gb2YgREFNT04gd2l0aCBZb3VuZyBIdWdlVExCLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBoYW5kbGluZyB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeWAsIG9yIHBvdGVudGlhbGx5IGEgc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSwgdGhhdCB3aWxsIGhvcGVmdWxseSBpbGx1c3RyYXRlIGhvdyBEQU1PTiBpcyBtYW5hZ2luZyBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIFlvdW5nIEh1Z2VUTEIuIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlcmUgd2lsbCBiZSBhbiBlbnRyeSBwb2ludCBvciBzb21lIHNvcnQgb2YgaGFuZGxlciBmb3IgdGhpcy4gSXQgbWlnaHQgb2ZmZXIgY2x1ZXMgYXMgdG8gaG93IHRvIGVuaGFuY2UgREFNT04uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0XHRcdGdvdG8gb3V0O1xuIDQyMTpcdFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcbiA0MjI6XHRcdGlmICghZm9saW8pXG4gNDIzOlx0XHRcdGdvdG8gb3V0O1xuIDQyNDpcdFx0aWYgKHB0ZV95b3VuZyhwdGVudCkgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcbiA0MjU6XHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh3YWxrLVx1MDAzZW1tLCBhZGRyKSlcbiA0MjY6XHRcdFx0cHJpdi1cdTAwM2V5b3VuZyA9IHRydWU7XG4gNDI3Olx0b3V0OlxuIDQyODpcdFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XG4gNDI5Olx0XHRyZXR1cm4gMDtcbiA0MzA6XHR9XG4gNDMxOlx0XG4gNDMyOlx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiA0MzM6XHRzdGF0aWMgaW50IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiA0MzQ6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiA0MzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNDM2Olx0e1xuIDQzNzpcdFx0c3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiA0Mzg6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiA0Mzk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNDQwOlx0XHRzcGlubG9ja190ICpwdGw7XG4gNDQxOlx0XHRwdGVfdCBlbnRyeTtcbiA0NDI6XHRcbiA0NDM6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiA0NDQ6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIDQ0NTpcdFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4gNDQ2Olx0XHRcdGdvdG8gb3V0O1xuIDQ0NzpcdFxuIDQ0ODpcdFx0Zm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuIDQ0OTpcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiA0NTA6XHRcbiA0NTE6XHRcdGlmIChwdGVfeW91bmcoZW50cnkpIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4gNDUyOlx0XHQgICAgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay1cdTAwM2VtbSwgYWRkcikpXG4gNDUzOlx0XHRcdHByaXYtXHUwMDNleW91bmcgPSB0cnVlO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0NTY6XHRcbiA0NTc6XHRvdXQ6XG4gNDU4Olx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1OTpcdFx0cmV0dXJuIDA7XG4gNDYwOlx0fVxuIDQ2MTpcdCNlbHNlXG4gNDYyOlx0I2RlZmluZSBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTExcbiA0NjM6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDQ2NDpcdFxuIDQ2NTpcdHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gNDY2Olx0e1xuIDQ2NzpcdFx0c3RydWN0IGRhbW9uX3lvdW5nX3dhbGtfcHJpdmF0ZSBhcmcgPSB7XG4gNDY4Olx0XHRcdC55b3VuZyA9IGZhbHNlLFxuIDQ2OTpcdFx0fTtcbiA0NzA6XHRcbiA0NzE6XHRcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl95b3VuZ19vcHMgPSB7XG4gNDcyOlx0XHRcdC5wbWRfZW50cnkgPSBkYW1vbl95b3VuZ19wbWRfZW50cnksXG4gNDczOlx0XHRcdC5odWdldGxiX2VudHJ5ID0gZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeSxcbiA0NzQ6XHRcdH07XG4gNDc1Olx0XG4gNDc2Olx0XHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgJiM0MzsgMSwgXHUwMDI2ZGFtb25feW91bmdfb3BzLCBcdTAwMjZhcmcpO1xuIDQ3NzpcdFx0cmV0dXJuIGFyZy55b3VuZztcbiA0Nzg6XHR9XG4gNDc5Olx0XG4gNDgwOlx0LypcbiA0ODE6XHQgKiBDaGVjayB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGFjY2Vzc2VkIGFmdGVyIHRoZSBsYXN0IHByZXBhcmF0aW9uXG4gNDgyOlx0ICpcbiA0ODM6XHQgKiBtbVx0JiMzOTttbV9zdHJ1Y3QmIzM5OyBmb3IgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBzcGFjZVxuIDQ4NDpcdCAqIHJcdHRoZSByZWdpb24gdG8gYmUgY2hlY2tlZFxuIDQ4NTpcdCAqL1xuIDQ4NjpcdHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDQ4NzpcdFx0XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiA0ODg6XHR7XG4gNDg5Olx0XHRib29sIGFjY2Vzc2VkO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKCFtbSkge1xuIDQ5MjpcdFx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcbiA0OTM6XHRcdFx0cmV0dXJuO1xuIDQ5NDpcdFx0fVxuIDQ5NTpcdFxuIDQ5NjpcdFx0YWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cdTAwM2VzYW1wbGluZ19hZGRyKTtcbiA0OTc6XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgYWNjZXNzZWQpO1xuIDQ5ODpcdH1cbiA0OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gSHVnZSBQYWdlIFBURSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBEQU1PTiBoYW5kbGVzIG1ha2luZyBodWdlIHBhZ2UgUFRFcyAmIzM0O29sZCYjMzQ7LiAgQmVmb3JlLCB0aGUgY29kZSBkaXJlY3RseSBhY2Nlc3NlZCB0aGUgUFRFLCBjaGVja2VkIHRoZSB5b3VuZyBiaXQsIGFuZCB0aGVuIG1vZGlmaWVkIGl0LiBOb3csIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiwgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAuIFRoZSBjb3JlIGxvZ2ljIGlzIG5vdyBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoaXMgbmV3IGZ1bmN0aW9uLCB1c2luZyBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGJlZm9yZSBtYW5pcHVsYXRpb24uIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgcmVmYWN0b3JpbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBzcGVjaWZpY2FsbHkgJiMzNDtBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwmIzM0OyB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4gV2UmIzM5O3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBhbmQgbWFraW5nIHRoZW0gJiMzNDtvbGQuJiMzNDsgVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgc2NvcGUuICBJdCBzZWVtcyB0byBiZSBmaXhpbmcgb3IgY2hhbmdpbmcgaG93IGh1Z2V0bGIgUFRFIG1hbmlwdWxhdGlvbiBvY2N1cnMgd2l0aGluIERBTU9OLgoKSSBhbHNvIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3ltYm9scyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRgLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgaGVscGVyIGZ1bmN0aW9uLCBhbmQgbW9kaWZpZXMgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgLiAgV2UgYWxzbyBoYXZlIGBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5YCwgYGRhbW9uX3ZhX21rb2xkYCwgYW5kIGBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NgIGluIHRoaXMgZmlsZS4gTG9va2luZyBhdCB0aGUgY29kZSwgdGhleSBhbGwgYXBwZWFyIHRvIGJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGB2YWRkci5jYCwgd2hpY2ggbWFrZXMgdGhlbSBzcGVjaWZpYyB0byB0aGlzIERBTU9OIG1vZHVsZS4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBIVUdFVExCX1BBR0VgIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgaWYgaXQgaGFzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjEzOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTQyLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE0Mzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDUtXG5hcmNoL3NoL21tL0tjb25maWc6MTQ2OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDktXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTUxLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuLS1cbm1tL0tjb25maWctNjkxLVxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY5My1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4ODUKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogQ29uZmlybWVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgY2hlY2sgb2YgYGZzL0tjb25maWdgIGNvbmZpcm1lZCBgSFVHRVRMQkZTYCBpcyB0aGUga2V5LCBhbmQgaXQmIzM5O3MgdGllZCB0byBgSFVHRVRMQl9QQUdFYC4gU28sIGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgdGhlIGZvdW5kYXRpb24uIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBpbiBwbGF5LgoKTmV4dCwgSSBuZWVkIHRvIGVuc3VyZSB1c2Vyc3BhY2UgY29udHJvbCBpcyBlbmFibGVkLiBgREFNT05fU1lTRlNgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGF0LCBhbmQgaW5kZWVkLCBpdCBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSB0aGF0IFN5emthbGxlciB3aWxsIHVzZS4gTm93LCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBpbnN0cnVjdGlvbnMgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIGFic29sdXRlbHkuIFRoaXMgaXMgY3JpdGljYWwuCiogICBgUmVhc29uaW5nYDogWWVzLCB0aGUgbW9kaWZpY2F0aW9uIHRvIERBTU9OJiMzOTtzIGh1Z2V0bGIgcGFnZSBhY2Nlc3MgbW9uaXRvcmluZyBpbiBgbW0vZGFtb24vdmFkZHIuY2Agd2l0aCB0aG9zZSBmdW5jdGlvbnMgaXMgYSBiaWcgZGVhbC4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIFBURSBoYW5kbGluZyBhbmQgYWx0ZXJpbmcgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gc2F0aXNmaWVkLgoqICAgYEZvY3VzU3ltYm9sc2A6IEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBzeW1ib2xzIChgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYCwgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgLCBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9ta29sZGAsIGFuZCBgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzYCkgYXJlIGV4YWN0bHkgYXMgc3BlY2lmaWVkLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJIHJlLXZhbGlkYXRlZCB0aGF0IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBIVUdFVExCX1BBR0VgLCBhbmQgYEhVR0VUTEJGU2AgYXJlIGNvcnJlY3QgYW5kIHJlYWR5LgoKRXZlcnl0aGluZyBpcyBtZXRpY3Vsb3VzbHkgY2hlY2tlZCBhbmQgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIGZvciBodWdldGxiIGVudHJpZXMgaW4gbW0vZGFtb24vdmFkZHIuYyBieSBleHRyYWN0aW5nIGFuZCB1cGRhdGluZyB0aGUgaHVnZXRsYiBQVEUgY2xlYXJpbmcgYW5kIGFnaW5nIGxvZ2ljICh1c2luZyBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcikuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGludmFyaWFudCB2aW9sYXRpb25zIGluIGh1Z2V0bGIgUFRFIG1hbmlwdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIGZvciBodWdldGxiIGVudHJpZXMgaW4gbW0vZGFtb24vdmFkZHIuYyBieSBleHRyYWN0aW5nIGFuZCB1cGRhdGluZyB0aGUgaHVnZXRsYiBQVEUgY2xlYXJpbmcgYW5kIGFnaW5nIGxvZ2ljICh1c2luZyBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcikuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGludmFyaWFudCB2aW9sYXRpb25zIGluIGh1Z2V0bGIgUFRFIG1hbmlwdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHBhZ2UgYWdpbmcgaW4gREFNT04gKG1tL2RhbW9uL3ZhZGRyLmMpIGJ5IGludHJvZHVjaW5nIHRoZSBoZWxwZXIgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKCkgd2hpY2ggcHJvcGVybHkgY2xlYXJzIHRoZSBQVEUgdmlhIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKCkgYmVmb3JlIG1hcmtpbmcgaXQgb2xkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChlLmcuIGVudHJ5LCByZWZlcmVuY2VkLCBwc2l6ZSkgYXJlIHNjYWxhci9QVEUgdHlwZXMgZnVsbHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcGFnZS10YWJsZSBoYW5kbGluZyBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU0YjQ4Nzk2Mzk3ZDA0M2U4MzI3YzU2YzhjMjRmZDMzYzcxNDRiODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggZjg4NGQzZjc4ZjMwYS4uOTFhMGQ0NDFjMWY5NCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0yODMsMjIgJiM0MzsyODMsMjkgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogfQogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwomIzQzOwomIzQzOwlpZiAoIXB0ZV95b3VuZygqZW50cnkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7CiYjNDM7CSplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpOwomIzQzOwlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlib29sIHJlZmVyZW5jZWQgPSBmYWxzZTsKIAlwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7Ci0JdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7CiAKIAlmb2xpb19nZXQoZm9saW8pOwogCi0JaWYgKHB0ZV95b3VuZyhlbnRyeSkpIHsKLQkJcmVmZXJlbmNlZCA9IHRydWU7Ci0JCWVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTsKLQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7Ci0JfQotCiYjNDM7CXJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCAmYW1wO2VudHJ5KTsKIAlpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLAogCQkJCSAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSkKIAkJcmVmZXJlbmNlZCA9IHRydWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciBpdC4gVGhlIGdvYWwgaXMgdG8gYmUgZWZmaWNpZW50IHdpdGggb3VyIHJlc291cmNlcyBhbmQgbm90IHRyaWdnZXIgdW5uZWNlc3NhcnkgZnV6emluZyBydW5zLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBgZGlmZmAgaXRzZWxmLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaGFuZGxpbmcgaHVnZSBwYWdlcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBtYXJraW5nIHBhZ2VzIGFzICYjMzQ7b2xkJiMzNDsuCgpUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IHdhczoKYGBgYwpzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAoJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKewoJYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7CglwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7CglzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwoKCWZvbGlvX2dldChmb2xpbyk7CgoJaWYgKHB0ZV95b3VuZyhlbnRyeSkpIHsKCQlyZWZlcmVuY2VkID0gdHJ1ZTsKCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7CgkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7Cgl9CgpgYGAKClRoaXMgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm93IHJlYWQ6CgpgYGBjCiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCnN0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpCnsKCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwoKCWlmICghcHRlX3lvdW5nKCplbnRyeSkpCgkJcmV0dXJuIGZhbHNlOwoJKmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpOwoJKmVudHJ5ID0gcHRlX21rb2xkKCplbnRyeSk7CglzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7CglyZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCnsKCWJvb2wgcmVmZXJlbmNlZCA9IGZhbHNlOwoJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwoJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7Cglmb2xpb19nZXQoZm9saW8pOwoKCXJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCAmYW1wO2VudHJ5KTsKCWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCgkJCQkgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpCgkJcmVmZXJlbmNlZCA9IHRydWU7CmBgYAoKVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uLCBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYCwgd2hpY2ggaGFuZGxlcyB0aGUgJiMzNDtnZXQgYW5kIGNsZWFyJiMzNDsgb2YgdGhlIFBURSBhbmQgdGhlIHNldHRpbmcgb2YgaXQgdG8gJiMzNDtvbGQmIzM0Oy4gVGhlcmUgaXMgYWxzbyB0aGUgdXNlIG9mIGEgYGZvbGlvYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBjaGFuZ2UgKml0c2VsZiogZG9lc24mIzM5O3QgbG9vayBsaWtlIGFuIG9idmlvdXMgS01TQU4gdHJpZ2dlci4gV2UgYXJlIGVzc2VudGlhbGx5IG1vZGlmeWluZyBwYWdlIHRhYmxlIGVudHJpZXMgdG8gcmVmbGVjdCBhY2Nlc3MsIHdoaWNoIGlzIGEgY29tbW9uIG9wZXJhdGlvbi4gSG93ZXZlciwgdGhlIHVzZSBvZiBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGlzIHdoZXJlIG15IGF0dGVudGlvbiBpcy4gU2luY2UgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyYCBtaWdodCBoYXZlIHNvbWUgc3VidGxlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgbG9ja2luZyBpbnZvbHZlZCwgd2Ugd2lsbCBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGxlbWVudGF0aW9uLiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGlzIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBjYWxsZWQgZnJvbS4KClRvIGdhaW4gbW9yZSBjb250ZXh0LCBJJiMzOTtsbCBub3cgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL2RhbW9uL3ZhZGRyLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmaWxlcy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUga2V5IGlzIHRvIGFzc2VzcyBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBtZW1vcnkgaW50ZXJhY3Rpb25zIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBjYXRjaGluZy4gSWYgdGhlIGNvbnRleHQgbG9va3MgYmVuaWduLCB3ZSBjYW4gcHJvYmFibHkgaG9sZCBvZmYgb24gZGVkaWNhdGVkIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2h1Z2V0bGJfbWtvbGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz0yODY9c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjk4LVxubW0vZGFtb24vdmFkZHIuYzoyOTk6c3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2RhbW9uL3ZhZGRyLmMtMzAwLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi92YWRkci5jPTMyMD1zdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTMzMi1cbm1tL2RhbW9uL3ZhZGRyLmM6MzMzOlx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXHUwMDNlbW0sIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMzM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGluIGBtbS9kYW1vbi92YWRkci5jYCoqCgpPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgZGlzc2VjdGluZyB0aGlzIGBkYW1vbl9odWdldGxiX21rb2xkYCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBpdHMgY29udGV4dCB3aXRoaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtodWdldGxiJiMzNDsg4oCTIHRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLCBhbmQgdGhhdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGFuZCBob3cgREFNT04gaW50ZXJhY3RzLiBUaGUgJiMzNDtta29sZCYjMzQ7IHBhcnQgaGludHMgYXQgbWFya2luZyBwYWdlcyBhcyAmIzM0O29sZCwmIzM0OyB3aGljaCwgaW4gdGhlIERBTU9OIGNvbnRleHQsIGxpa2VseSBpbmRpY2F0ZXMgYSB0cmFuc2l0aW9uIG9yIHJlLWV2YWx1YXRpb24gaW4gdXNhZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbiwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdGhlIGNvbnNlcXVlbmNlcyBvZiBtYXJraW5nIHRoZXNlIGh1Z2V0bGIgcGFnZXMgYXMgJiMzNDtvbGQmIzM0OyBhcmUuCgpJIGV4cGVjdCB0byBzZWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBwZXJoYXBzIG1hbmlwdWxhdGlvbnMgcmVsYXRlZCB0byB0aGUgaHVnZSBwYWdlIG1hcHBpbmcsIGFuZCBwb3NzaWJseSBzb21lIGludm9sdmVtZW50IHdpdGggREFNT04mIzM5O3MgbW9uaXRvcmluZyBzdHJ1Y3R1cmVzLiBJIGFudGljaXBhdGUgd2UmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggaHVnZXRsYmZzIGFuZCBEQU1PTiYjMzk7cyBvcGVyYXRpb25zIGNvbmN1cnJlbnRseS4gVGhpcyBzZWN0aW9uJiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIHByb3ZpZGUgZGV0YWlscyBhYm91dCBob3cgREFNT04gc3BlY2lmaWNhbGx5IGhhbmRsZXMgaHVnZSBwYWdlcyB3aGljaCBoYXMgYWx3YXlzIGJlZW4gYSBrZXkgYXJlYSBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCBpdC4gTGV0JiMzOTtzIHN0YXJ0IHBhcnNpbmcgdGhhdCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdG91dDpcbiAyODE6XHRcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuIDI4MjpcdFx0cmV0dXJuIDA7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gMjg2Olx0c3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDI4NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxuIDI5MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjkzOlx0XHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG4gMjk0Olx0XHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcbiAyOTU6XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbiAyOTY6XHRcdHJldHVybiB0cnVlO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiAyOTk6XHRzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDMwMDpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiAzMDE6XHR7XG4gMzAyOlx0XHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiAzMDM6XHRcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiAzMDQ6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuIDMwNTpcdFxuIDMwNjpcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiAzMDc6XHRcbiAzMDg6XHRcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcdTAwMjZlbnRyeSk7XG4gMzA5Olx0XHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuIDMxMDpcdFx0XHRcdFx0ICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuIDMxMTpcdFx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiAzMTI6XHRcbiAzMTM6XHRcdGlmIChyZWZlcmVuY2VkKVxuIDMxNDpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuIDMxNTpcdFxuIDMxNjpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuIDMxNzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAzMTg6XHR9XG4gMzE5Olx0XG4gMzIwOlx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gMzIxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gMzIyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDMyMzpcdHtcbiAzMjQ6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiAzMjU6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAzMjY6XHRcdHB0ZV90IGVudHJ5O1xuIDMyNzpcdFxuIDMyODpcdFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVx1MDAzZW1tLCBwdGUpO1xuIDMyOTpcdFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4gMzMwOlx0XHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbiAzMzE6XHRcdFx0Z290byBvdXQ7XG4gMzMyOlx0XG4gMzMzOlx0XHRkYW1vbl9odWdldGxiX21rb2xkKHB0ZSwgd2Fsay1cdTAwM2VtbSwgd2Fsay1cdTAwM2V2bWEsIGFkZHIpO1xuIDMzNDpcdFxuIDMzNTpcdG91dDpcbiAzMzY6XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMzM3Olx0XHRyZXR1cm4gMDtcbiAzMzg6XHR9XG4gMzM5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0MQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogREFNT04gaHVnZXRsYiBQVEUgQWdpbmcgUmVmYWN0b3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBgZGFtb25faHVnZXRsYl9ta29sZCgpYCBwYXRjaCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciBLTVNBTiBjb25jZXJuLCBnaXZlbiB0aGUgd29yayBhcm91bmQgUFRFcy4gVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCBpcyBzdHJhaWdodGZvcndhcmQ6IGNoZWNrIGlmIHRoZSBQVEUgaXMgeW91bmcsIG1hcmsgaXQgb2xkIGlmIGl0IGlzLCBhbmQgdXBkYXRlLiBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0aGF0IGludG8gYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpYCB3aXRoIGEgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKClgIGNhbGwuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIHRoaXMgY2hhbmdlLgoKRmlyc3QsIEkgbWV0aWN1bG91c2x5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSB0byB2ZXJpZnkgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIGBlbnRyeWAgaXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2l0aCBgaHVnZV9wdGVwX2dldCgpYCwgYW5kIEkgc2VlIGl0IHBhc3NlZCBhcyBhIHBvaW50ZXIuIFRoZSBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKClgIGZ1bmN0aW9uIGl0c2VsZiBjaGVja3MgYHB0ZV95b3VuZygpYCAqYmVmb3JlKiBhbnkgbW9kaWZpY2F0aW9uLCBzbyB3ZSYjMzk7cmUgc2FmZSB0aGVyZS4gSXQgdGhlbiBwZXJmb3JtcyB0aGUgY2xlYXIgYW5kIHNldCBvcGVyYXRpb25zLCBidXQgaW1wb3J0YW50bHksIHRoZSB2YWx1ZXMgdXNlZCBhcmUgKmFsbCogZXhwbGljaXRseSBpbml0aWFsaXplZCwgbm8gY29tcGxleCBzdHJ1Y3R1cmVzLCBubyBhbGxvY2F0aW9ucywgYW5kIG5vIGNvcGllcyB0byB1c2Vyc3BhY2Ug4oCTIGEgYmlnIHJlbGllZi4KCkkgdGhlbiB3ZW50IHRocm91Z2ggdGhlIGNvbW1vbiBpc3N1ZXMgd2l0aCB0aGlzIGtpbmQgb2Ygd29yay4gVGhlIHZhcmlhYmxlcyBhcmUgYmFzaWMgdHlwZXMgYW5kIGZ1bGx5IGluaXRpYWxpemVkLiBUaGlzIGlzbiYjMzk7dCB3aGVyZSBLTVNBTiBzaGluZXMuIFRoaXMga2luZCBvZiBwYXRjaCBpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYnVncywgd2hpY2ggS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgTU0gYXNzZXJ0aW9ucyBzaG91bGQgY2F0Y2guIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZCBoZXJlLgoKVGhlcmVmb3JlLCBhZnRlciB0aGF0IGRlZXAgZGl2ZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBjcml0ZXJpYSBmb3IgS01TQU4gYXBwbGljYWJpbGl0eSDigJMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIOKAkyBhcmUgYWxsICpub3QqIHByZXNlbnQuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgcG9zZXMgbm8gcmlzayBvZiB0aGUgcHJvYmxlbXMgS01TQU4gc3BlY2lmaWNhbGx5IGFkZHJlc3Nlcy4gVGhlIG9sZCBgZGFtb25faHVnZXRsYl9ta29sZGAgZnVuY3Rpb24gaGFkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBhcyB3ZWxsLiBUaGUgcmVmYWN0b3JpbmcgaW1wcm92ZXMgdGhhdCBieSB1c2luZyBtb3JlIHJlbGlhYmxlIEFQSXMgaW4gdGhlIG1tIHN1YnN5c3RlbS4KClNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBwYWdlIGFnaW5nIGluIERBTU9OIChtbS9kYW1vbi92YWRkci5jKSBieSBpbnRyb2R1Y2luZyB0aGUgaGVscGVyIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpIHdoaWNoIHByb3Blcmx5IGNsZWFycyB0aGUgUFRFIHZpYSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpIGJlZm9yZSBtYXJraW5nIGl0IG9sZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoZS5nLiBlbnRyeSwgcmVmZXJlbmNlZCwgcHNpemUpIGFyZSBzY2FsYXIvUFRFIHR5cGVzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHBhZ2UtdGFibGUgaGFuZGxpbmcgYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBwYWdlIGFnaW5nIGluIERBTU9OIChtbS9kYW1vbi92YWRkci5jKSBieSBpbnRyb2R1Y2luZyB0aGUgaGVscGVyIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpIHdoaWNoIHByb3Blcmx5IGNsZWFycyB0aGUgUFRFIHZpYSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpIGJlZm9yZSBtYXJraW5nIGl0IG9sZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoZS5nLiBlbnRyeSwgcmVmZXJlbmNlZCwgcHNpemUpIGFyZSBzY2FsYXIvUFRFIHR5cGVzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHBhZ2UtdGFibGUgaGFuZGxpbmcgYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjA1LjAwMTc1NjMxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTE3MjI4MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25faHVnZXRsYl9wdGVwX21rb2xkXCIsXG4gICAgXCJkYW1vbl9odWdldGxiX21rb2xkXCIsXG4gICAgXCJkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5XCIsXG4gICAgXCJkYW1vbl92YV9ta29sZFwiLFxuICAgIFwiZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBwYWdlIGFnaW5nIGluIERBTU9OIChtbS9kYW1vbi92YWRkci5jKSBieSBpbnRyb2R1Y2luZyB0aGUgaGVscGVyIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZCgpIHdoaWNoIHByb3Blcmx5IGNsZWFycyB0aGUgUFRFIHZpYSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpIGJlZm9yZSBtYXJraW5nIGl0IG9sZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoZS5nLiBlbnRyeSwgcmVmZXJlbmNlZCwgcHNpemUpIGFyZSBzY2FsYXIvUFRFIHR5cGVzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHBhZ2UtdGFibGUgaGFuZGxpbmcgYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgZm9yIGh1Z2V0bGIgZW50cmllcyBpbiBtbS9kYW1vbi92YWRkci5jIGJ5IGV4dHJhY3RpbmcgYW5kIHVwZGF0aW5nIHRoZSBodWdldGxiIFBURSBjbGVhcmluZyBhbmQgYWdpbmcgbG9naWMgKHVzaW5nIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMgaW4gaHVnZXRsYiBQVEUgbWFuaXB1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTowNS4wMDE3NjQwMDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDE3OTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0YjQ4Nzk2Mzk3ZDA0M2U4MzI3YzU2YzhjMjRmZDMzYzcxNDRiODBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjo1NTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtMjgzLDIyICsyODMsMjkgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbitzdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICplbnRyeSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4rXFxuK1xcdGlmICghcHRlX3lvdW5nKCplbnRyeSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xcbitcXHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcXG4rXFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsICplbnRyeSwgcHNpemUpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcXG4gXFx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XFxuIFxcbiBcXHRmb2xpb19nZXQoZm9saW8pO1xcbiBcXG4tXFx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcXG4tXFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuLVxcdFxcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcXG4tXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XFxuLVxcdH1cXG4tXFxuK1xcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcXHUwMDI2ZW50cnkpO1xcbiBcXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcXG4gXFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjA1LjY0MjY4ODEwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTU1OTk3NDk3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX21rb2xkXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRiNDg3OTYzOTdkMDQzZTgzMjdjNTZjOGMyNGZkMzNjNzE0NGI4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggZjg4NGQzZjc4ZjMwYS4uOTFhMGQ0NDFjMWY5NCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0yODMsMjIgKzI4MywyOSBAQCBzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4rXG4rXHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG4rXHQqZW50cnkgPSBwdGVfbWtvbGQoKmVudHJ5KTtcbitcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCAqZW50cnksIHBzaXplKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiBcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXG4gXHRmb2xpb19nZXQoZm9saW8pO1xuIFxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4rXHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXHUwMDI2ZW50cnkpO1xuIFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbiBcdFx0XHRcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuIFx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjA1LjY0MjY5MTY3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1ODIxOTQzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBwYXRjaDpcblxuKipBbmFseXppbmcgdGhlIERBTU9OIHZhZGRyLmMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgcmV2aWV3IHJlcXVlc3QuIFRoZSB0YXJnZXQgZmlsZSBpcyBgbW0vZGFtb24vdmFkZHIuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0g4oCTIHNwZWNpZmljYWxseSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvciksIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoLiBUaW1lIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgZ2V0IGEgZ29vZCBncmFzcCBvZiB0aGUgY29udGV4dC5cblxuTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgdGhlIGRpZmYgb3BlbiBhbmQgcmVhbGx5IGV4YW1pbmUgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBmaWxlLiBUaGVuIEkgbmVlZCB0byBzZWUgdGhlIHJlbGF0ZWQgZmlsZXMuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSByZW1pbmQgbXlzZWxmIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJ2xsIHByb2JhYmx5IHB1bGwgdXAgYG1tL2RhbW9uL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbiBwbGF5LiBJJ2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRob3NlIHF1aWNrbHkgb3Blbi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OCwiT3V0cHV0VG9rZW5zIjo2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MTAuMjI0ODg4NDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzU6XFx0XFx0aWYgKCFwdGUpXFxuIDI3NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjc3OlxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlKSkpXFxuIDI3ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjc5OlxcdFxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbiAyODA6XFx0b3V0OlxcbiAyODE6XFx0XFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XFxuIDI4MjpcXHRcXHRyZXR1cm4gMDtcXG4gMjgzOlxcdH1cXG4gMjg0OlxcdFxcbiAyODU6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gMjg2OlxcdHN0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gMjg3OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICplbnRyeSlcXG4gMjg4OlxcdHtcXG4gMjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRpZiAoIXB0ZV95b3VuZygqZW50cnkpKVxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTM6XFx0XFx0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xcbiAyOTQ6XFx0XFx0KmVudHJ5ID0gcHRlX21rb2xkKCplbnRyeSk7XFxuIDI5NTpcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7XFxuIDI5NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gMzAwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDMwMTpcXHR7XFxuIDMwMjpcXHRcXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcXG4gMzAzOlxcdFxcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcXG4gMzA0OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXFx1MDAyNmVudHJ5KTtcXG4gMzA5OlxcdFxcdGlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsXFxuIDMxMDpcXHRcXHRcXHRcXHRcXHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcXG4gMzExOlxcdFxcdFxcdHJlZmVyZW5jZWQgPSB0cnVlO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHRpZiAocmVmZXJlbmNlZClcXG4gMzE0OlxcdFxcdFxcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcXG4gMzE3OlxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXFx1MDAzZXZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjEwLjIyNDk4MjkzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzg4NjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwOTUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG4tLVxcbm1tL2RhbW9uL01ha2VmaWxlPTM9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxubW0vZGFtb24vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxubW0vZGFtb24vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5PXN0YXRpYyBERUZJTkVfTVVURVgoZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzozMDpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcXG5tbS9kYW1vbi9jb3JlLmMtMzEtXFxubW0vZGFtb24vY29yZS5jPTMyPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFtb25fcmVnaW9uX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9kYW1vbi9jb3JlLmMtMzMtXFxubW0vZGFtb24vY29yZS5jOjM0Oi8qIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGFtb25fb3BzX2xvY2sgd2l0aCBpZCBzbWFsbGVyIHRoYW4gTlJfREFNT05fT1BTICovXFxubW0vZGFtb24vY29yZS5jLTM1LXN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01My1cXG5tbS9kYW1vbi9jb3JlLmM6NTQ6XFx0aWYgKGlkIFxcdTAwM2U9IE5SX0RBTU9OX09QUylcXG5tbS9kYW1vbi9jb3JlLmMtNTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo2MzogKiBkYW1vbl9yZWdpc3Rlcl9vcHMoKSAtIFJlZ2lzdGVyIGEgbW9uaXRvcmluZyBvcGVyYXRpb25zIHNldCB0byBEQU1PTi5cXG5tbS9kYW1vbi9jb3JlLmMtNjQtICogQG9wczpcXHRtb25pdG9yaW5nIG9wZXJhdGlvbnMgc2V0IHRvIHJlZ2lzdGVyLlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTcxPWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NC1cXG5tbS9kYW1vbi9jb3JlLmM6NzU6XFx0aWYgKG9wcy1cXHUwMDNlaWQgXFx1MDAzZT0gTlJfREFNT05fT1BTKVxcbm1tL2RhbW9uL2NvcmUuYy03Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05OD1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMS1cXG5tbS9kYW1vbi9jb3JlLmM6MTAyOlxcdGlmIChpZCBcXHUwMDNlPSBOUl9EQU1PTl9PUFMpXFxubW0vZGFtb24vY29yZS5jLTEwMy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxMy0gKiBAcjpcXHRcXHRSZWdpb24gdG8gZ2V0IHRoZSBhY2Nlc3MgZnJlcXVlbmN5IG9mLlxcbm1tL2RhbW9uL2NvcmUuYzozMTQ6ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IG9mIEByLlxcbm1tL2RhbW9uL2NvcmUuYy0zMTUtICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDk9dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzcyLVxcbm1tL2RhbW9uL2NvcmUuYzozNzM6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtMzc0LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM4OT1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMS1cXHRyZWdpb24tXFx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NDAyOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmMtNDAzLVxcdFxcdHJlZ2lvbi1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9pbnNlcnRfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDMwLVxcbm1tL2RhbW9uL2NvcmUuYzo0MzE6I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmMtNDMyLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NzQ1PXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzYxLVxcdCAqIG5leHRfYXBwbHlfc2lzIHdpbGwgYmUgc2V0IHdoZW4ga2RhbW9uZCBzdGFydHMuICBXaGlsZSBrZGFtb25kIGlzXFxubW0vZGFtb24vY29yZS5jOjc2MjpcXHQgKiBydW5uaW5nLCBpdCB3aWxsIGFsc28gdXBkYXRlZCB3aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBEQU1PTiBjb250ZXh0LFxcbm1tL2RhbW9uL2NvcmUuYy03NjMtXFx0ICogb3IgZGFtb25fYXR0cnMgYXJlIHVwZGF0ZWQuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9OTAxPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05MzAtXFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQgPSAxO1xcbm1tL2RhbW9uL2NvcmUuYzo5MzE6XFx0Y3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gREFNT05fTUlOX1JFR0lPTl9TWjtcXG5tbS9kYW1vbi9jb3JlLmMtOTMyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXFxubW0vZGFtb24vY29yZS5jOjExMDg6ICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXFxubW0vZGFtb24vY29yZS5jLTExMDktICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTU9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjM0LSAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xcbm1tL2RhbW9uL2NvcmUuYzoxMjM1OiAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxcbm1tL2RhbW9uL2NvcmUuYy0xMjM2LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MzctXFx0XFx0bnJfcHJvYmVzKys7XFxubW0vZGFtb24vY29yZS5jOjE0Mzg6XFx0aWYgKG5yX3Byb2JlcyBcXHUwMDNlIERBTU9OX01BWF9QUk9CRVMpXFxubW0vZGFtb24vY29yZS5jLTE0MzktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3OTE9c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc5Ny1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNzk4OlxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jLTE3OTktXFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MjgtXFx0XFx0c3dpdGNoIChzcmNfZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxubW0vZGFtb24vY29yZS5jOjE4Mjk6XFx0XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9jb3JlLmMtMTgzMC1cXHRcXHRcXHRuZXdfZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9IHNyY19maWx0ZXItXFx1MDAzZW1lbWNnX2lkO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4Nzk9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg4OS1cXHQvKiBub2RlX2VsaWdpYmxlX21lbV9icCBtZXRyaWMgcmVxdWlyZXMgUEFERFIgb3BzICovXFxubW0vZGFtb24vY29yZS5jOjE4OTA6XFx0aWYgKHNyYy1cXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xcbm1tL2RhbW9uL2NvcmUuYy0xODkxLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5Mzc9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk1My0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTk1NDogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmM6MTk1NTogKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmM6MTk1NjogKiBAc3JjOlxcdFRoZSBjb21taXQgc291cmNlIERBTU9OIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTE5NTctICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTUxPXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE2MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjE2MTogKiBkYW1vbl9pc19ydW5uaW5nKCkgLSBSZXR1cm5zIGlmIGEgZ2l2ZW4gREFNT04gY29udGV4dCBpcyBydW5uaW5nLlxcbm1tL2RhbW9uL2NvcmUuYzoyMTYyOiAqIEBjdHg6XFx0VGhlIERBTU9OIGNvbnRleHQgdG8gc2VlIGlmIHJ1bm5pbmcuXFxubW0vZGFtb24vY29yZS5jLTIxNjMtICpcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTY2PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE3Ni0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjE3NzogKiBkYW1vbl9rZGFtb25kX3BpZCgpIC0gUmV0dXJuIHBpZCBvZiBhIGdpdmVuIERBTU9OIGNvbnRleHQncyB3b3JrZXIgdGhyZWFkLlxcbm1tL2RhbW9uL2NvcmUuYzoyMTc4OiAqIEBjdHg6XFx0VGhlIERBTU9OIGNvbnRleHQgb2YgdGhlIHF1ZXN0aW9uLlxcbm1tL2RhbW9uL2NvcmUuYy0yMTc5LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE4Mj1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxOTMtLyoqXFxubW0vZGFtb24vY29yZS5jOjIxOTQ6ICogZGFtb25fY2FsbCgpIC0gSW52b2tlIGEgZ2l2ZW4gZnVuY3Rpb24gb24gREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkuXFxubW0vZGFtb24vY29yZS5jOjIxOTU6ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cXG5tbS9kYW1vbi9jb3JlLmMtMjE5Ni0gKiBAY29udHJvbDpcXHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSBjYWxsIHJlcXVlc3QuXFxubW0vZGFtb24vY29yZS5jLTIxOTctICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE5ODogKiBBc2sgREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkgb2YgQGN0eCB0byBjYWxsIGEgZnVuY3Rpb24gd2l0aCBhblxcbm1tL2RhbW9uL2NvcmUuYy0yMTk5LSAqIGFyZ3VtZW50IGRhdGEgdGhhdCByZXNwZWN0aXZlbHkgcGFzc2VkIHZpYSBcXHUwMDI2ZGFtb25fY2FsbF9jb250cm9sLVxcdTAwM2VmbiBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjE0PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjQ1LSAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXFxubW0vZGFtb24vY29yZS5jOjIyNDY6ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXFxubW0vZGFtb24vY29yZS5jLTIyNDctICogQGNvbnRyb2w6XFx0Q29udHJvbCB2YXJpYWJsZSBvZiB0aGUgd2FsayByZXF1ZXN0Llxcbm1tL2RhbW9uL2NvcmUuYy0yMjQ4LSAqXFxubW0vZGFtb24vY29yZS5jOjIyNDk6ICogQXNrIERBTU9OIHdvcmtlciB0aHJlYWQgKGtkYW1vbmQpIG9mIEBjdHggdG8gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lvblxcbm1tL2RhbW9uL2NvcmUuYy0yMjUwLSAqIHRoYXQgdGhlIGtkYW1vbmQgd2lsbCBhcHBseSBEQU1PUyBhY3Rpb24gdG8sIGFuZCB3YWl0IHVudGlsIHRoZSBrZGFtb25kXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjI5Mz1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzE1LVxcdFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MjMxNjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jLTIzMTctXFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gci1cXHUwMDNlcHJvYmVfaGl0c1tpXTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MzQtICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkXFxubW0vZGFtb24vY29yZS5jOjI0MzU6ICogcmVnaW9ucywgREFNT04gc2tpcHMgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gdGhlIHJlZ2lvbnMgdGhhdCBjaGFyZ2VkXFxubW0vZGFtb24vY29yZS5jLTI0MzYtICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY4Mj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjkwLVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjI2OTE6XFx0ICogV2UgcGxhbiB0byBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgcGVyIGtkYW1vbmQsIGFzIERBTU9OIHN5c2ZzXFxubW0vZGFtb24vY29yZS5jLTI2OTItXFx0ICogaW1wbGllcyB3aXRoICducl9jb250ZXh0cycgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yOTg4LVxcbm1tL2RhbW9uL2NvcmUuYzoyOTg5OiNpZmRlZiBDT05GSUdfREFNT05fUEFERFJcXG5tbS9kYW1vbi9jb3JlLmMtMjk5MC0vKlxcbm1tL2RhbW9uL2NvcmUuYy0yOTkxLSAqIGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoKSAtIENhbGN1bGF0ZSByYXcgZWxpZ2libGUgYnl0ZXMgcGVyIG5vZGUuXFxubW0vZGFtb24vY29yZS5jOjI5OTI6ICogQGM6XFx0XFx0VGhlIERBTU9OIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTI5OTMtICogQHM6XFx0XFx0VGhlIHNjaGVtZS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDAxLSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXFxubW0vZGFtb24vY29yZS5jOjMwMDI6ICogb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREFNT05fUEFERFIgaXMgZW5hYmxlZC4gSXQgYWxzbyByZXF1aXJlcyB0aGVcXG5tbS9kYW1vbi9jb3JlLmMtMzAwMy0gKiBjb250ZXh0IHRvIGJlIHVzaW5nIFBBRERSIG9wZXJhdGlvbnMgZm9yIG1lYW5pbmdmdWwgcmVzdWx0cy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwNzQtXFxubW0vZGFtb24vY29yZS5jOjMwNzU6XFx0aWYgKGMtXFx1MDAzZW9wcy5pZCAhPSBEQU1PTl9PUFNfUEFERFIpXFxubW0vZGFtb24vY29yZS5jLTMwNzYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA4OC19XFxubW0vZGFtb24vY29yZS5jOjMwODk6I2Vsc2UgLyogQ09ORklHX0RBTU9OX1BBRERSICovXFxubW0vZGFtb24vY29yZS5jLTMwOTAtc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA5NC19XFxubW0vZGFtb24vY29yZS5jOjMwOTU6I2VuZGlmIC8qIENPTkZJR19EQU1PTl9QQUREUiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0zMDk2LSNlbHNlIC8qIENPTkZJR19OVU1BICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM2Nz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDA3LVxcbm1tL2RhbW9uL2NvcmUuYzozNDA4OiNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jLTM0MDktc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM2LVxcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNDM3OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXFxubW0vZGFtb24vY29yZS5jLTM0MzgtXFx0XFx0bC1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldICogc3pfbCArIHItXFx1MDAzZXByb2JlX2hpdHNbaV1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDYxPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1MTItICogbWF4X25yX3JlZ2lvbnMgdG8gYSBudW1iZXIgdGhhdCBsb3dlciB0aGFuIHRoZSBjdXJyZW50IG51bWJlciBvZiByZWdpb25zXFxubW0vZGFtb24vY29yZS5jOjM1MTM6ICogd2hpbGUgREFNT04gaXMgcnVubmluZy4gIEZvciBzdWNoIGEgY2FzZSwgcmVwZWF0IG1lcmdpbmcgdW50aWwgdGhlIGxpbWl0IGlzXFxubW0vZGFtb24vY29yZS5jLTM1MTQtICogbWV0IHdoaWxlIGluY3JlYXNpbmcgQHRocmVzaG9sZCB1cCB0byBwb3NzaWJsZSBtYXhpbXVtIGxldmVsLlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM1MTY9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzU0Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzU0MzojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYy0zNTQ0LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzYwPXN0YXRpYyB2b2lkIGtkYW1vbmRfdXNsZWVwKHVuc2lnbmVkIGxvbmcgdXNlY3MpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc2Ny1cXG5tbS9kYW1vbi9jb3JlLmM6Mzc2ODojaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYy0zNzY5LXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00MTI2PWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MTQyLSAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXFxubW0vZGFtb24vY29yZS5jOjQxNDM6ICogQHI6XFx0XFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0Llxcbm1tL2RhbW9uL2NvcmUuYy00MTQ0LSAqIEBhY2Nlc3NlZDpcXHRXaGV0aGVyIHRoZSByZWdpb24gaGFzIGFjY2Vzc2VkIGR1cmluZyBsYXN0IHNhbXBsaW5nIGludGVydmFsLlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQxNTE9dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDE1Ny0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDE1ODogKiBkYW1vbl9pbml0aWFsaXplZCgpIC0gUmV0dXJuIGlmIERBTU9OIGlzIHJlYWR5IHRvIGJlIHVzZWQuXFxubW0vZGFtb24vY29yZS5jLTQxNTktICpcXG5tbS9kYW1vbi9jb3JlLmM6NDE2MDogKiBSZXR1cm46IHRydWUgaWYgREFNT04gaXMgcmVhZHkgdG8gYmUgdXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbm1tL2RhbW9uL2NvcmUuYy00MTYxLSAqL1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yLS8qXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozOiAqIERBTU9OLWJhc2VkIExSVS1saXN0cyBTb3J0aW5nXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00LSAqL1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xOS0vKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjA6ICogRW5hYmxlIG9yIGRpc2FibGUgREFNT05fTFJVX1NPUlQuXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMS0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjI6ICogWW91IGNhbiBlbmFibGUgREFNT05fTFJVX1NPUlQgYnkgc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgYXNcXG5tbS9kYW1vbi9scnVfc29ydC5jOjIzOiAqIGBgWWBgLiAgU2V0dGluZyBpdCBhcyBgYE5gYCBkaXNhYmxlcyBEQU1PTl9MUlVfU09SVC4gIE5vdGUgdGhhdFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQ6ICogREFNT05fTFJVX1NPUlQgY291bGQgZG8gbm8gcmVhbCBtb25pdG9yaW5nIGFuZCBMUlUtbGlzdHMgc29ydGluZyBkdWUgdG8gdGhlXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNS0gKiB3YXRlcm1hcmtzLWJhc2VkIGFjdGl2YXRpb24gY29uZGl0aW9uLiAgUmVmZXIgdG8gYmVsb3cgZGVzY3JpcHRpb25zIGZvciB0aGVcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mjg9c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMC0vKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzE6ICogTWFrZSBEQU1PTl9MUlVfU09SVCByZWFkcyB0aGUgaW5wdXQgcGFyYW1ldGVycyBhZ2FpbiwgZXhjZXB0IGBgZW5hYmxlZGBgLlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzItICpcXG5tbS9kYW1vbi9scnVfc29ydC5jOjMzOiAqIElucHV0IHBhcmFtZXRlcnMgdGhhdCB1cGRhdGVkIHdoaWxlIERBTU9OX0xSVV9TT1JUIGlzIHJ1bm5pbmcgYXJlIG5vdFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQ6ICogYXBwbGllZCBieSBkZWZhdWx0LiAgT25jZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBZYGAsIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNS0gKiByZWFkcyB2YWx1ZXMgb2YgcGFyYW1ldGVycyBleGNlcHQgYGBlbmFibGVkYGAgYWdhaW4uICBPbmNlIHRoZSByZS1yZWFkaW5nIGlzXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNi0gKiBkb25lLCB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBOYGAuICBJZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIGZvdW5kIHdoaWxlXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzogKiB0aGUgcmUtcmVhZGluZywgREFNT05fTFJVX1NPUlQgd2lsbCBiZSBkaXNhYmxlZC5cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzk9c3RhdGljIGJvb2wgY29tbWl0X2lucHV0cyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00My0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDQ6ICogV2hpbGUga2VlcGluZyB0aGUgY2FwcyB0aGF0IHNldCBieSBvdGhlciBxdW90YXMsIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NS0gKiBhdXRvbWF0aWNhbGx5IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzPW1vZHVsZV9wYXJhbShhY3RpdmVfbWVtX2JwLCB1bG9uZywgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTU3LSAqXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1ODogKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMgYGBZYGAsIERBTU9OX0xSVV9TT1JUIGF1dG9tYXRpY2FsbHkgdHVuZXNcXG5tbS9kYW1vbi9scnVfc29ydC5jOjU5OiAqIERBTU9OJ3Mgc2FtcGxpbmcgYW5kIGFnZ3JlZ2F0aW9uIGludGVydmFscy4gIFRoZSBhdXRvLXR1bmluZyBhaW1zIHRvIGNhcHR1cmVcXG5tbS9kYW1vbi9scnVfc29ydC5jOjYwOiAqIG1lYW5pbmdmdWwgYW1vdW50IG9mIGFjY2VzcyBldmVudHMgaW4gZWFjaCBEQU1PTi1zbmFwc2hvdCwgd2hpbGUga2VlcGluZyB0aGVcXG5tbS9kYW1vbi9scnVfc29ydC5jLTYxLSAqIHNhbXBsaW5nIGludGVydmFsIDUgbWlsbGlzZWNvbmRzIGluIG1pbmltdW0sIGFuZCAxMCBzZWNvbmRzIGluIG1heGltdW0uXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTgyPW1vZHVsZV9wYXJhbShmaWx0ZXJfeW91bmdfcGFnZXMsIGJvb2wsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy04Ny0gKiBJZiBhIG1lbW9yeSByZWdpb24gaXMgYWNjZXNzZWQgaW4gZnJlcXVlbmN5IG9mIHRoaXMgb3IgaGlnaGVyLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6ODg6ICogREFNT05fTFJVX1NPUlQgaWRlbnRpZmllcyB0aGUgcmVnaW9uIGFzIGhvdCwgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQgb24gdGhlXFxubW0vZGFtb24vbHJ1X3NvcnQuYy04OS0gKiBMUlUgbGlzdCwgc28gdGhhdCBpdCBjb3VsZCBub3QgYmUgcmVjbGFpbWVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gIDUwJSBieVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz05Mz1tb2R1bGVfcGFyYW0oaG90X3RocmVzX2FjY2Vzc19mcmVxLCB1bG9uZywgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTk3LSAqXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo5ODogKiBJZiBhIG1lbW9yeSByZWdpb24gaXMgbm90IGFjY2Vzc2VkIGZvciB0aGlzIG9yIGxvbmdlciB0aW1lLCBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtOTktICogaWRlbnRpZmllcyB0aGUgcmVnaW9uIGFzIGNvbGQsIGFuZCBtYXJrIGl0IGFzIHVuYWNjZXNzZWQgb24gdGhlIExSVSBsaXN0LCBzb1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMDY9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9scnVfc29ydF9xdW90YSA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTE1LX07XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMTY6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfVElNRV9RVU9UQShkYW1vbl9scnVfc29ydF9xdW90YSk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMTctXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xMTg9c3RhdGljIHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIGRhbW9uX2xydV9zb3J0X3dtYXJrcyA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTI0LX07XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMjU6REVGSU5FX0RBTU9OX01PRFVMRVNfV01BUktTX1BBUkFNUyhkYW1vbl9scnVfc29ydF93bWFya3MpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTI2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTI3PXN0YXRpYyBzdHJ1Y3QgZGFtb25fYXR0cnMgZGFtb25fbHJ1X3NvcnRfbW9uX2F0dHJzID0ge1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMzMtfTtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjEzNDpERUZJTkVfREFNT05fTU9EVUxFU19NT05fQVRUUlNfUEFSQU1TKGRhbW9uX2xydV9zb3J0X21vbl9hdHRycyk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMzUtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTEzOC0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTM5OiAqIFRoZSBzdGFydCBwaHlzaWNhbCBhZGRyZXNzIG9mIG1lbW9yeSByZWdpb24gdGhhdCBEQU1PTl9MUlVfU09SVCB3aWxsIGRvIHdvcmtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE0MC0gKiBhZ2FpbnN0LiAgQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSdzIGVudGlyZSBwaHlzaWNhbCBtZW1vcnkgaXMgdXNlZCBhcyB0aGVcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTQ0PW1vZHVsZV9wYXJhbShtb25pdG9yX3JlZ2lvbl9zdGFydCwgdWxvbmcsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNDgtICpcXG5tbS9kYW1vbi9scnVfc29ydC5jOjE0OTogKiBUaGUgZW5kIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IHJlZ2lvbiB0aGF0IERBTU9OX0xSVV9TT1JUIHdpbGwgZG8gd29ya1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTUwLSAqIGFnYWluc3QuICBCeSBkZWZhdWx0LCB0aGUgc3lzdGVtJ3MgZW50aXJlIHBoeXNpY2FsIG1lbW9yeSBpcyB1c2VkIGFzIHRoZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0xNTQ9bW9kdWxlX3BhcmFtKG1vbml0b3JfcmVnaW9uX2VuZCwgdWxvbmcsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNTYtLypcXG5tbS9kYW1vbi9scnVfc29ydC5jOjE1NzogKiBTY2FsZSBmYWN0b3IgZm9yIERBTU9OX0xSVV9TT1JUIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNTgtICpcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTYzPXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9scnVfc29ydF9ob3Rfc3RhdDtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjE2NDpERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19TVEFUU19QQVJBTVMoZGFtb25fbHJ1X3NvcnRfaG90X3N0YXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNjUtXFx0XFx0bHJ1X3NvcnRfdHJpZWRfaG90X3JlZ2lvbnMsIGxydV9zb3J0ZWRfaG90X3JlZ2lvbnMsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTE2OD1zdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fbHJ1X3NvcnRfY29sZF9zdGF0O1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MTY5OkRFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9scnVfc29ydF9jb2xkX3N0YXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xNzAtXFx0XFx0bHJ1X3NvcnRfdHJpZWRfY29sZF9yZWdpb25zLCBscnVfc29ydGVkX2NvbGRfcmVnaW9ucyxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIwOS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjIxMDovKiBDcmVhdGUgYSBEQU1PTi1iYXNlZCBvcGVyYXRpb24gc2NoZW1lIGZvciBob3QgbWVtb3J5IHJlZ2lvbnMgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIxMS1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZSh1bnNpZ25lZCBpbnQgaG90X3RocmVzKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMTgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMTk6LyogQ3JlYXRlIGEgREFNT04tYmFzZWQgb3BlcmF0aW9uIHNjaGVtZSBmb3IgY29sZCBtZW1vcnkgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjIwLXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19jb2xkX3NjaGVtZSh1bnNpZ25lZCBpbnQgY29sZF90aHJlcylcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yODQtXFx0cGFyYW1fY3R4LVxcdTAwM2VhZGRyX3VuaXQgPSBhZGRyX3VuaXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyODU6XFx0cGFyYW1fY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KERBTU9OX01JTl9SRUdJT05fU1ogLyBhZGRyX3VuaXQsIDEpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjg2LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00NDE9TU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NDI6XFx0XFxcIlNjYWxlIGZhY3RvciBmb3IgREFNT05fTFJVX1NPUlQgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSlcXFwiKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ0My1cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDg2PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4NzpcXHRcXFwiRW5hYmxlIG9yIGRpc2FibGUgREFNT05fTFJVX1NPUlQgKGRlZmF1bHQ6IGRpc2FibGVkKVxcXCIpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDg4LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz01MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGtkYW1vbmRfcGlkX3BhcmFtX29wcyA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTE3LS8qXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MTg6ICogUElEIG9mIHRoZSBEQU1PTiB0aHJlYWRcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUxOS0gKlxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTIwOiAqIElmIERBTU9OX0xSVV9TT1JUIGlzIGVuYWJsZWQsIHRoaXMgYmVjb21lcyB0aGUgUElEIG9mIHRoZSB3b3JrZXIgdGhyZWFkLlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTIxLSAqIEVsc2UsIC0xLlxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yLS8qXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzozOiAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBNb2R1bGVzXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy00LSAqL1xcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xMC0vKlxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6MTE6ICogQWxsb2NhdGUsIHNldCwgYW5kIHJldHVybiBhIERBTU9OIGNvbnRleHQgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTItICogQGN0eHA6XFx0UG9pbnRlciB0byBzYXZlIHRoZSBwb2ludCB0byB0aGUgbmV3bHkgY3JlYXRlZCBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jPTE1PWludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yNC1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjI1OlxcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1BBRERSKSkge1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjYtXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMi0vKlxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6MzogKiBDb21tb24gQ29kZSBmb3IgREFNT04gTW9kdWxlc1xcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNC0gKi9cXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNy1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjg6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19NT05fQVRUUlNfUEFSQU1TKGF0dHJzKVxcdFxcdFxcdFxcXFxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTktXFx0bW9kdWxlX3BhcmFtX25hbWVkKHNhbXBsZV9pbnRlcnZhbCwgYXR0cnMuc2FtcGxlX2ludGVydmFsLFxcdFxcXFxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMTctXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoxODojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1RJTUVfUVVPVEEocXVvdGEpXFx0XFx0XFx0XFxcXFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMTktXFx0bW9kdWxlX3BhcmFtX25hbWVkKHF1b3RhX21zLCBxdW90YS5tcywgdWxvbmcsIDA2MDApO1xcdFxcdFxcXFxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMjItXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoyMzojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1FVT1RBUyhxdW90YSlcXHRcXHRcXHRcXFxcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDoyNDpcXHRERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19USU1FX1FVT1RBKHF1b3RhKVxcdFxcdFxcdFxcXFxcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTI1LVxcdG1vZHVsZV9wYXJhbV9uYW1lZChxdW90YV9zeiwgcXVvdGEuc3osIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTI2LVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6Mjc6I2RlZmluZSBERUZJTkVfREFNT05fTU9EVUxFU19XTUFSS1NfUEFSQU1TKHdtYXJrcylcXHRcXHRcXHRcXFxcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0yOC1cXHRtb2R1bGVfcGFyYW1fbmFtZWQod21hcmtzX2ludGVydmFsLCB3bWFya3MuaW50ZXJ2YWwsIHVsb25nLFxcdFxcXFxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtMzMtXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaDozNDojZGVmaW5lIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhzdGF0LCB0cnlfbmFtZSxcXHRcXHRcXFxcXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC0zNS1cXHRcXHRzdWNjX25hbWUsIHF0X2V4Y2VlZF9uYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MTAuMzA4ODc2NDM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NDg0NTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIEh1Z2VUTEIgUGFnZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kICp3aHkqLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHksIGxpbmUgYnkgbGluZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS9kYW1vbi92YWRkci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCB0aGUgY29kZSBjaGVja2VkIGlmIGEgUFRFIChQYWdlIFRhYmxlIEVudHJ5KSB3YXMgeW91bmcgdXNpbmcgYHB0ZV95b3VuZygpYC4gSWYgc28sIGl0IG1hcmtlZCB0aGUgUFRFIGFzIG9sZCB3aXRoIGBwdGVfbWtvbGQoKWAgYW5kIHRoZW4gdXBkYXRlZCB0aGUgUFRFIHVzaW5nIGBzZXRfaHVnZV9wdGVfYXQoKWAuXG5cbk5vdywgdGhlIGNvZGUgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGNhbGxzIGBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcigpYCAqYmVmb3JlKiBtb2RpZnlpbmcgdGhlIFBURSBhbmQgY2FsbGluZyBgc2V0X2h1Z2VfcHRlX2F0KClgLiBUaGUgaW1wbGljYXRpb24gb2YgY2FsbGluZyBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGZpcnN0IGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbk15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSBjb2RlIGNoYW5nZS4gVGhpcyBjb3VsZCBiZSBkdWUgdG8gYXJjaGl0ZWN0dXJhbCBudWFuY2VzIG9yIGh1Z2V0bGItc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBJdCdzIGxpa2VseSB0aGF0IGRpcmVjdGx5IG1vZGlmeWluZyB0aGUgSHVnZSBUTEIgUFRFIHVzaW5nIGBzZXRfaHVnZV9wdGVfYXQoKWAgd2l0aG91dCBmaXJzdCBwZXJmb3JtaW5nIGEgZ2V0LWFuZC1jbGVhciBvcGVyYXRpb24gbWlnaHQgbm90IGJlIGNvcnJlY3Qgb24gYWxsIGFyY2hpdGVjdHVyZXMuIEl0IGNvdWxkIGJyZWFrIFRMQiBjb25zaXN0ZW5jeSBvciB0aGUgc2VtYW50aWNzIG9mIEh1Z2VUTEIgUFRFIHVwZGF0ZXMuIEVpdGhlciB3YXksIGNhbGxpbmcgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyYCBpcyBjcml0aWNhbCB0byBwZXJmb3JtIGNvcnJlY3QgdXBkYXRlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLlxuXG5JJ2xsIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBkYW1vbl9odWdldGxiX21rb2xkYCB3aXRoaW4gYG1tL2RhbW9uL3ZhZGRyLmNgIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG1ha2Ugc3VyZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NToxNC44OTM3MjcxOTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGJvb2wgcmVmZXJlbmNlZCA9IGZhbHNlO1xcbiAzMDM6XFx0XFx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xcbiAzMDQ6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdHJlZmVyZW5jZWQgPSBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlLCBtbSwgdm1hLCBhZGRyLCBcXHUwMDI2ZW50cnkpO1xcbiAzMDk6XFx0XFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxcbiAzMTE6XFx0XFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdGlmIChyZWZlcmVuY2VkKVxcbiAzMTQ6XFx0XFx0XFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xcbiAzMTc6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuIDMyMTpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIDMyMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAzMjM6XFx0e1xcbiAzMjQ6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gMzI1OlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMzI2OlxcdFxcdHB0ZV90IGVudHJ5O1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbiAzMjk6XFx0XFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbiAzMzA6XFx0XFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXFxuIDMzMTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzMyOlxcdFxcbiAzMzM6XFx0XFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXFx1MDAzZW1tLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRvdXQ6XFxuIDMzNjpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAzMzc6XFx0XFx0cmV0dXJuIDA7XFxuIDMzODpcXHR9XFxuIDMzOTpcXHQjZWxzZVxcbiAzNDA6XFx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcXG4gMzQxOlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIDM0MjpcXHRcXG4gMzQzOlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDM0NDpcXHR7XFxuIDM0NTpcXHRcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fbWtvbGRfb3BzID0ge1xcbiAzNDY6XFx0XFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcXG4gMzQ3OlxcdFxcdFxcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeSxcXG4gMzQ4OlxcdFxcdH07XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xcbiAzNTE6XFx0fVxcbiAzNTI6XFx0XFxuIDM1MzpcXHQvKlxcbiAzNTQ6XFx0ICogRnVuY3Rpb25zIGZvciB0aGUgYWNjZXNzIGNoZWNraW5nIG9mIHRoZSByZWdpb25zXFxuIDM1NTpcXHQgKi9cXG4gMzU2OlxcdFxcbiAzNTc6XFx0c3RhdGljIHZvaWQgX19kYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIDM1OTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDM2MDpcXHR7XFxuIDM2MTpcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQpO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHRkYW1vbl92YV9ta29sZChtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkcik7XFxuIDM2NDpcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDM2NzpcXHR7XFxuIDM2ODpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbiAzNjk6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIDM3MDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuIDM3MzpcXHRcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcXG4gMzc0OlxcdFxcdFxcdGlmICghbW0pXFxuIDM3NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzc2OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxcbiAzNzc6XFx0XFx0XFx0XFx0X19kYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVjayhtbSwgciwgY3R4KTtcXG4gMzc4OlxcdFxcdFxcdG1tcHV0KG1tKTtcXG4gMzc5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MTQuODkzODg0MTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEzNzE1NzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBIdWdldGxiIEludGVncmF0aW9uOiBGdXp6aW5nIEZlYXNpYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGBkYW1vbl92YV9ta29sZGAgaXMgbGlua2VkIHRvIGBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5YCwgd2hpY2ggdGhlbiBjYWxscyBgZGFtb25faHVnZXRsYl9ta29sZGAgYW5kIHVsdGltYXRlbHkgYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAuIElzIHRoaXMgcGF0aCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZvciBmdXp6aW5nPyBGcm9tIGEgcHJlbGltaW5hcnkgc2NhbiwgdGhpcyBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgZ29vZCB0YXJnZXQuXG5cblRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrKSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgd29ya2luZyBpbiBjb25qdW5jdGlvbiB3aXRoIGh1Z2V0bGIgcGFnZXMuIFJlYWNoYWJsZT8gWWVzLCBEQU1PTiBpcyBjb25maWd1cmFibGUgdGhyb3VnaCBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fVkFERFJgLCBldGMuKSBvciBkZWJ1Z2ZzIG9yIG1vZHVsZXMsIGFuZCBodWdldGxiIGlzIHByZXR0eSBzdGFuZGFyZCBpbiBtb3N0IGVudmlyb25tZW50cyBhbmQgdGVzdGVkLiBXZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gUUVNVSBvciBldmVuIEdDRSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMgYXJlLiBJJ2xsIGNoZWNrIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gTGV0J3MgZGlnIGludG8gYG1tL2RhbW9uL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RBTU9OX1ZBRERSYC4gSXQgZGVwZW5kcyBvbiBgREFNT04gXHUwMDI2XHUwMDI2IE1NVWAsIGFuZCBgSFVHRVRMQl9QQUdFYCBpcyB0aGUgc3RhbmRhcmQgaHVnZXRsYiBjb25maWcsIHNvIGl0IG5lZWRzIGBYODYgfHwgLi4uYC5cblxuVGhlIGZpbGUgbW9kaWZpZWQgaXMgb25seSBgbW0vZGFtb24vdmFkZHIuY2AuIFRoaXMgaXMgZ29vZCwgd2UgYXJlIHN0YXJ0aW5nIGluIGEgY29udGFpbmVkIGFyZWEuIExldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgaW52b2x2ZWQuIFRoZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4gYXJlOiBgZGFtb25faHVnZXRsYl9ta29sZGAgYW5kIGBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRgIChhIHN0YXRpYyBoZWxwZXIpLCB3aXRoIGNhbGxlcnMgYGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfbWtvbGRgLCBhbmQgYGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrc2AuIEknbGwgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucywgYW5kIG90aGVyIGZ1bmN0aW9ucyBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgYXJlIHByb3Blcmx5IGV4cG9zZWQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGFjY2Vzc2libGUgZm9yIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDk2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MjAuMDMxMDQ1MzE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdH1cXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0b3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuIDYwMzpcXHRcXHRpbHggPSB2bWFfc3RhcnRfcGdvZmYodm1hKSBcXHUwMDNlXFx1MDAzZSBvcmRlcjtcXG4gNjA0OlxcdFxcdGlseCArPSBsaW5lYXJfcGFnZV9kZWx0YSh2bWEsIGFkZHIpIFxcdTAwM2VcXHUwMDNlIG9yZGVyO1xcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGVzdHMtXFx1MDAzZW5yX2Rlc3RzOyBpKyspXFxuIDYwNzpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gZGVzdHMtXFx1MDAzZXdlaWdodF9hcnJbaV07XFxuIDYwODpcXHRcXG4gNjA5OlxcdFxcdC8qIElmIHRoZSB0b3RhbCB3ZWlnaHRzIGFyZSBzb21laG93IDAsIGRvbid0IG1pZ3JhdGUgYXQgYWxsICovXFxuIDYxMDpcXHRcXHRpZiAoIXdlaWdodF90b3RhbClcXG4gNjExOlxcdFxcdFxcdHJldHVybjtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0dGFyZ2V0ID0gaWx4ICUgd2VpZ2h0X3RvdGFsO1xcbiA2MTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRlc3RzLVxcdTAwM2Vucl9kZXN0czsgaSsrKSB7XFxuIDYxNTpcXHRcXHRcXHRpZiAodGFyZ2V0IFxcdTAwM2MgZGVzdHMtXFx1MDAzZXdlaWdodF9hcnJbaV0pXFxuIDYxNjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNjE3OlxcdFxcdFxcdHRhcmdldCAtPSBkZXN0cy1cXHUwMDNld2VpZ2h0X2FycltpXTtcXG4gNjE4OlxcdFxcdH1cXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0LyogSWYgdGhlIGZvbGlvIGlzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IG5vZGUsIGRvbid0IGRvIGFueXRoaW5nICovXFxuIDYyMTpcXHRcXHRpZiAoZm9saW9fbmlkKGZvbGlvKSA9PSBkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnJbaV0pXFxuIDYyMjpcXHRcXHRcXHRyZXR1cm47XFxuIDYyMzpcXHRcXG4gNjI0OlxcdGlzb2xhdGU6XFxuIDYyNTpcXHRcXHRpZiAoIWZvbGlvX2lzb2xhdGVfbHJ1KGZvbGlvKSlcXG4gNjI2OlxcdFxcdFxcdHJldHVybjtcXG4gNjI3OlxcdFxcdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xcbiA2Mjg6XFx0XFx0XFx0XFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcXG4gNjI5OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bWlncmF0aW9uX2xpc3RzW2ldKTtcXG4gNjMwOlxcdH1cXG4gNjMxOlxcdFxcbiA2MzI6XFx0c3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDYzMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiA2MzQ6XFx0e1xcbiA2MzU6XFx0XFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuIDYzNjpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICptaWdyYXRpb25fbGlzdHMgPSBwcml2LVxcdTAwM2VtaWdyYXRpb25fbGlzdHM7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVxcdTAwM2VzY2hlbWU7XFxuIDYzODpcXHRcXHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMgPSBcXHUwMDI2cy1cXHUwMDNlbWlncmF0ZV9kZXN0cztcXG4gNjM5OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY0MDpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDY0MTpcXHRcXHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcXG4gNjQyOlxcdFxcdGludCBucjtcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA2NDU6XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxuIDY0NjpcXHRcXHRpZiAocHRsKSB7XFxuIDY0NzpcXHRcXHRcXHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0XFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcXG4gNjUwOlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDY1MTpcXHRcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay1cXHUwMDNldm1hLCBhZGRyLCBwbWRlKTtcXG4gNjUyOlxcdFxcdFxcdGlmICghZm9saW8pXFxuIDY1MzpcXHRcXHRcXHRcXHRnb3RvIGh1Z2Vfb3V0O1xcbiA2NTQ6XFx0XFx0XFx0aWYgKGRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHdhbGstXFx1MDAzZXZtYSwgYWRkciwgTlVMTCwgcG1kKSlcXG4gNjU1OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDY1NjpcXHRcXHRcXHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcXG4gNjU3OlxcdFxcdFxcdFxcdFxcdG1pZ3JhdGlvbl9saXN0cyk7XFxuIDY1ODpcXHRodWdlX291dDpcXG4gNjU5OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDY2MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjYxOlxcdFxcdH1cXG4gNjYyOlxcdCNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXFx1MDAzZW1tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbiA2NjU6XFx0XFx0aWYgKCFwdGUpXFxuIDY2NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjY3OlxcdFxcbiA2Njg6XFx0XFx0Zm9yICg7IGFkZHIgXFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4gNjY5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuIDY3MDpcXHRcXG4gNjcxOlxcdFxcdFxcdG5yID0gMTtcXG4gNjcyOlxcdFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNjczOlxcdFxcbiA2NzQ6XFx0XFx0XFx0aWYgKHB0ZV9ub25lKHB0ZW50KSB8fCAhcHRlX3ByZXNlbnQocHRlbnQpKVxcbiA2NzU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDY3NjpcXHRcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcXG4gNjc3OlxcdFxcdFxcdGlmICghZm9saW8pXFxuIDY3ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjc5OlxcdFxcdFxcdGlmIChkYW1vc192YV9maWx0ZXJfb3V0KHMsIGZvbGlvLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZSwgTlVMTCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjIwLjAzMTE2NTk3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjczNTc5NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHZhZGRyLmMgT3BlcmF0aW9ucyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGp1bXAgcmlnaHQgdG8gdGhlIGVuZCBvZiBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSB1c3VhbCBhcHByb2FjaCwgcmlnaHQ/IFdoZW4gdHJ5aW5nIHRvIGdyYXNwIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaG93IHRoZSByZWdpc3RyYXRpb24gbWVjaGFuaXNtcyB3b3JrLCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIGlzIG9mdGVuIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIGZpZ3VyZSB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgaXRzZWxmLCBhbG9uZyB3aXRoIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzc+KAlGhvdyBpdCBnZXRzIGhvb2tlZCBpbnRvIHRoZSBsYXJnZXIgREFNT04gZnJhbWV3b3Jr4oCUd2lsbCBiZSBsYWlkIGJhcmUgYXQgdGhlIGNvbmNsdXNpb24uIEl0J3MgdGhlIHN0YW5kYXJkIHBhdHRlcm4sIHJlYWxseTogZGVmaW5lIHRoZSBndXRzLCB0aGVuIHN0aXRjaCBpdCBhbGwgdG9nZXRoZXIuIFRpbWUgdG8gZ2V0IGEgc2Vuc2UgZm9yIGhvdyB0aGlzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIGlzIGJlaW5nIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjIyLjcwNDc0OTE3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0LypcXG4gNjkxOlxcdCAqIEZ1bmN0aW9ucyBmb3IgdGhlIHRhcmdldCB2YWxpZGl0eSBjaGVjayBhbmQgY2xlYW51cFxcbiA2OTI6XFx0ICovXFxuIDY5MzpcXHRcXG4gNjk0OlxcdHN0YXRpYyBib29sIGRhbW9uX3ZhX3RhcmdldF92YWxpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbiA2OTU6XFx0e1xcbiA2OTY6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbiA2OTc6XFx0XFxuIDY5ODpcXHRcXHR0YXNrID0gZGFtb25fZ2V0X3Rhc2tfc3RydWN0KHQpO1xcbiA2OTk6XFx0XFx0aWYgKHRhc2spIHtcXG4gNzAwOlxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcXG4gNzAxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA3MDI6XFx0XFx0fVxcbiA3MDM6XFx0XFxuIDcwNDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcwNTpcXHR9XFxuIDcwNjpcXHRcXG4gNzA3OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuIDcwODpcXHR7XFxuIDcwOTpcXHRcXHRwdXRfcGlkKHQtXFx1MDAzZXBpZCk7XFxuIDcxMDpcXHR9XFxuIDcxMTpcXHRcXG4gNzEyOlxcdCNpZm5kZWYgQ09ORklHX0FEVklTRV9TWVNDQUxMU1xcbiA3MTM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuIDcxNDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBpbnQgYmVoYXZpb3IpXFxuIDcxNTpcXHR7XFxuIDcxNjpcXHRcXHRyZXR1cm4gMDtcXG4gNzE3OlxcdH1cXG4gNzE4OlxcdCNlbHNlXFxuIDcxOTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19tYWR2aXNlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG4gNzIwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGludCBiZWhhdmlvcilcXG4gNzIxOlxcdHtcXG4gNzIyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiA3MjM6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IFBBR0VfQUxJR04oci1cXHUwMDNlYXIuc3RhcnQpO1xcbiA3MjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBsZW4gPSBQQUdFX0FMSUdOKGRhbW9uX3N6X3JlZ2lvbihyKSk7XFxuIDcyNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFwcGxpZWQ7XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdG1tID0gZGFtb25fZ2V0X21tKHRhcmdldCk7XFxuIDcyODpcXHRcXHRpZiAoIW1tKVxcbiA3Mjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDczMDpcXHRcXG4gNzMxOlxcdFxcdGFwcGxpZWQgPSBkb19tYWR2aXNlKG1tLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgPyAwIDogbGVuO1xcbiA3MzI6XFx0XFx0bW1wdXQobW0pO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRyZXR1cm4gYXBwbGllZDtcXG4gNzM1OlxcdH1cXG4gNzM2OlxcdCNlbmRpZlxcdC8qIENPTkZJR19BRFZJU0VfU1lTQ0FMTFMgKi9cXG4gNzM3OlxcdFxcbiA3Mzg6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuIDczOTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuIDc0MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkKVxcbiA3NDE6XFx0e1xcbiA3NDI6XFx0XFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xcbiA3NDM6XFx0XFx0c3RydWN0IGRhbW9zX3ZhX21pZ3JhdGVfcHJpdmF0ZSBwcml2O1xcbiA3NDQ6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIDc0NTpcXHRcXHRpbnQgbnJfZGVzdHM7XFxuIDc0NjpcXHRcXHRpbnQgbmlkO1xcbiA3NDc6XFx0XFx0Ym9vbCB1c2VfdGFyZ2V0X25pZDtcXG4gNzQ4OlxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbGllZCA9IDA7XFxuIDc0OTpcXHRcXHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMgPSBcXHUwMDI2cy1cXHUwMDNlbWlncmF0ZV9kZXN0cztcXG4gNzUwOlxcdFxcdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcXG4gNzUxOlxcdFxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcXG4gNzUyOlxcdFxcdFxcdC5wdGVfZW50cnkgPSBOVUxMLFxcbiA3NTM6XFx0XFx0fTtcXG4gNzU0OlxcdFxcbiA3NTU6XFx0XFx0dXNlX3RhcmdldF9uaWQgPSBkZXN0cy1cXHUwMDNlbnJfZGVzdHMgPT0gMDtcXG4gNzU2OlxcdFxcdG5yX2Rlc3RzID0gdXNlX3RhcmdldF9uaWQgPyAxIDogZGVzdHMtXFx1MDAzZW5yX2Rlc3RzO1xcbiA3NTc6XFx0XFx0cHJpdi5zY2hlbWUgPSBzO1xcbiA3NTg6XFx0XFx0cHJpdi5taWdyYXRpb25fbGlzdHMgPSBrbWFsbG9jX29ianMoKnByaXYubWlncmF0aW9uX2xpc3RzLCBucl9kZXN0cyk7XFxuIDc1OTpcXHRcXHRpZiAoIXByaXYubWlncmF0aW9uX2xpc3RzKVxcbiA3NjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHRcXG4gNzYyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbnJfZGVzdHM7IGkrKylcXG4gNzYzOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwcml2Lm1pZ3JhdGlvbl9saXN0c1tpXSk7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0bW0gPSBkYW1vbl9nZXRfbW0odGFyZ2V0KTtcXG4gNzY3OlxcdFxcdGlmICghbW0pXFxuIDc2ODpcXHRcXHRcXHRnb3RvIGZyZWVfbGlzdHM7XFxuIDc2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MjIuNzA1NTI4MTYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTQ5MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0cywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGZpZWxkIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgdmFkZHIuY2AgLSBMZXQncyBTZWUgV2hhdCdzIGF0IHRoZSBGaW5pc2gqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBtbS9kYW1vbi92YWRkci5jYCwgYW5kIEknbSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSwgbW9zdCByZWNlbnQsIG9yIG1vc3QgaW1wb3J0YW50IHN0dWZmLiBJIHdhbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkb25lICpsYXN0KiBpbiB0aGlzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50IG1vZHVsZSBmb3IgRGFtb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmaW5hbCBpbnRlcmFjdGlvbnMgb3IgY2xlYW4tdXAgbG9naWMsIG1heWJlIHRoZSBtYWluIGZ1bmN0aW9uIG9yIHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBrZXkgRGFtb24tc3BlY2lmaWMgb3BlcmF0aW9uIGludm9sdmluZyB2aXJ0dWFsIGFkZHJlc3Nlcy5cblxuSSdtIGtlZW4gdG8gZ3Jhc3AgdGhlIGNvbmNsdXNpb24gb2YgdGhlIGZ1bmN0aW9uLiBJcyBpdCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZT8gSXMgaXQgZG9pbmcgc29tZXRoaW5nIG1vcmUgc3VidGxlLCBsaWtlIHVwZGF0aW5nIHNvbWUgZ2xvYmFsIHN0YXRlPyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZXhpdCBjb25kaXRpb25zIGFuZCBhbnkgZmluYWwgZGF0YSBtYW5pcHVsYXRpb25zLiBHaXZlbiB0aGUgZmlsZW5hbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBtYW5pcHVsYXRpb25zIGFyZSBnb2luZyB0byBiZSByZWxhdGVkIHRvIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nIG9yIG1hbmlwdWxhdGlvbi4gUGVyaGFwcyBpdCBob2xkcyB0aGUgbWFpbiByb3V0aW5lPyBNYXliZSBhIGNsZWFudXAgcHJvY2VkdXJlPyBXaGF0ZXZlciBpdCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gdGhlIGNvbnRleHQgb2YgRGFtb24ncyBvdmVyYWxsIGdvYWxzLCB3aGljaCBJIGFzc3VtZSBhcmUgdG8gaGVscCB3aXRoIG1lbW9yeSBhY2Nlc3MsIG9wdGltaXphdGlvbiwgb3Igd2hhdGV2ZXIgdGhlIHByb2plY3QgaXMgYWJvdXQuIEknbSBjdXJpb3VzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIERhbW9uLWNlbnRyaWMgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgYXQgcGxheSBpbiB0aGlzIGZpbmFsIHBhcnQsIG9yIGlmIGl0J3MgcmVseWluZyBvbiBtb3JlIGdlbmVyYWwga2VybmVsIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MjUuMjYwNDYwMDYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQsIFxcdTAwMjZ3YWxrX29wcywgXFx1MDAyNnByaXYpO1xcbiA3NzE6XFx0XFx0bW1wdXQobW0pO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5yX2Rlc3RzOyBpKyspIHtcXG4gNzc0OlxcdFxcdFxcdG5pZCA9IHVzZV90YXJnZXRfbmlkID8gcy1cXHUwMDNldGFyZ2V0X25pZCA6IGRlc3RzLVxcdTAwM2Vub2RlX2lkX2FycltpXTtcXG4gNzc1OlxcdFxcdFxcdGFwcGxpZWQgKz0gZGFtb25fbWlncmF0ZV9wYWdlcyhcXHUwMDI2cHJpdi5taWdyYXRpb25fbGlzdHNbaV0sIG5pZCk7XFxuIDc3NjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNzc3OlxcdFxcdH1cXG4gNzc4OlxcdFxcbiA3Nzk6XFx0ZnJlZV9saXN0czpcXG4gNzgwOlxcdFxcdGtmcmVlKHByaXYubWlncmF0aW9uX2xpc3RzKTtcXG4gNzgxOlxcdFxcdHJldHVybiBhcHBsaWVkICogUEFHRV9TSVpFO1xcbiA3ODI6XFx0fVxcbiA3ODM6XFx0XFxuIDc4NDpcXHRzdHJ1Y3QgZGFtb3NfdmFfc3RhdF9wcml2YXRlIHtcXG4gNzg1OlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbiA3ODY6XFx0XFx0dW5zaWduZWQgbG9uZyAqc3pfZmlsdGVyX3Bhc3NlZDtcXG4gNzg3OlxcdH07XFxuIDc4ODpcXHRcXG4gNzg5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vc192YV9pbnZhbGlkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDc5MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuIDc5MTpcXHR7XFxuIDc5MjpcXHRcXHRyZXR1cm4gIWZvbGlvIHx8IGZvbGlvID09IHMtXFx1MDAzZWxhc3RfYXBwbGllZDtcXG4gNzkzOlxcdH1cXG4gNzk0OlxcdFxcbiA3OTU6XFx0c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDc5NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiA3OTc6XFx0e1xcbiA3OTg6XFx0XFx0c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuIDc5OTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMgPSBwcml2LVxcdTAwM2VzY2hlbWU7XFxuIDgwMDpcXHRcXHR1bnNpZ25lZCBsb25nICpzel9maWx0ZXJfcGFzc2VkID0gcHJpdi1cXHUwMDNlc3pfZmlsdGVyX3Bhc3NlZDtcXG4gODAxOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cXHUwMDNldm1hO1xcbiA4MDI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gODAzOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gODA0OlxcdFxcdHB0ZV90ICpzdGFydF9wdGUsICpwdGUsIHB0ZW50O1xcbiA4MDU6XFx0XFx0aW50IG5yO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgwODpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4gODA5OlxcdFxcdGlmIChwdGwpIHtcXG4gODEwOlxcdFxcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxcbiA4MTM6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHZtYSwgYWRkciwgcG1kZSk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdFxcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcXG4gODE4OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBOVUxMLCBwbWQpKVxcbiA4MjE6XFx0XFx0XFx0XFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbyk7XFxuIDgyMjpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG4gODIzOlxcdFxcbiA4MjQ6XFx0aHVnZV91bmxvY2s6XFxuIDgyNTpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA4MjY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgyNzpcXHRcXHR9XFxuIDgyODpcXHQjZW5kaWZcXG4gODI5OlxcdFxcdHN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gODMwOlxcdFxcdGlmICghc3RhcnRfcHRlKVxcbiA4MzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgzMjpcXHRcXG4gODMzOlxcdFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuIDgzNDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRcXHRuciA9IDE7XFxuIDgzNzpcXHRcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdFxcdGlmIChwdGVfbm9uZShwdGVudCkgfHwgIXB0ZV9wcmVzZW50KHB0ZW50KSlcXG4gODQwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NDE6XFx0XFxuIDg0MjpcXHRcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh2bWEsIGFkZHIsIHB0ZW50KTtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0XFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxcbiA4NDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg0NjpcXHRcXG4gODQ3OlxcdFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxcbiA4NDg6XFx0XFx0XFx0XFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbyk7XFxuIDg0OTpcXHRcXHRcXHRwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZShwdGVudCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NToyNS4yNjA2MTAwNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE4MTQ5MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpczpcblxuKipEaXZpbmcgQmFjayBpbnRvIHRoZSBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3Nlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGF0IGBtbS9kYW1vbi92YWRkci5jYCBmaWxlLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gdHJvdWJsZXNob290aW5nLCBvcHRpbWl6aW5nLCBvciBwZXJoYXBzIGp1c3QgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGFuZCBob3cgaXQgaGFuZGxlcyB2aXJ0dWFsIGFkZHJlc3MgbWFuYWdlbWVudC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUsIGFuIGFsZ29yaXRobSwgb3IgYSBzdWJ0bGUgYnVnIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB3aGF0IEkgYW0gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NToyOC40NDIxMDU4NzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7XFxuIDg1MTpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG4gODUyOlxcdFxcdH1cXG4gODUzOlxcdFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcbiA4NTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDg1NTpcXHR9XFxuIDg1NjpcXHRcXG4gODU3OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbiA4NTg6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbiA4NTk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3pfZmlsdGVyX3Bhc3NlZClcXG4gODYwOlxcdHtcXG4gODYxOlxcdFxcdHN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUgcHJpdjtcXG4gODYyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiA4NjM6XFx0XFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbiA4NjQ6XFx0XFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5LFxcbiA4NjU6XFx0XFx0fTtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0cHJpdi5zY2hlbWUgPSBzO1xcbiA4Njg6XFx0XFx0cHJpdi5zel9maWx0ZXJfcGFzc2VkID0gc3pfZmlsdGVyX3Bhc3NlZDtcXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0aWYgKCFkYW1vc19vcHNfaGFzX2ZpbHRlcihzKSlcXG4gODcxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0YXJnZXQpO1xcbiA4NzQ6XFx0XFx0aWYgKCFtbSlcXG4gODc1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQsIFxcdTAwMjZ3YWxrX29wcywgXFx1MDAyNnByaXYpO1xcbiA4Nzg6XFx0XFx0bW1wdXQobW0pO1xcbiA4Nzk6XFx0XFx0cmV0dXJuIDA7XFxuIDg4MDpcXHR9XFxuIDg4MTpcXHRcXG4gODgyOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3ZhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIDg4MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiA4ODQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWUsIHVuc2lnbmVkIGxvbmcgKnN6X2ZpbHRlcl9wYXNzZWQpXFxuIDg4NTpcXHR7XFxuIDg4NjpcXHRcXHRpbnQgbWFkdl9hY3Rpb247XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdHN3aXRjaCAoc2NoZW1lLVxcdTAwM2VhY3Rpb24pIHtcXG4gODg5OlxcdFxcdGNhc2UgREFNT1NfV0lMTE5FRUQ6XFxuIDg5MDpcXHRcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfV0lMTE5FRUQ7XFxuIDg5MTpcXHRcXHRcXHRicmVhaztcXG4gODkyOlxcdFxcdGNhc2UgREFNT1NfQ09MRDpcXG4gODkzOlxcdFxcdFxcdG1hZHZfYWN0aW9uID0gTUFEVl9DT0xEO1xcbiA4OTQ6XFx0XFx0XFx0YnJlYWs7XFxuIDg5NTpcXHRcXHRjYXNlIERBTU9TX1BBR0VPVVQ6XFxuIDg5NjpcXHRcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfUEFHRU9VVDtcXG4gODk3OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTg6XFx0XFx0Y2FzZSBEQU1PU19IVUdFUEFHRTpcXG4gODk5OlxcdFxcdFxcdG1hZHZfYWN0aW9uID0gTUFEVl9IVUdFUEFHRTtcXG4gOTAwOlxcdFxcdFxcdGJyZWFrO1xcbiA5MDE6XFx0XFx0Y2FzZSBEQU1PU19OT0hVR0VQQUdFOlxcbiA5MDI6XFx0XFx0XFx0bWFkdl9hY3Rpb24gPSBNQURWX05PSFVHRVBBR0U7XFxuIDkwMzpcXHRcXHRcXHRicmVhaztcXG4gOTA0OlxcdFxcdGNhc2UgREFNT1NfQ09MTEFQU0U6XFxuIDkwNTpcXHRcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MTEFQU0U7XFxuIDkwNjpcXHRcXHRcXHRicmVhaztcXG4gOTA3OlxcdFxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxuIDkwODpcXHRcXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcXG4gOTA5OlxcdFxcdFxcdHJldHVybiBkYW1vc192YV9taWdyYXRlKHQsIHIsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxuIDkxMDpcXHRcXHRjYXNlIERBTU9TX1NUQVQ6XFxuIDkxMTpcXHRcXHRcXHRyZXR1cm4gZGFtb3NfdmFfc3RhdCh0LCByLCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbiA5MTI6XFx0XFx0ZGVmYXVsdDpcXG4gOTEzOlxcdFxcdFxcdC8qXFxuIDkxNDpcXHRcXHRcXHQgKiBEQU1PUyBhY3Rpb25zIHRoYXQgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5ICd2YWRkcicuXFxuIDkxNTpcXHRcXHRcXHQgKi9cXG4gOTE2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MTc6XFx0XFx0fVxcbiA5MTg6XFx0XFxuIDkxOTpcXHRcXHRyZXR1cm4gZGFtb3NfbWFkdmlzZSh0LCByLCBtYWR2X2FjdGlvbik7XFxuIDkyMDpcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdHN0YXRpYyBpbnQgZGFtb25fdmFfc2NoZW1lX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXFxuIDkyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcbiA5MjY6XFx0XFx0c3dpdGNoIChzY2hlbWUtXFx1MDAzZWFjdGlvbikge1xcbiA5Mjc6XFx0XFx0Y2FzZSBEQU1PU19QQUdFT1VUOlxcbiA5Mjg6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX2NvbGRfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcXG4gOTI5OlxcdFxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjI4LjQ0MjIzNTM2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA0MTE2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG1tL2RhbW9uL3ZhZGRyLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50IHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IHRoZSBgdmFkZHIuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgY29tcG9uZW50IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlcyBhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCB0aGVyZSBhcmUgc29tZSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb25zIG9yIHBlcmhhcHMgc29tZSBub3ZlbCBhcHByb2FjaGVzIHRvIHNhbXBsaW5nIG9yIG1hbmFnaW5nIHZpcnR1YWwgYWRkcmVzcyByZWdpb25zIHdpdGhpbiB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGJlaW5nIGFkZHJlc3NlZCBhbmQgaWYgaXQgaXMgdXNpbmcgc3BlY2lhbCBhbGdvcml0aG1zIHRvIGhhbmRsZSBvciBpZ25vcmUgY2VydGFpbiBtZW1vcnkgcmVnaW9ucy4gSSdtIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlci1sZXZlbCBWTSBjb3JlLCBhbmQgaWYgaXQgaXMgdXNpbmcgYW55IHNwZWNpZmljIGhvb2tzIG9yIGNhbGxiYWNrcy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBjbGV2ZXJuZXNzIGhlcmUsIHNpbmNlIERBTU9OJ3MgY29yZSBmdW5jdGlvbiBpcyB0byBtb25pdG9yIGFuZCBhY3Qgb24gbWVtb3J5IGFjY2VzcyBwYXR0ZXJucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgaXQgc2FtcGxlcyB0aGUgbWVtb3J5LiBBbmQgSSBhbSBjdXJpb3VzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGp1c3QgaG9va2luZyBpbnRvIGV4aXN0aW5nIFZNIGluZnJhc3RydWN0dXJlLCBvciBpZiBpdCBpcyBpbXBsZW1lbnRpbmcgaXRzIG93biBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGZvciBtYW5hZ2luZyB0aGUgbW9uaXRvcmVkIHJlZ2lvbnMuIE9rYXksIGxldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTozMS42NDYzNTQ2NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9ob3Rfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcXG4gOTMxOlxcdFxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbiA5MzI6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX2NvbGRfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcXG4gOTMzOlxcdFxcdGRlZmF1bHQ6XFxuIDkzNDpcXHRcXHRcXHRicmVhaztcXG4gOTM1OlxcdFxcdH1cXG4gOTM2OlxcdFxcbiA5Mzc6XFx0XFx0cmV0dXJuIERBTU9TX01BWF9TQ09SRTtcXG4gOTM4OlxcdH1cXG4gOTM5OlxcdFxcbiA5NDA6XFx0c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4gOTQxOlxcdHtcXG4gOTQyOlxcdFxcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcXG4gOTQzOlxcdFxcdFxcdC5pZCA9IERBTU9OX09QU19WQUREUixcXG4gOTQ0OlxcdFxcdFxcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcXG4gOTQ1OlxcdFxcdFxcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXFxuIDk0NjpcXHRcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbiA5NDc6XFx0XFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXFxuIDk0ODpcXHRcXHRcXHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxcbiA5NDk6XFx0XFx0XFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXFxuIDk1MDpcXHRcXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcbiA5NTE6XFx0XFx0XFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl92YV9zY2hlbWVfc2NvcmUsXFxuIDk1MjpcXHRcXHR9O1xcbiA5NTM6XFx0XFx0Lyogb3BzIGZvciBmaXhlZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VzICovXFxuIDk1NDpcXHRcXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHNfZnZhZGRyID0gb3BzO1xcbiA5NTU6XFx0XFx0aW50IGVycjtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0XFx0LyogRG9uJ3Qgc2V0IHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIGZvciB0aGUgZW50aXJlIG1hcHBpbmcgKi9cXG4gOTU4OlxcdFxcdG9wc19mdmFkZHIuaWQgPSBEQU1PTl9PUFNfRlZBRERSO1xcbiA5NTk6XFx0XFx0b3BzX2Z2YWRkci5pbml0ID0gTlVMTDtcXG4gOTYwOlxcdFxcdG9wc19mdmFkZHIudXBkYXRlID0gTlVMTDtcXG4gOTYxOlxcdFxcbiA5NjI6XFx0XFx0ZXJyID0gZGFtb25fcmVnaXN0ZXJfb3BzKFxcdTAwMjZvcHMpO1xcbiA5NjM6XFx0XFx0aWYgKGVycilcXG4gOTY0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk2NTpcXHRcXHRyZXR1cm4gZGFtb25fcmVnaXN0ZXJfb3BzKFxcdTAwMjZvcHNfZnZhZGRyKTtcXG4gOTY2OlxcdH1cXG4gOTY3OlxcdFxcbiA5Njg6XFx0c3Vic3lzX2luaXRjYWxsKGRhbW9uX3ZhX2luaXRjYWxsKTtcXG4gOTY5OlxcdFxcbiA5NzA6XFx0I2luY2x1ZGUgXFxcInRlc3RzL3ZhZGRyLWt1bml0LmhcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU1OjMxLjY0NjQ3NjAwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQzNDY1ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgQWNjZXNzIENoZWNrcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IERBTU9OLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nLCBoYW5kbGVzIGl0cyBhY2Nlc3MgY2hlY2tzLiBNeSBpbml0aWFsIHBsYW4gaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBkYW1vbl92YV9jaGVja19hY2Nlc3Nlc2AgYW5kIGBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NgIGZ1bmN0aW9ucywgdGhleSBzb3VuZCBsaWtlIHRoZSBrZXkgcGxheWVycyBoZXJlLiBUbyBnZXQgc3RhcnRlZCwgSSdsbCBoZWFkIG92ZXIgdG8gdGhlIGBtbS9kYW1vbi92YWRkci5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAzNDAgdG8gNDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjb250ZXh0IGFuZCBhIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBiZWhpbmQgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmQgYW5kIGZvcndhcmQgdGhyb3VnaCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBhY2Nlc3MgY2hlY2tpbmcgc3lzdGVtIGlzIGRlc2lnbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MzYuNDg5OTQ2NTc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHQjZGVmaW5lIGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkgTlVMTFxcbiAzNDE6XFx0I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4gMzQyOlxcdFxcbiAzNDM6XFx0c3RhdGljIHZvaWQgZGFtb25fdmFfbWtvbGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9ta29sZF9vcHMgPSB7XFxuIDM0NjpcXHRcXHRcXHQucG1kX2VudHJ5ID0gZGFtb25fbWtvbGRfcG1kX2VudHJ5LFxcbiAzNDc6XFx0XFx0XFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxcbiAzNDg6XFx0XFx0fTtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXFx1MDAyNmRhbW9uX21rb2xkX29wcywgTlVMTCk7XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdC8qXFxuIDM1NDpcXHQgKiBGdW5jdGlvbnMgZm9yIHRoZSBhY2Nlc3MgY2hlY2tpbmcgb2YgdGhlIHJlZ2lvbnNcXG4gMzU1OlxcdCAqL1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gMzYwOlxcdHtcXG4gMzYxOlxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cXHUwMDNlYXIuc3RhcnQsIHItXFx1MDAzZWFyLmVuZCk7XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVxcdTAwM2VzYW1wbGluZ19hZGRyKTtcXG4gMzY0OlxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gMzY3OlxcdHtcXG4gMzY4OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuIDM2OTpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gMzcwOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4gMzczOlxcdFxcdFxcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xcbiAzNzQ6XFx0XFx0XFx0aWYgKCFtbSlcXG4gMzc1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzNzY6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXFxuIDM3NzpcXHRcXHRcXHRcXHRfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKG1tLCByLCBjdHgpO1xcbiAzNzg6XFx0XFx0XFx0bW1wdXQobW0pO1xcbiAzNzk6XFx0XFx0fVxcbiAzODA6XFx0fVxcbiAzODE6XFx0XFxuIDM4MjpcXHRzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlIHtcXG4gMzgzOlxcdFxcdGJvb2wgeW91bmc7XFxuIDM4NDpcXHR9O1xcbiAzODU6XFx0XFxuIDM4NjpcXHRzdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDM4NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAzODg6XFx0e1xcbiAzODk6XFx0XFx0cHRlX3QgKnB0ZTtcXG4gMzkwOlxcdFxcdHB0ZV90IHB0ZW50O1xcbiAzOTE6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAzOTI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gMzkzOlxcdFxcdHN0cnVjdCBkYW1vbl95b3VuZ193YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiAzOTQ6XFx0XFxuIDM5NTpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDM5NjpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4gMzk3OlxcdFxcdGlmIChwdGwpIHtcXG4gMzk4OlxcdFxcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxcbiA0MDE6XFx0XFx0XFx0XFx0Z290byBodWdlX291dDtcXG4gNDAyOlxcdFxcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xcbiA0MDM6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4gNDA0OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDQwNTpcXHRcXHRcXHRpZiAocG1kX3lvdW5nKHBtZGUpIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuIDQwNjpcXHRcXHRcXHRcXHRcXHRcXHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh3YWxrLVxcdTAwM2VtbSxcXG4gNDA3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGFkZHIpKVxcbiA0MDg6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNleW91bmcgPSB0cnVlO1xcbiA0MDk6XFx0aHVnZV9vdXQ6XFxuIDQxMDpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0MTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQxMjpcXHRcXHR9XFxuIDQxMzpcXHQjZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVxcdTAwM2VtbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gNDE2OlxcdFxcdGlmICghcHRlKVxcbiA0MTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQxODpcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuIDQxOTpcXHRcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTU6MzYuNDkwMTAyNjM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODU5MTQ3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL2RhbW9uL3ZhZGRyLmNgIGZvciBEQU1PTiBhbmQgWW91bmcgSHVnZVRMQiBJbnRlZ3JhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIG1vcmUgYWJvdXQgdGhlIGludGVyYWN0aW9uIG9mIERBTU9OIHdpdGggWW91bmcgSHVnZVRMQi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9kYW1vbi92YWRkci5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgdmlydHVhbCBhZGRyZXNzIHJhbmdlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3Igc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeWAsIG9yIHBvdGVudGlhbGx5IGEgc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSwgdGhhdCB3aWxsIGhvcGVmdWxseSBpbGx1c3RyYXRlIGhvdyBEQU1PTiBpcyBtYW5hZ2luZyBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIFlvdW5nIEh1Z2VUTEIuIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlcmUgd2lsbCBiZSBhbiBlbnRyeSBwb2ludCBvciBzb21lIHNvcnQgb2YgaGFuZGxlciBmb3IgdGhpcy4gSXQgbWlnaHQgb2ZmZXIgY2x1ZXMgYXMgdG8gaG93IHRvIGVuaGFuY2UgREFNT04uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTozOC45NzYwMjE1MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MjE6XFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XFxuIDQyMjpcXHRcXHRpZiAoIWZvbGlvKVxcbiA0MjM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQyNDpcXHRcXHRpZiAocHRlX3lvdW5nKHB0ZW50KSB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxcbiA0MjU6XFx0XFx0XFx0XFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay1cXHUwMDNlbW0sIGFkZHIpKVxcbiA0MjY6XFx0XFx0XFx0cHJpdi1cXHUwMDNleW91bmcgPSB0cnVlO1xcbiA0Mjc6XFx0b3V0OlxcbiA0Mjg6XFx0XFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XFxuIDQyOTpcXHRcXHRyZXR1cm4gMDtcXG4gNDMwOlxcdH1cXG4gNDMxOlxcdFxcbiA0MzI6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gNDMzOlxcdHN0YXRpYyBpbnQgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiA0MzQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gNDM2OlxcdHtcXG4gNDM3OlxcdFxcdHN0cnVjdCBkYW1vbl95b3VuZ193YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiA0Mzg6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gNDM5OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDQ0MDpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDQ0MTpcXHRcXHRwdGVfdCBlbnRyeTtcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG4gNDQ0OlxcdFxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG4gNDQ1OlxcdFxcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxcbiA0NDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4gNDQ5OlxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdFxcdGlmIChwdGVfeW91bmcoZW50cnkpIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuIDQ1MjpcXHRcXHQgICAgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcod2Fsay1cXHUwMDNlbW0sIGFkZHIpKVxcbiA0NTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNleW91bmcgPSB0cnVlO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRvdXQ6XFxuIDQ1ODpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0NTk6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2MDpcXHR9XFxuIDQ2MTpcXHQjZWxzZVxcbiA0NjI6XFx0I2RlZmluZSBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTExcXG4gNDYzOlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIDQ2NDpcXHRcXG4gNDY1OlxcdHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDQ2NjpcXHR7XFxuIDQ2NzpcXHRcXHRzdHJ1Y3QgZGFtb25feW91bmdfd2Fsa19wcml2YXRlIGFyZyA9IHtcXG4gNDY4OlxcdFxcdFxcdC55b3VuZyA9IGZhbHNlLFxcbiA0Njk6XFx0XFx0fTtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX3lvdW5nX29wcyA9IHtcXG4gNDcyOlxcdFxcdFxcdC5wbWRfZW50cnkgPSBkYW1vbl95b3VuZ19wbWRfZW50cnksXFxuIDQ3MzpcXHRcXHRcXHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnksXFxuIDQ3NDpcXHRcXHR9O1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBcXHUwMDI2ZGFtb25feW91bmdfb3BzLCBcXHUwMDI2YXJnKTtcXG4gNDc3OlxcdFxcdHJldHVybiBhcmcueW91bmc7XFxuIDQ3ODpcXHR9XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdC8qXFxuIDQ4MTpcXHQgKiBDaGVjayB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGFjY2Vzc2VkIGFmdGVyIHRoZSBsYXN0IHByZXBhcmF0aW9uXFxuIDQ4MjpcXHQgKlxcbiA0ODM6XFx0ICogbW1cXHQnbW1fc3RydWN0JyBmb3IgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBzcGFjZVxcbiA0ODQ6XFx0ICogclxcdHRoZSByZWdpb24gdG8gYmUgY2hlY2tlZFxcbiA0ODU6XFx0ICovXFxuIDQ4NjpcXHRzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gNDg3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuIDQ4ODpcXHR7XFxuIDQ4OTpcXHRcXHRib29sIGFjY2Vzc2VkO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAoIW1tKSB7XFxuIDQ5MjpcXHRcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcXG4gNDkzOlxcdFxcdFxcdHJldHVybjtcXG4gNDk0OlxcdFxcdH1cXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0YWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkcik7XFxuIDQ5NzpcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGFjY2Vzc2VkKTtcXG4gNDk4OlxcdH1cXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTozOC45NzYyMTkyMDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMyNzQ1MzYxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBIdWdlIFBhZ2UgUFRFIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBEQU1PTiBoYW5kbGVzIG1ha2luZyBodWdlIHBhZ2UgUFRFcyBcIm9sZFwiLiAgQmVmb3JlLCB0aGUgY29kZSBkaXJlY3RseSBhY2Nlc3NlZCB0aGUgUFRFLCBjaGVja2VkIHRoZSB5b3VuZyBiaXQsIGFuZCB0aGVuIG1vZGlmaWVkIGl0LiBOb3csIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uLCBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYC4gVGhlIGNvcmUgbG9naWMgaXMgbm93IGVuY2Fwc3VsYXRlZCB3aXRoaW4gdGhpcyBuZXcgZnVuY3Rpb24sIHVzaW5nIGBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcmAgYmVmb3JlIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyByZWZhY3RvcmluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgc3BlY2lmaWNhbGx5IFwiQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksXCIgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnkuIFdlJ3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBhbmQgbWFraW5nIHRoZW0gXCJvbGQuXCIgVGhhdCdzIGRlZmluaXRlbHkgd2l0aGluIHRoZSBzY29wZS4gIEl0IHNlZW1zIHRvIGJlIGZpeGluZyBvciBjaGFuZ2luZyBob3cgaHVnZXRsYiBQVEUgbWFuaXB1bGF0aW9uIG9jY3VycyB3aXRoaW4gREFNT04uXG5cbkkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkYCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiwgYW5kIG1vZGlmaWVzIGBkYW1vbl9odWdldGxiX21rb2xkYC4gIFdlIGFsc28gaGF2ZSBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9ta29sZGAsIGFuZCBgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzYCBpbiB0aGlzIGZpbGUuIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXkgYWxsIGFwcGVhciB0byBiZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgdmFkZHIuY2AsIHdoaWNoIG1ha2VzIHRoZW0gc3BlY2lmaWMgdG8gdGhpcyBEQU1PTiBtb2R1bGUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEhVR0VUTEJfUEFHRWAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBpZiBpdCBoYXMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYyNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTo1Mi4yNTA3NjEyMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTk2NzE0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTM2LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Mi1cXG5hcmNoL3NoL21tL0tjb25maWc6MTQzOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ1LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0OS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE1MS1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTEtXFxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTMtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NTo1NC40NTA0Mzg5ODNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY3OTU1NzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IENvbmZpcm1lZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBjaGVjayBvZiBgZnMvS2NvbmZpZ2AgY29uZmlybWVkIGBIVUdFVExCRlNgIGlzIHRoZSBrZXksIGFuZCBpdCdzIHRpZWQgdG8gYEhVR0VUTEJfUEFHRWAuIFNvLCBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAgYXJlIHRoZSBmb3VuZGF0aW9uLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBpbiBwbGF5LlxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIHVzZXJzcGFjZSBjb250cm9sIGlzIGVuYWJsZWQuIGBEQU1PTl9TWVNGU2AgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoYXQsIGFuZCBpbmRlZWQsIGl0IGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIHRoYXQgU3l6a2FsbGVyIHdpbGwgdXNlLiBOb3csIEknbGwgZ28gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIGFic29sdXRlbHkuIFRoaXMgaXMgY3JpdGljYWwuXG4qICAgYFJlYXNvbmluZ2A6IFllcywgdGhlIG1vZGlmaWNhdGlvbiB0byBEQU1PTidzIGh1Z2V0bGIgcGFnZSBhY2Nlc3MgbW9uaXRvcmluZyBpbiBgbW0vZGFtb24vdmFkZHIuY2Agd2l0aCB0aG9zZSBmdW5jdGlvbnMgaXMgYSBiaWcgZGVhbC4gSXQncyB0b3VjaGluZyB0aGUgUFRFIGhhbmRsaW5nIGFuZCBhbHRlcmluZyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIHNhdGlzZmllZC5cbiogICBgRm9jdXNTeW1ib2xzYDogSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgc3ltYm9scyAoYGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZGAsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfbWtvbGRgLCBhbmQgYGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrc2ApIGFyZSBleGFjdGx5IGFzIHNwZWNpZmllZC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEkgcmUtdmFsaWRhdGVkIHRoYXQgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1NZU0ZTYCwgYEhVR0VUTEJfUEFHRWAsIGFuZCBgSFVHRVRMQkZTYCBhcmUgY29ycmVjdCBhbmQgcmVhZHkuXG5cbkV2ZXJ5dGhpbmcgaXMgbWV0aWN1bG91c2x5IGNoZWNrZWQgYW5kIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4ODUsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjAxLjEyOTk5OTEwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQyOTg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX21rb2xkXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX21rb2xkXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyBmb3IgaHVnZXRsYiBlbnRyaWVzIGluIG1tL2RhbW9uL3ZhZGRyLmMgYnkgZXh0cmFjdGluZyBhbmQgdXBkYXRpbmcgdGhlIGh1Z2V0bGIgUFRFIGNsZWFyaW5nIGFuZCBhZ2luZyBsb2dpYyAodXNpbmcgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucyBpbiBodWdldGxiIFBURSBtYW5pcHVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjAxLjI0MjQ0MzIyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NzY1MjgxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NjowMS4yNDMyMzU0NjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTY3NTczMDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgcGFnZSBhZ2luZyBpbiBEQU1PTiAobW0vZGFtb24vdmFkZHIuYykgYnkgaW50cm9kdWNpbmcgdGhlIGhlbHBlciBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQoKSB3aGljaCBwcm9wZXJseSBjbGVhcnMgdGhlIFBURSB2aWEgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoKSBiZWZvcmUgbWFya2luZyBpdCBvbGQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGUuZy4gZW50cnksIHJlZmVyZW5jZWQsIHBzaXplKSBhcmUgc2NhbGFyL1BURSB0eXBlcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBwYWdlLXRhYmxlIGhhbmRsaW5nIGJ1Z3Mgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0YjQ4Nzk2Mzk3ZDA0M2U4MzI3YzU2YzhjMjRmZDMzYzcxNDRiODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU1OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjkxYTBkNDQxYzFmOTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtMjgzLDIyICsyODMsMjkgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKmVudHJ5KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1xuK1x0aWYgKCFwdGVfeW91bmcoKmVudHJ5KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0KmVudHJ5ID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZSwgcHNpemUpO1xuK1x0KmVudHJ5ID0gcHRlX21rb2xkKCplbnRyeSk7XG4rXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4gXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbi1cdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFxuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiBcbi1cdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4tXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuLVx0XHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XG4tXHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuLVx0fVxuLVxuK1x0cmVmZXJlbmNlZCA9IGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGUsIG1tLCB2bWEsIGFkZHIsIFx1MDAyNmVudHJ5KTtcbiBcdGlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsXG4gXHRcdFx0XHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcbiBcdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1NjowMS4yNDMyMzY3NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg5OTM3NDc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIGl0LiBUaGUgZ29hbCBpcyB0byBiZSBlZmZpY2llbnQgd2l0aCBvdXIgcmVzb3VyY2VzIGFuZCBub3QgdHJpZ2dlciB1bm5lY2Vzc2FyeSBmdXp6aW5nIHJ1bnMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSBgZGlmZmAgaXRzZWxmLiBXZSdyZSBsb29raW5nIGF0IGBtbS9kYW1vbi92YWRkci5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBoYW5kbGluZyBodWdlIHBhZ2VzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG1hcmtpbmcgcGFnZXMgYXMgXCJvbGRcIi5cblxuVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCB3YXM6XG5gYGBjXG5zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxue1xuXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcblx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xuXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcblx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG5cblx0Zm9saW9fZ2V0KGZvbGlvKTtcblxuXHRpZiAocHRlX3lvdW5nKGVudHJ5KSkge1xuXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcblx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnksIHBzaXplKTtcblx0fVxuXG5gYGBcblxuVGhpcyBoYXMgYmVlbiBtb2RpZmllZCB0byBub3cgcmVhZDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbnN0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcblx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXG57XG5cdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuXG5cdGlmICghcHRlX3lvdW5nKCplbnRyeSkpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHQqZW50cnkgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlLCBwc2l6ZSk7XG5cdCplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpO1xuXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgKmVudHJ5LCBwc2l6ZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG5zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxue1xuXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcblx0cHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpO1xuXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcblx0Zm9saW9fZ2V0KGZvbGlvKTtcblxuXHRyZWZlcmVuY2VkID0gZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKHB0ZSwgbW0sIHZtYSwgYWRkciwgXHUwMDI2ZW50cnkpO1xuXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuXHRcdFx0XHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcblx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbmBgYFxuXG5UaGUgcGF0Y2ggbm93IGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24sIGBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGRgLCB3aGljaCBoYW5kbGVzIHRoZSBcImdldCBhbmQgY2xlYXJcIiBvZiB0aGUgUFRFIGFuZCB0aGUgc2V0dGluZyBvZiBpdCB0byBcIm9sZFwiLiBUaGVyZSBpcyBhbHNvIHRoZSB1c2Ugb2YgYSBgZm9saW9gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgY2hhbmdlICppdHNlbGYqIGRvZXNuJ3QgbG9vayBsaWtlIGFuIG9idmlvdXMgS01TQU4gdHJpZ2dlci4gV2UgYXJlIGVzc2VudGlhbGx5IG1vZGlmeWluZyBwYWdlIHRhYmxlIGVudHJpZXMgdG8gcmVmbGVjdCBhY2Nlc3MsIHdoaWNoIGlzIGEgY29tbW9uIG9wZXJhdGlvbi4gSG93ZXZlciwgdGhlIHVzZSBvZiBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXJgIGlzIHdoZXJlIG15IGF0dGVudGlvbiBpcy4gU2luY2UgYGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyYCBtaWdodCBoYXZlIHNvbWUgc3VidGxlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgbG9ja2luZyBpbnZvbHZlZCwgd2Ugd2lsbCBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGxlbWVudGF0aW9uLiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGlzIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBjYWxsZWQgZnJvbS5cblxuVG8gZ2FpbiBtb3JlIGNvbnRleHQsIEknbGwgbm93IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIGBtbS9kYW1vbi92YWRkci5jYCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgZmlsZXMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGtleSBpcyB0byBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgbWVtb3J5IGludGVyYWN0aW9ucyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgY2F0Y2hpbmcuIElmIHRoZSBjb250ZXh0IGxvb2tzIGJlbmlnbiwgd2UgY2FuIHByb2JhYmx5IGhvbGQgb2ZmIG9uIGRlZGljYXRlZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTY6MDcuMTQyNjE1MTYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIyMjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9odWdldGxiX21rb2xkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTI4Nj1zdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTI5OC1cXG5tbS9kYW1vbi92YWRkci5jOjI5OTpzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2RhbW9uL3ZhZGRyLmMtMzAwLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTMyMD1zdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzMyLVxcbm1tL2RhbW9uL3ZhZGRyLmM6MzMzOlxcdGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2VtbSwgd2Fsay1cXHUwMDNldm1hLCBhZGRyKTtcXG5tbS9kYW1vbi92YWRkci5jLTMzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTY6MDcuMTg3ODQ0MjMyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODAzNTgwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGluIGBtbS9kYW1vbi92YWRkci5jYCoqXG5cbk9rYXksIGxldCdzIHN0YXJ0IGRpc3NlY3RpbmcgdGhpcyBgZGFtb25faHVnZXRsYl9ta29sZGAgZnVuY3Rpb24sIGFsb25nIHdpdGggaXRzIGNvbnRleHQgd2l0aGluIGBtbS9kYW1vbi92YWRkci5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiaHVnZXRsYlwiIOKAkyB0aGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLCBhbmQgdGhhdCdzIGdvaW5nIHRvIGluZmx1ZW5jZSBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGhvdyBEQU1PTiBpbnRlcmFjdHMuIFRoZSBcIm1rb2xkXCIgcGFydCBoaW50cyBhdCBtYXJraW5nIHBhZ2VzIGFzIFwib2xkLFwiIHdoaWNoLCBpbiB0aGUgREFNT04gY29udGV4dCwgbGlrZWx5IGluZGljYXRlcyBhIHRyYW5zaXRpb24gb3IgcmUtZXZhbHVhdGlvbiBpbiB1c2FnZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCB0aGUgY29uc2VxdWVuY2VzIG9mIG1hcmtpbmcgdGhlc2UgaHVnZXRsYiBwYWdlcyBhcyBcIm9sZFwiIGFyZS5cblxuSSBleHBlY3QgdG8gc2VlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIHRhYmxlcywgcGVyaGFwcyBtYW5pcHVsYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGh1Z2UgcGFnZSBtYXBwaW5nLCBhbmQgcG9zc2libHkgc29tZSBpbnZvbHZlbWVudCB3aXRoIERBTU9OJ3MgbW9uaXRvcmluZyBzdHJ1Y3R1cmVzLiBJIGFudGljaXBhdGUgd2UnbGwgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBodWdldGxiZnMgYW5kIERBTU9OJ3Mgb3BlcmF0aW9ucyBjb25jdXJyZW50bHkuIFRoaXMgc2VjdGlvbidzIHByb2JhYmx5IGdvaW5nIHRvIHByb3ZpZGUgZGV0YWlscyBhYm91dCBob3cgREFNT04gc3BlY2lmaWNhbGx5IGhhbmRsZXMgaHVnZSBwYWdlcyB3aGljaCBoYXMgYWx3YXlzIGJlZW4gYSBrZXkgYXJlYSBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgaXQuIExldCdzIHN0YXJ0IHBhcnNpbmcgdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTY6MDkuOTY4MjA0OTI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdG91dDpcXG4gMjgxOlxcdFxcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xcbiAyODI6XFx0XFx0cmV0dXJuIDA7XFxuIDI4MzpcXHR9XFxuIDI4NDpcXHRcXG4gMjg1OlxcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIDI4NjpcXHRzdGF0aWMgYm9vbCBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIDI4NzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqZW50cnkpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHR1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0aWYgKCFwdGVfeW91bmcoKmVudHJ5KSlcXG4gMjkyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjkzOlxcdFxcdCplbnRyeSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGUsIHBzaXplKTtcXG4gMjk0OlxcdFxcdCplbnRyeSA9IHB0ZV9ta29sZCgqZW50cnkpO1xcbiAyOTU6XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsICplbnRyeSwgcHNpemUpO1xcbiAyOTY6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI5NzpcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdHN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIDMwMDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiAzMDE6XFx0e1xcbiAzMDI6XFx0XFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XFxuIDMwMzpcXHRcXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XFxuIDMwNDpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0cmVmZXJlbmNlZCA9IGRhbW9uX2h1Z2V0bGJfcHRlcF9ta29sZChwdGUsIG1tLCB2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSk7XFxuIDMwOTpcXHRcXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxcbiAzMTA6XFx0XFx0XFx0XFx0XFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXFxuIDMxMTpcXHRcXHRcXHRyZWZlcmVuY2VkID0gdHJ1ZTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0aWYgKHJlZmVyZW5jZWQpXFxuIDMxNDpcXHRcXHRcXHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XFxuIDMxNzpcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAzMTg6XFx0fVxcbiAzMTk6XFx0XFxuIDMyMDpcXHRzdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVxcdTAwM2V2bWEpO1xcbiAzMjU6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAzMjY6XFx0XFx0cHRlX3QgZW50cnk7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cXHUwMDNlbW0sIHB0ZSk7XFxuIDMyOTpcXHRcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuIDMzMDpcXHRcXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcXG4gMzMxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRkYW1vbl9odWdldGxiX21rb2xkKHB0ZSwgd2Fsay1cXHUwMDNlbW0sIHdhbGstXFx1MDAzZXZtYSwgYWRkcik7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdG91dDpcXG4gMzM2OlxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDMzNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzM4OlxcdH1cXG4gMzM5OlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjA5Ljk2ODI5OTE4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTUwNjQ0NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IERBTU9OIGh1Z2V0bGIgUFRFIEFnaW5nIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGBkYW1vbl9odWdldGxiX21rb2xkKClgIHBhdGNoIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIEtNU0FOIGNvbmNlcm4sIGdpdmVuIHRoZSB3b3JrIGFyb3VuZCBQVEVzLiBUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hlY2sgaWYgdGhlIFBURSBpcyB5b3VuZywgbWFyayBpdCBvbGQgaWYgaXQgaXMsIGFuZCB1cGRhdGUuIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoYXQgaW50byBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKClgIHdpdGggYSBgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoKWAgY2FsbC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byB0aGlzIGNoYW5nZS5cblxuRmlyc3QsIEkgbWV0aWN1bG91c2x5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSB0byB2ZXJpZnkgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIGBlbnRyeWAgaXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2l0aCBgaHVnZV9wdGVwX2dldCgpYCwgYW5kIEkgc2VlIGl0IHBhc3NlZCBhcyBhIHBvaW50ZXIuIFRoZSBgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKClgIGZ1bmN0aW9uIGl0c2VsZiBjaGVja3MgYHB0ZV95b3VuZygpYCAqYmVmb3JlKiBhbnkgbW9kaWZpY2F0aW9uLCBzbyB3ZSdyZSBzYWZlIHRoZXJlLiBJdCB0aGVuIHBlcmZvcm1zIHRoZSBjbGVhciBhbmQgc2V0IG9wZXJhdGlvbnMsIGJ1dCBpbXBvcnRhbnRseSwgdGhlIHZhbHVlcyB1c2VkIGFyZSAqYWxsKiBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBubyBjb21wbGV4IHN0cnVjdHVyZXMsIG5vIGFsbG9jYXRpb25zLCBhbmQgbm8gY29waWVzIHRvIHVzZXJzcGFjZSDigJMgYSBiaWcgcmVsaWVmLlxuXG5JIHRoZW4gd2VudCB0aHJvdWdoIHRoZSBjb21tb24gaXNzdWVzIHdpdGggdGhpcyBraW5kIG9mIHdvcmsuIFRoZSB2YXJpYWJsZXMgYXJlIGJhc2ljIHR5cGVzIGFuZCBmdWxseSBpbml0aWFsaXplZC4gVGhpcyBpc24ndCB3aGVyZSBLTVNBTiBzaGluZXMuIFRoaXMga2luZCBvZiBwYXRjaCBpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYnVncywgd2hpY2ggS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgTU0gYXNzZXJ0aW9ucyBzaG91bGQgY2F0Y2guIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZCBoZXJlLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHRoYXQgZGVlcCBkaXZlLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZSBjcml0ZXJpYSBmb3IgS01TQU4gYXBwbGljYWJpbGl0eSDigJMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIOKAkyBhcmUgYWxsICpub3QqIHByZXNlbnQuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGNoYW5nZSBwb3NlcyBubyByaXNrIG9mIHRoZSBwcm9ibGVtcyBLTVNBTiBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzLiBUaGUgb2xkIGBkYW1vbl9odWdldGxiX21rb2xkYCBmdW5jdGlvbiBoYWQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGFzIHdlbGwuIFRoZSByZWZhY3RvcmluZyBpbXByb3ZlcyB0aGF0IGJ5IHVzaW5nIG1vcmUgcmVsaWFibGUgQVBJcyBpbiB0aGUgbW0gc3Vic3lzdGVtLlxuXG5TbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQxLCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU2OjE2LjkxODk0NjE4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgcGFnZSBhZ2luZyBpbiBEQU1PTiAobW0vZGFtb24vdmFkZHIuYykgYnkgaW50cm9kdWNpbmcgdGhlIGhlbHBlciBkYW1vbl9odWdldGxiX3B0ZXBfbWtvbGQoKSB3aGljaCBwcm9wZXJseSBjbGVhcnMgdGhlIFBURSB2aWEgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoKSBiZWZvcmUgbWFya2luZyBpdCBvbGQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGUuZy4gZW50cnksIHJlZmVyZW5jZWQsIHBzaXplKSBhcmUgc2NhbGFyL1BURSB0eXBlcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBwYWdlLXRhYmxlIGhhbmRsaW5nIGJ1Z3Mgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTiwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHBhZ2UgYWdpbmcgaW4gREFNT04gKG1tL2RhbW9uL3ZhZGRyLmMpIGJ5IGludHJvZHVjaW5nIHRoZSBoZWxwZXIgZGFtb25faHVnZXRsYl9wdGVwX21rb2xkKCkgd2hpY2ggcHJvcGVybHkgY2xlYXJzIHRoZSBQVEUgdmlhIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKCkgYmVmb3JlIG1hcmtpbmcgaXQgb2xkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChlLmcuIGVudHJ5LCByZWZlcmVuY2VkLCBwc2l6ZSkgYXJlIHNjYWxhci9QVEUgdHlwZXMgZnVsbHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcGFnZS10YWJsZSBoYW5kbGluZyBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4sIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[1] Phase: Succeeded StartedAt: 2026-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 02:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 02:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2] Phase: Succeeded StartedAt: 2026-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 06:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 06:41:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 02:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 02:56:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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-workflowrr9t4/series-workflowrr9t4-convert-artifact-3624635702/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 02:56:38 +0000 UTC FinishedAt: 2026-09-07 03:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 02:56:38 +0000 UTC FinishedAt: 2026-09-07 03:14:50 +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:*75da8248-5922-4a28-bfbe-fb8c44a5969a,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-workflowrr9t4/series-workflowrr9t4-convert-artifact-3624635702/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": "a9b48141-002f-4ca9-9580-23a1c1901369", "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-workflowrr9t4/series-workflowrr9t4-build-action-3546068044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 02:56:38 +0000 UTC FinishedAt: 2026-09-07 03:14:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*75da8248-5922-4a28-bfbe-fb8c44a5969a,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-workflowrr9t4/series-workflowrr9t4-convert-artifact-3624635702/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": "a9b48141-002f-4ca9-9580-23a1c1901369", "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-workflowrr9t4/series-workflowrr9t4-build-action-3546068044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:14:50 +0000 UTC FinishedAt: 2026-09-07 03:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:14:50 +0000 UTC FinishedAt: 2026-09-07 03:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:14:50 +0000 UTC FinishedAt: 2026-09-07 03:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:14:50 +0000 UTC FinishedAt: 2026-09-07 03:14:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-workflowrr9t4/series-workflowrr9t4-convert-artifact-104690121/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:15:00 +0000 UTC FinishedAt: 2026-09-07 03:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:15:00 +0000 UTC FinishedAt: 2026-09-07 03:16:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9b48141-002f-4ca9-9580-23a1c1901369,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-workflowrr9t4/series-workflowrr9t4-build-action-3546068044/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-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:16:40 +0000 UTC FinishedAt: 2026-09-07 03:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:16:40 +0000 UTC FinishedAt: 2026-09-07 03:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:16:40 +0000 UTC FinishedAt: 2026-09-07 03:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:16:40 +0000 UTC FinishedAt: 2026-09-07 03:36:17 +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:*75da8248-5922-4a28-bfbe-fb8c44a5969a,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-workflowrr9t4/series-workflowrr9t4-convert-artifact-104690121/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": "f2c7c437-081d-4619-9c94-60eae4fb2604", "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-workflowrr9t4/series-workflowrr9t4-build-action-2017656997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:16:40 +0000 UTC FinishedAt: 2026-09-07 03:36:07 +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:*75da8248-5922-4a28-bfbe-fb8c44a5969a,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-workflowrr9t4/series-workflowrr9t4-convert-artifact-104690121/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": "f2c7c437-081d-4619-9c94-60eae4fb2604", "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-workflowrr9t4/series-workflowrr9t4-build-action-2017656997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:36:17 +0000 UTC FinishedAt: 2026-09-07 03:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:36:17 +0000 UTC FinishedAt: 2026-09-07 03:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:36:17 +0000 UTC FinishedAt: 2026-09-07 03:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:36:17 +0000 UTC FinishedAt: 2026-09-07 03:37:58 +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:*f2c7c437-081d-4619-9c94-60eae4fb2604,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-workflowrr9t4/series-workflowrr9t4-build-action-2017656997/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-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 06:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 06:41:00 +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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"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:*a9b48141-002f-4ca9-9580-23a1c1901369,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2c7c437-081d-4619-9c94-60eae4fb2604,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-workflowrr9t4/series-workflowrr9t4-build-action-3546068044/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-workflowrr9t4/series-workflowrr9t4-build-action-2017656997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 03:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 03:38:14 +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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"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-workflowrr9t4/series-workflowrr9t4-convert-artifact-1366795294/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 03:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 03:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:08 +0000 UTC FinishedAt: 2026-09-07 03:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:18 +0000 UTC FinishedAt: 2026-09-07 06:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrr9t4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"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":["damon_hugetlb_ptep_mkold","damon_hugetlb_mkold","damon_mkold_hugetlb_entry","damon_va_mkold","damon_va_prepare_access_checks"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS","HUGETLB_PAGE","HUGETLBFS"],"series_id":"5d08b8c1-43b5-4cf2-95ca-c8291b2e7c38","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-09-07 03:38:18 +0000 UTC FinishedAt: 2026-09-07 06:40:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9b48141-002f-4ca9-9580-23a1c1901369,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2c7c437-081d-4619-9c94-60eae4fb2604,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-workflowrr9t4/series-workflowrr9t4-build-action-3546068044/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-workflowrr9t4/series-workflowrr9t4-build-action-2017656997/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-workflowrr9t4/series-workflowrr9t4-convert-artifact-1366795294/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,}