Name: series-workflowvmtf4 Phase: Succeeded StartedAt: 2026-06-26 22:30:47 +0000 UTC FinishedAt: 2026-06-27 02:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[0] Phase: Succeeded StartedAt: 2026-06-26 22:30:47 +0000 UTC FinishedAt: 2026-06-26 22:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 22:30:47 +0000 UTC FinishedAt: 2026-06-26 22:42:57 +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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "series_id": "96bfc007-2196-432b-822f-19b1bb51587e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kmemleak_scan" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a21lbWxlYWtfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmQ3ZjQzNjIyNTNlN2I1YmQ5MzQ4ZjE3ZDhhOGI1ODA3MDFjODRlY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDIyOjQyOjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuaW5kZXggN2Q3ODRlMDNmM2Y5ZDUuLmE4YTgzYmM2OWNlYjg4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbkBAIC0xOTgsNiAmIzQzOzE5OCwxNCBAQCBzeXN0ZW1zLCBiZWNhdXNlIG9mIHBvaW50ZXJzIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiBDUFUgcmVnaXN0ZXJzIG9yXG4gc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nXG4gdGhlIG1pbmltdW0gYWdlIG9mIGFuIG9iamVjdCB0byBiZSByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrLlxuIFxuJiM0MztUaGUgYGBtaW5fdW5yZWZfc2NhbnNgYCBtb2R1bGUgcGFyYW1ldGVyIChkZWZhdWx0IDEpIHJlcXVpcmVzIGFuIG9iamVjdCB0b1xuJiM0MztiZSBzZWVuIHVucmVmZXJlbmNlZCBpbiB0aGF0IG1hbnkgY29uc2VjdXRpdmUgc2NhbnMgYmVmb3JlIGl0IGlzIHJlcG9ydGVkLlxuJiM0MztLZWVwaW5nIGl0IGF0IDEgcHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW91cjsgaGlnaGVyIHZhbHVlcyBmaWx0ZXJcbiYjNDM7dGhlIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZXMgZGVzY3JpYmVkIGFib3ZlLCBhdCB0aGUgY29zdCBvZiBkZWxheWluZ1xuJiM0MztnZW51aW5lIHJlcG9ydHMgYnkgdXAgdG8gdGhhdCBtYW55IHNjYW5zLiBJdCBjYW4gYmUgc2V0IGF0IGJvb3Qgd2l0aFxuJiM0MztgYGttZW1sZWFrLm1pbl91bnJlZl9zY2Fucz1cdTAwM2NuXHUwMDNlYGAgb3IgYXQgcnVuLXRpbWUgdmlhXG4mIzQzO2BgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgYC5cbiYjNDM7XG4gTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrc1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMDAuLjViMTRjY2IzNmY5NWJhIDEwMDY0NFxuLS0tIGEvbW0va21lbWxlYWsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuY1xuQEAgLTE1MSw2ICYjNDM7MTUxLDggQEAgc3RydWN0IGttZW1sZWFrX29iamVjdCB7XG4gXHRpbnQgbWluX2NvdW50O1xuIFx0LyogdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludGVycyBmb3VuZCBwb2ludGluZyB0byB0aGlzIG9iamVjdCAqL1xuIFx0aW50IGNvdW50O1xuJiM0MztcdC8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgdW5yZWZfc2NhbnM7XG4gXHQvKiBjaGVja3N1bSBmb3IgZGV0ZWN0aW5nIG1vZGlmaWVkIG9iamVjdHMgKi9cbiBcdHUzMiBjaGVja3N1bTtcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IHRyYWNlX2hhbmRsZTtcbkBAIC0yMzIsNiAmIzQzOzIzNCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjtcbiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzY2FuX3RocmVhZDtcbiAvKiB1c2VkIHRvIGF2b2lkIHJlcG9ydGluZyBvZiByZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTtcbiYjNDM7LyogY29uc2VjdXRpdmUgc2NhbnMgYW4gb2JqZWN0IG11c3Qgc3RheSB1bnJlZmVyZW5jZWQgYmVmb3JlIHJlcG9ydGluZyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4mIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xuIC8qIGRlbGF5IGJldHdlZW4gYXV0b21hdGljIG1lbW9yeSBzY2FubmluZ3MgKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDtcbkBAIC02ODcsNiAmIzQzOzY5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpfX2FsbG9jX29iamVjdChnZnBfdCBnZnApXG4gXHRhdG9taWNfc2V0KFx1MDAyNm9iamVjdC1cdTAwM2V1c2VfY291bnQsIDEpO1xuIFx0b2JqZWN0LVx1MDAzZWV4Y2Vzc19yZWYgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcdFx0XHQvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi9cbiYjNDM7XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNoZWNrc3VtID0gMDtcbiBcdG9iamVjdC1cdTAwM2VkZWxfc3RhdGUgPSAwO1xuIFxuQEAgLTE4MzMsNiAmIzQzOzE4MzksOSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdFx0XHRfX3BhaW50X2l0KG9iamVjdCwgS01FTUxFQUtfQkxBQ0spO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHQvKiByZWZlcmVuY2VkIGxhc3Qgc2NhbjogcmVzdGFydCB0aGUgdW5yZWZlcmVuY2VkIHJ1biAqL1xuJiM0MztcdFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxuJiM0MztcdFx0XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0XHQvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi9cbiBcdFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcbiBcdFx0aWYgKGNvbG9yX2dyYXkob2JqZWN0KSBcdTAwMjZcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxuQEAgLTE5NjgsOCAmIzQzOzE5NzcsOSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdHJhd19zcGluX2xvY2tfaXJxKFx1MDAyNm9iamVjdC1cdTAwM2Vsb2NrKTtcbiBcdFx0dHJhY2VfaGFuZGxlID0gMDtcbiBcdFx0ZGVkdXBfcHJpbnQgPSBmYWxzZTtcbi1cdFx0aWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKSB7XG4mIzQzO1x0XHRpZiAoIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9SRVBPUlRFRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICYjNDM7JiM0MztvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgXHUwMDNlPSBtaW5fdW5yZWZfc2NhbnMpIHtcbiBcdFx0XHRvYmplY3QtXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xuIFx0XHRcdGlmIChrbWVtbGVha192ZXJib3NlKSB7XG4gXHRcdFx0XHR0cmFjZV9oYW5kbGUgPSBvYmplY3QtXHUwMDNldHJhY2VfaGFuZGxlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li44NDAyNmI2MmExYWU1ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTE1MCw2ICYjNDM7MTUwLDcgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9ndXBfdGVzdC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaG1tLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9odWdldGxiLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9odWdldm0uc2hcbiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19kZWR1cC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa3NtLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rc21fbnVtYS5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNGFiNjRiYzY5NDhmOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXG5AQCAtMCwwICYjNDM7MSwxMTEgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgRnVuY3Rpb25hbCB0ZXN0IGZvciBrbWVtbGVhayYjMzk7cyBOLWNvbnNlY3V0aXZlLXNjYW4gbGVhayBjb25maXJtYXRpb25cbiYjNDM7IyAodGhlIG1pbl91bnJlZl9zY2FucyBtb2R1bGUgcGFyYW1ldGVyKS5cbiYjNDM7I1xuJiM0MzsjIGttZW1sZWFrIG9ubHkgcmVwb3J0cyBhbiBvYmplY3Qgb25jZSBpdCBoYXMgc3RheWVkIHVucmVmZXJlbmNlZCBmb3JcbiYjNDM7IyBtaW5fdW5yZWZfc2NhbnMgY29uc2VjdXRpdmUgc2NhbnMuIFRoZSBkZWZhdWx0IG9mIDEgcmVwb3J0cyBvbiB0aGUgZmlyc3RcbiYjNDM7IyBzY2FuIChoaXN0b3JpY2FsIGJlaGF2aW91cik7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyIHRyYW5zaWVudCBmYWxzZVxuJiM0MzsjIHBvc2l0aXZlcyB3aGVyZSBhIGxpdmUgb2JqZWN0JiMzOTtzIG9ubHkgcmVmZXJlbmNlIGlzIGJyaWVmbHkgaW52aXNpYmxlIHRvIGFcbiYjNDM7IyBzaW5nbGUgc2NhbiAoZS5nLiBhbiBSQ1UgdHJlZSB1cGRhdGUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBzY2FuIHJ1bnMpLiBUaGVcbiYjNDM7IyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsmIzM5O3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zXG4mIzQzOyMgYW5kLCBjb3VudGluZyBvbmx5IHRob3NlIG9ycGhhbnMgKG1hdGNoZWQgYnkgdGhlaXIgW2ttZW1sZWFrX3Rlc3RdXG4mIzQzOyMgYmFja3RyYWNlIHNvIHVucmVsYXRlZCBsZWFrcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSBhcmUgaWdub3JlZCksXG4mIzQzOyMgY2hlY2tzIHRoYXQ6XG4mIzQzOyMgICAtIG1pbl91bnJlZl9zY2Fucz0xIHJlcG9ydHMgdGhlbSBvbiB0aGUgZmlyc3Qgc2NhbixcbiYjNDM7IyAgIC0gbWluX3VucmVmX3NjYW5zPTIgcmVwb3J0cyBub3RoaW5nIG9uIHRoZSBmaXJzdCBzY2FuIGJ1dCBkb2VzIG9uIHRoZVxuJiM0MzsjICAgICBzZWNvbmQsXG4mIzQzOyMgICAtIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxuJiM0MzsjXG4mIzQzOyMgVGhlIFwmIzM0O25vdGhpbmcgb24gdGhlIGZpcnN0IHNjYW5cJiMzNDsgY2hlY2sgaXMgdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiB3aXRoXG4mIzQzOyMgbWluX3VucmVmX3NjYW5zPTIgbm8gb2JqZWN0IGNhbiBiZSByZXBvcnRlZCBpbiBmZXdlciB0aGFuIHR3byBzY2Fucy4gTGlrZVxuJiM0MzsjIGtzZnRfa21lbWxlYWtfZGVkdXAuc2gsIGlmIHRoZSBtb2R1bGUgeWllbGRzIG5vIGRldGVjdGFibGUgb3JwaGFuIGF0IGFsbFxuJiM0MzsjIGluIHRoZSBydW5uaW5nIGVudmlyb25tZW50IHRoZSB0ZXN0IHNraXBzIHJhdGhlciB0aGFuIGZhaWxpbmcuXG4mIzQzOyNcbiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7a3NmdF9za2lwPTRcbiYjNDM7S01FTUxFQUs9L3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtcbiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcbiYjNDM7TU9EVUxFPWttZW1sZWFrLXRlc3RcbiYjNDM7QUdFPTZcdFx0IyBzZWNvbmRzOyBtdXN0IGV4Y2VlZCBrbWVtbGVhayYjMzk7cyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcbiYjNDM7XG4mIzQzO3NraXAoKSB7IGVjaG8gXCYjMzQ7U0tJUDogJCpcJiMzNDs7IGV4aXQgJGtzZnRfc2tpcDsgfVxuJiM0MztmYWlsKCkgeyBlY2hvIFwmIzM0O0ZBSUw6ICQqXCYjMzQ7OyBleGl0IDE7IH1cbiYjNDM7cGFzcygpIHsgZWNobyBcJiMzNDtQQVNTOiAkKlwmIzM0OzsgZXhpdCAwOyB9XG4mIzQzO1xuJiM0MztbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1lcSAwIF0gfHwgc2tpcCBcJiMzNDttdXN0IHJ1biBhcyByb290XCYjMzQ7XG4mIzQzO1sgLXIgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IF0gfHwgc2tpcCBcJiMzNDtubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspXCYjMzQ7XG4mIzQzO1sgLXcgXCYjMzQ7JFBBUkFNXCYjMzQ7IF0gfHwgc2tpcCBcJiMzNDttaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFwmIzM0O1xuJiM0Mzttb2RpbmZvIFwmIzM0OyRNT0RVTEVcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8XG4mIzQzO1x0c2tpcCBcJiMzNDskTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcJiMzNDtcbiYjNDM7XG4mIzQzOyMga21lbWxlYWsgY2FuIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIGF0IHJ1bnRpbWUgKGttZW1sZWFrPW9mZiBib290IGFyZyxcbiYjNDM7IyBvciBpdCBzZWxmLWRpc2FibGVkIGFmdGVyIGFuIGludGVybmFsIGVycm9yKTsgYSBcJiMzNDtzY2FuXCYjMzQ7IHRoZW4gcmV0dXJuc1xuJiM0MzsjIEVQRVJNLiBQcm9iZSBvbmNlIGFuZCBza2lwIGlmIHNvLlxuJiM0MztlY2hvIHNjYW4gXHUwMDNlIFwmIzM0OyRLTUVNTEVBS1wmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8XG4mIzQzO1x0c2tpcCBcJiMzNDtrbWVtbGVhayBpcyBkaXNhYmxlZCAoY2hlY2sgZG1lc2cgb3Iga21lbWxlYWs9IGJvb3QgYXJnKVwmIzM0O1xuJiM0MztcbiYjNDM7cHJldj0kKGNhdCBcJiMzNDskUEFSQU1cJiMzNDspXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyAgIyBpbnZva2VkIGluZGlyZWN0bHkgdmlhIHRyYXBcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRlY2hvIFwmIzM0OyRwcmV2XCYjMzQ7IFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFx0XHQjIHJlc3RvcmUgdGhlIHBhcmFtZXRlclxuJiM0MztcdGVjaG8gc2Nhbj1vbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcdFx0IyByZS1lbmFibGUgYXV0byBzY2FuXG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7fVxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxuJiM0MzsjIG9iamVjdCYjMzk7cyBjb25zZWN1dGl2ZS11bnJlZmVyZW5jZWQgcnVuLiBBbiBhdXRvIHNjYW4gbGFuZGluZyBiZXR3ZWVuIHR3b1xuJiM0MzsjIG1hbnVhbCBzY2FucyB3b3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBhbmQgbWFrZSB0aGUgdGVzdCBmbGFreS5cbiYjNDM7ZWNobyBzY2FuPW9mZiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzOyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUmIzM5O3MgaW5pdFxuJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLlxuJiM0MzsjIFByZS1leGlzdGluZyByZXBvcnRlZCBsZWFrcyBhcmUgZ3JleWVkIGZpcnN0IChcJiMzNDtjbGVhclwmIzM0Oykgc28gb25seSBvdXJcbiYjNDM7IyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcbiYjNDM7IyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXG4mIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy5cbiYjNDM7Z2VuX29ycGhhbnMoKSB7XG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7XG4mIzQzO1x0bW9kcHJvYmUgXCYjMzQ7JE1PRFVMRVwmIzM0OyB8fCBza2lwIFwmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEVcJiMzNDtcbiYjNDM7XHRzbGVlcCBcJiMzNDskQUdFXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NjYW4oKSB7IGVjaG8gc2NhbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7OyB9XG4mIzQzO1xuJiM0MzsjIE51bWJlciBvZiBoZWxwZXItbW9kdWxlIG9ycGhhbnMgY3VycmVudGx5IHJlcG9ydGVkIGJ5IGttZW1sZWFrLiBNYXRjaGluZ1xuJiM0MzsjIHRoZSBtb2R1bGUmIzM5O3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvXG4mIzQzOyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxuJiM0MzsjIG9uY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQsIHNvIHRoaXMgcmVmbGVjdHMgdGhlIGNvbmZpcm1hdGlvbiBnYXRpbmcuXG4mIzQzO2NvdW50X29ycGhhbnMoKSB7XG4mIzQzO1x0Yz0kKGdyZXAgLWMgJiMzOTtcXFtrbWVtbGVha190ZXN0XFxdJiMzOTsgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpXG4mIzQzO1x0ZWNobyBcJiMzNDske2M6LTB9XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXG4mIzQzO2VjaG8gMyBcdTAwM2UgXCYjMzQ7JFBBUkFNXCYjMzQ7XG4mIzQzO1sgXCYjMzQ7JChjYXQgXCYjMzQ7JFBBUkFNXCYjMzQ7KVwmIzM0OyA9IFwmIzM0OzNcJiMzNDsgXSB8fCBmYWlsIFwmIzM0O21pbl91bnJlZl9zY2FucyBkaWQgbm90IHJlYWQgYmFjayBhcyAzXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb3JwaGFucyByZXBvcnRlZCBvbiB0aGUgZmlyc3Qgc2Nhbi4gVGhpc1xuJiM0MzsjICAgIGFsc28gZXN0YWJsaXNoZXMgdGhhdCB0aGUgaGVscGVyIHByb2R1Y2VzIGRldGVjdGFibGUgb3JwaGFucyBoZXJlLlxuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyRQQVJBTVwmIzM0O1xuJiM0MztnZW5fb3JwaGFuc1xuJiM0MztzY2FuXG4mIzQzO2ZpcnN0PSQoY291bnRfb3JwaGFucylcbiYjNDM7WyBcJiMzNDskZmlyc3RcJiMzNDsgLWd0IDAgXSB8fFxuJiM0MztcdHNraXAgXCYjMzQ7JE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcJiMzNDtcbiYjNDM7XG4mIzQzOyMgMikgbWluX3VucmVmX3NjYW5zPTI6IG5vdGhpbmcgcmVwb3J0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHNjYW4sIHJlcG9ydGVkXG4mIzQzOyMgICAgYWZ0ZXIgdGhlIHNlY29uZC4gVGhlIGZpcnN0LXNjYW4temVybyBjaGVjayBpcyB0aGUgY29yZSByZWdyZXNzaW9uLlxuJiM0MztlY2hvIDIgXHUwMDNlIFwmIzM0OyRQQVJBTVwmIzM0O1xuJiM0MztnZW5fb3JwaGFuc1xuJiM0MztzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpXG4mIzQzO3NjYW47IHMyPSQoY291bnRfb3JwaGFucylcbiYjNDM7WyBcJiMzNDskczFcJiMzNDsgLWVxIDAgXSB8fCBmYWlsIFwmIzM0O21pbl91bnJlZl9zY2Fucz0yOiAkczEgb3JwaGFuKHMpIHJlcG9ydGVkIGFmdGVyIHRoZSAxc3Qgc2NhbiAobXVzdCBiZSAwKVwmIzM0O1xuJiM0MztbIFwmIzM0OyRzMlwmIzM0OyAtZ3QgMCBdIHx8IGZhaWwgXCYjMzQ7bWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBvbiB0aGUgMm5kIHNjYW4gKGZhbHNlIG5lZ2F0aXZlKVwmIzM0O1xuJiM0MztcbiYjNDM7cGFzcyBcJiMzNDttaW5fdW5yZWZfc2NhbnM9MSBpbW1lZGlhdGU7ID0yIGdhdGVkIHRvIDJuZCBzY2FuIChjb3VudHMgJGZpcnN0LyRzMS8kczIpOyBwYXJhbSByZWFkLWJhY2sgb2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19LTUVNTEVBSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ttZW1sZWFrX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGttZW1sZWFrIHNjYW5uaW5nIGxvZ2ljIGJ5IGFkZGluZyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGBtaW5fdW5yZWZfc2NhbnNgIGFuZCBtb2RpZnlpbmcgYGttZW1sZWFrX3NjYW5gIHRvIHJlcXVpcmUgYSBtaW5pbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSB1bnJlZmVyZW5jZWQgc2NhbnMgYmVmb3JlIHJlcG9ydGluZyBhbiBvYmplY3QuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgc3RhdGUgbWFjaGluZSBvZiB0aGUgbGVhayBkZXRlY3Rvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQ3ZjQzNjIyNTNlN2I1YmQ5MzQ4ZjE3ZDhhOGI1ODA3MDFjODRlYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDIyOjQyOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdApAQCAtMTk4LDYgJiM0MzsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvcgogc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nCiB0aGUgbWluaW11bSBhZ2Ugb2YgYW4gb2JqZWN0IHRvIGJlIHJlcG9ydGVkIGFzIGEgbWVtb3J5IGxlYWsuCiAKJiM0MztUaGUgYGBtaW5fdW5yZWZfc2NhbnNgYCBtb2R1bGUgcGFyYW1ldGVyIChkZWZhdWx0IDEpIHJlcXVpcmVzIGFuIG9iamVjdCB0bwomIzQzO2JlIHNlZW4gdW5yZWZlcmVuY2VkIGluIHRoYXQgbWFueSBjb25zZWN1dGl2ZSBzY2FucyBiZWZvcmUgaXQgaXMgcmVwb3J0ZWQuCiYjNDM7S2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyCiYjNDM7dGhlIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZXMgZGVzY3JpYmVkIGFib3ZlLCBhdCB0aGUgY29zdCBvZiBkZWxheWluZwomIzQzO2dlbnVpbmUgcmVwb3J0cyBieSB1cCB0byB0aGF0IG1hbnkgc2NhbnMuIEl0IGNhbiBiZSBzZXQgYXQgYm9vdCB3aXRoCiYjNDM7YGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9Jmx0O24mZ3Q7YGAgb3IgYXQgcnVuLXRpbWUgdmlhCiYjNDM7YGAvc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc2BgLgomIzQzOwogTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCA3YzdiYTE3Y2U3YWYwMC4uNWIxNGNjYjM2Zjk1YmEgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuYwpAQCAtMTUxLDYgJiM0MzsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHsKIAlpbnQgbWluX2NvdW50OwogCS8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi8KIAlpbnQgY291bnQ7CiYjNDM7CS8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi8KJiM0MzsJdW5zaWduZWQgaW50IHVucmVmX3NjYW5zOwogCS8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqLwogCXUzMiBjaGVja3N1bTsKIAlkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7CkBAIC0yMzIsNiAmIzQzOzIzNCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkOwogLyogdXNlZCB0byBhdm9pZCByZXBvcnRpbmcgb2YgcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTsKJiM0MzsvKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxOwomIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47CiAvKiBkZWxheSBiZXR3ZWVuIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmdzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDsKQEAgLTY4Nyw2ICYjNDM7NjkyLDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcCkKIAlhdG9taWNfc2V0KCZhbXA7b2JqZWN0LSZndDt1c2VfY291bnQsIDEpOwogCW9iamVjdC0mZ3Q7ZXhjZXNzX3JlZiA9IDA7CiAJb2JqZWN0LSZndDtjb3VudCA9IDA7CQkJLyogd2hpdGUgY29sb3IgaW5pdGlhbGx5ICovCiYjNDM7CW9iamVjdC0mZ3Q7dW5yZWZfc2NhbnMgPSAwOwogCW9iamVjdC0mZ3Q7Y2hlY2tzdW0gPSAwOwogCW9iamVjdC0mZ3Q7ZGVsX3N0YXRlID0gMDsKIApAQCAtMTgzMyw2ICYjNDM7MTgzOSw5IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZCkKIAkJCQlfX3BhaW50X2l0KG9iamVjdCwgS01FTUxFQUtfQkxBQ0spOwogCQl9CiAKJiM0MzsJCS8qIHJlZmVyZW5jZWQgbGFzdCBzY2FuOiByZXN0YXJ0IHRoZSB1bnJlZmVyZW5jZWQgcnVuICovCiYjNDM7CQlpZiAoIWNvbG9yX3doaXRlKG9iamVjdCkpCiYjNDM7CQkJb2JqZWN0LSZndDt1bnJlZl9zY2FucyA9IDA7CiAJCS8qIHJlc2V0IHRoZSByZWZlcmVuY2UgY291bnQgKHdoaXRlbiB0aGUgb2JqZWN0KSAqLwogCQlvYmplY3QtJmd0O2NvdW50ID0gMDsKIAkJaWYgKGNvbG9yX2dyYXkob2JqZWN0KSAmYW1wOyZhbXA7IGdldF9vYmplY3Qob2JqZWN0KSkKQEAgLTE5NjgsOCAmIzQzOzE5NzcsOSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiAJCXJhd19zcGluX2xvY2tfaXJxKCZhbXA7b2JqZWN0LSZndDtsb2NrKTsKIAkJdHJhY2VfaGFuZGxlID0gMDsKIAkJZGVkdXBfcHJpbnQgPSBmYWxzZTsKLQkJaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSAmYW1wOyZhbXA7Ci0JCSAgICAhKG9iamVjdC0mZ3Q7ZmxhZ3MgJmFtcDsgT0JKRUNUX1JFUE9SVEVEKSkgewomIzQzOwkJaWYgKCEob2JqZWN0LSZndDtmbGFncyAmYW1wOyBPQkpFQ1RfUkVQT1JURUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICYjNDM7JiM0MztvYmplY3QtJmd0O3VucmVmX3NjYW5zICZndDs9IG1pbl91bnJlZl9zY2FucykgewogCQkJb2JqZWN0LSZndDtmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7CiAJCQlpZiAoa21lbWxlYWtfdmVyYm9zZSkgewogCQkJCXRyYWNlX2hhbmRsZSA9IG9iamVjdC0mZ3Q7dHJhY2VfaGFuZGxlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlNmRmOTY4ZjA5NzFjOC4uODQwMjZiNjJhMWFlNWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfZ3VwX3Rlc3Quc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaG1tLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2h1Z2V0bGIuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXZtLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2tzbS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rc21fbnVtYS5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNGFiNjRiYzY5NDhmOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaApAQCAtMCwwICYjNDM7MSwxMTEgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJiMzOTtzIE4tY29uc2VjdXRpdmUtc2NhbiBsZWFrIGNvbmZpcm1hdGlvbgomIzQzOyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuCiYjNDM7IwomIzQzOyMga21lbWxlYWsgb25seSByZXBvcnRzIGFuIG9iamVjdCBvbmNlIGl0IGhhcyBzdGF5ZWQgdW5yZWZlcmVuY2VkIGZvcgomIzQzOyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0CiYjNDM7IyBzY2FuIChoaXN0b3JpY2FsIGJlaGF2aW91cik7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyIHRyYW5zaWVudCBmYWxzZQomIzQzOyMgcG9zaXRpdmVzIHdoZXJlIGEgbGl2ZSBvYmplY3QmIzM5O3Mgb25seSByZWZlcmVuY2UgaXMgYnJpZWZseSBpbnZpc2libGUgdG8gYQomIzQzOyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlCiYjNDM7IyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsmIzM5O3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zCiYjNDM7IyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF0KJiM0MzsjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLAomIzQzOyMgY2hlY2tzIHRoYXQ6CiYjNDM7IyAgIC0gbWluX3VucmVmX3NjYW5zPTEgcmVwb3J0cyB0aGVtIG9uIHRoZSBmaXJzdCBzY2FuLAomIzQzOyMgICAtIG1pbl91bnJlZl9zY2Fucz0yIHJlcG9ydHMgbm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhbiBidXQgZG9lcyBvbiB0aGUKJiM0MzsjICAgICBzZWNvbmQsCiYjNDM7IyAgIC0gdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uCiYjNDM7IwomIzQzOyMgVGhlICYjMzQ7bm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhbiYjMzQ7IGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogd2l0aAomIzQzOyMgbWluX3VucmVmX3NjYW5zPTIgbm8gb2JqZWN0IGNhbiBiZSByZXBvcnRlZCBpbiBmZXdlciB0aGFuIHR3byBzY2Fucy4gTGlrZQomIzQzOyMga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm8gZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsCiYjNDM7IyBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIgdGhhbiBmYWlsaW5nLgomIzQzOyMKJiM0MzsjIEF1dGhvcjogQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsKJiM0Mztrc2Z0X3NraXA9NAomIzQzO0tNRU1MRUFLPS9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrCiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnMKJiM0MztNT0RVTEU9a21lbWxlYWstdGVzdAomIzQzO0FHRT02CQkjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJiMzOTtzIDVzIG1pbmltdW0gb2JqZWN0IGFnZQomIzQzOwomIzQzO3NraXAoKSB7IGVjaG8gJiMzNDtTS0lQOiAkKiYjMzQ7OyBleGl0ICRrc2Z0X3NraXA7IH0KJiM0MztmYWlsKCkgeyBlY2hvICYjMzQ7RkFJTDogJComIzM0OzsgZXhpdCAxOyB9CiYjNDM7cGFzcygpIHsgZWNobyAmIzM0O1BBU1M6ICQqJiMzNDs7IGV4aXQgMDsgfQomIzQzOwomIzQzO1sgJiMzNDskKGlkIC11KSYjMzQ7IC1lcSAwIF0gfHwgc2tpcCAmIzM0O211c3QgcnVuIGFzIHJvb3QmIzM0OwomIzQzO1sgLXIgJiMzNDskS01FTUxFQUsmIzM0OyBdIHx8IHNraXAgJiMzNDtubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspJiMzNDsKJiM0MztbIC13ICYjMzQ7JFBBUkFNJiMzNDsgXSB8fCBza2lwICYjMzQ7bWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIgbm90IHByZXNlbnQmIzM0OwomIzQzO21vZGluZm8gJiMzNDskTU9EVUxFJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fAomIzQzOwlza2lwICYjMzQ7JE1PRFVMRSBub3QgYnVpbHQgKENPTkZJR19TQU1QTEVfS01FTUxFQUspJiMzNDsKJiM0MzsKJiM0MzsjIGttZW1sZWFrIGNhbiBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCBhdCBydW50aW1lIChrbWVtbGVhaz1vZmYgYm9vdCBhcmcsCiYjNDM7IyBvciBpdCBzZWxmLWRpc2FibGVkIGFmdGVyIGFuIGludGVybmFsIGVycm9yKTsgYSAmIzM0O3NjYW4mIzM0OyB0aGVuIHJldHVybnMKJiM0MzsjIEVQRVJNLiBQcm9iZSBvbmNlIGFuZCBza2lwIGlmIHNvLgomIzQzO2VjaG8gc2NhbiAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsgMiZndDsvZGV2L251bGwgfHwKJiM0MzsJc2tpcCAmIzM0O2ttZW1sZWFrIGlzIGRpc2FibGVkIChjaGVjayBkbWVzZyBvciBrbWVtbGVhaz0gYm9vdCBhcmcpJiMzNDsKJiM0MzsKJiM0MztwcmV2PSQoY2F0ICYjMzQ7JFBBUkFNJiMzNDspCiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3ICAjIGludm9rZWQgaW5kaXJlY3RseSB2aWEgdHJhcAomIzQzO2NsZWFudXAoKSB7CiYjNDM7CWVjaG8gJiMzNDskcHJldiYjMzQ7ICZndDsgJiMzNDskUEFSQU0mIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZXN0b3JlIHRoZSBwYXJhbWV0ZXIKJiM0MzsJZWNobyBzY2FuPW9uICZndDsgJiMzNDskS01FTUxFQUsmIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZS1lbmFibGUgYXV0byBzY2FuCiYjNDM7CXJtbW9kICYjMzQ7JE1PRFVMRSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gY2xlYXIgJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhbgomIzQzOyMgb2JqZWN0JiMzOTtzIGNvbnNlY3V0aXZlLXVucmVmZXJlbmNlZCBydW4uIEFuIGF1dG8gc2NhbiBsYW5kaW5nIGJldHdlZW4gdHdvCiYjNDM7IyBtYW51YWwgc2NhbnMgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgYW5kIG1ha2UgdGhlIHRlc3QgZmxha3kuCiYjNDM7ZWNobyBzY2FuPW9mZiAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsjIENyZWF0ZSBhIGZyZXNoLCBhZ2VkIHNldCBvZiBvcnBoYW4gb2JqZWN0cyBmcm9tIHRoZSBoZWxwZXIgbW9kdWxlJiMzOTtzIGluaXQKJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLgomIzQzOyMgUHJlLWV4aXN0aW5nIHJlcG9ydGVkIGxlYWtzIGFyZSBncmV5ZWQgZmlyc3QgKCYjMzQ7Y2xlYXImIzM0Oykgc28gb25seSBvdXIKJiM0MzsjIG9ycGhhbnMgYXJlIGNvdW50ZWQuIFRoZSBtb2R1bGUgaXMgbGVmdCBsb2FkZWQgb24gcHVycG9zZTogb25jZSBpdCBpcwomIzQzOyMgdW5sb2FkZWQgaXRzIHN5bWJvbHMgYXJlIGdvbmUsIHNvIHRoZSBvcnBoYW4gYmFja3RyYWNlcyBubyBsb25nZXIgcmVzb2x2ZQomIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy4KJiM0MztnZW5fb3JwaGFucygpIHsKJiM0MzsJcm1tb2QgJiMzNDskTU9EVUxFJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBjbGVhciAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsKJiM0MzsJbW9kcHJvYmUgJiMzNDskTU9EVUxFJiMzNDsgfHwgc2tpcCAmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEUmIzM0OwomIzQzOwlzbGVlcCAmIzM0OyRBR0UmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzY2FuKCkgeyBlY2hvIHNjYW4gJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7OyB9CiYjNDM7CiYjNDM7IyBOdW1iZXIgb2YgaGVscGVyLW1vZHVsZSBvcnBoYW5zIGN1cnJlbnRseSByZXBvcnRlZCBieSBrbWVtbGVhay4gTWF0Y2hpbmcKJiM0MzsjIHRoZSBtb2R1bGUmIzM5O3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvCiYjNDM7IyB1bnJlbGF0ZWQgbGVha3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLiBrbWVtbGVhayBvbmx5IGxpc3RzIGFuIG9iamVjdCBoZXJlCiYjNDM7IyBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIHJlZmxlY3RzIHRoZSBjb25maXJtYXRpb24gZ2F0aW5nLgomIzQzO2NvdW50X29ycGhhbnMoKSB7CiYjNDM7CWM9JChncmVwIC1jICYjMzk7XFtrbWVtbGVha190ZXN0XF0mIzM5OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsKQomIzQzOwllY2hvICYjMzQ7JHtjOi0wfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uCiYjNDM7ZWNobyAzICZndDsgJiMzNDskUEFSQU0mIzM0OwomIzQzO1sgJiMzNDskKGNhdCAmIzM0OyRQQVJBTSYjMzQ7KSYjMzQ7ID0gJiMzNDszJiMzNDsgXSB8fCBmYWlsICYjMzQ7bWluX3VucmVmX3NjYW5zIGRpZCBub3QgcmVhZCBiYWNrIGFzIDMmIzM0OwomIzQzOwomIzQzOyMgMSkgbWluX3VucmVmX3NjYW5zPTEgKGRlZmF1bHQpOiBvcnBoYW5zIHJlcG9ydGVkIG9uIHRoZSBmaXJzdCBzY2FuLiBUaGlzCiYjNDM7IyAgICBhbHNvIGVzdGFibGlzaGVzIHRoYXQgdGhlIGhlbHBlciBwcm9kdWNlcyBkZXRlY3RhYmxlIG9ycGhhbnMgaGVyZS4KJiM0MztlY2hvIDEgJmd0OyAmIzM0OyRQQVJBTSYjMzQ7CiYjNDM7Z2VuX29ycGhhbnMKJiM0MztzY2FuCiYjNDM7Zmlyc3Q9JChjb3VudF9vcnBoYW5zKQomIzQzO1sgJiMzNDskZmlyc3QmIzM0OyAtZ3QgMCBdIHx8CiYjNDM7CXNraXAgJiMzNDskTU9EVUxFIHByb2R1Y2VkIG5vIGRldGVjdGFibGUgb3JwaGFucyAoY2Fubm90IHRlc3QgbWluX3VucmVmX3NjYW5zKSYjMzQ7CiYjNDM7CiYjNDM7IyAyKSBtaW5fdW5yZWZfc2NhbnM9Mjogbm90aGluZyByZXBvcnRlZCBhZnRlciB0aGUgZmlyc3Qgc2NhbiwgcmVwb3J0ZWQKJiM0MzsjICAgIGFmdGVyIHRoZSBzZWNvbmQuIFRoZSBmaXJzdC1zY2FuLXplcm8gY2hlY2sgaXMgdGhlIGNvcmUgcmVncmVzc2lvbi4KJiM0MztlY2hvIDIgJmd0OyAmIzM0OyRQQVJBTSYjMzQ7CiYjNDM7Z2VuX29ycGhhbnMKJiM0MztzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpCiYjNDM7c2NhbjsgczI9JChjb3VudF9vcnBoYW5zKQomIzQzO1sgJiMzNDskczEmIzM0OyAtZXEgMCBdIHx8IGZhaWwgJiMzNDttaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSByZXBvcnRlZCBhZnRlciB0aGUgMXN0IHNjYW4gKG11c3QgYmUgMCkmIzM0OwomIzQzO1sgJiMzNDskczImIzM0OyAtZ3QgMCBdIHx8IGZhaWwgJiMzNDttaW5fdW5yZWZfc2NhbnM9Mjogbm8gcmVwb3J0IG9uIHRoZSAybmQgc2NhbiAoZmFsc2UgbmVnYXRpdmUpJiMzNDsKJiM0MzsKJiM0MztwYXNzICYjMzQ7bWluX3VucmVmX3NjYW5zPTEgaW1tZWRpYXRlOyA9MiBnYXRlZCB0byAybmQgc2NhbiAoY291bnRzICRmaXJzdC8kczEvJHMyKTsgcGFyYW0gcmVhZC1iYWNrIG9rJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLbWVtbGVhayBQYXRjaCBGdXp6aW5nIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2ttZW1sZWFrLmNgIOKAkyBhZGRzIGEgYG1pbl91bnJlZl9zY2Fuc2AgbW9kdWxlIHBhcmFtZXRlciwgYW5kIGEgc2VsZnRlc3QsIGBrc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hgLiBJdCBzZWVtcyB0byBhZGQgYSBuZXcgYHVucmVmX3NjYW5zYCBmaWVsZCBpbiB0aGUgYGttZW1sZWFrX29iamVjdGAgc3RydWN0dXJlIGFuZCBtb2RpZmllcyBga21lbWxlYWtfc2NhbigpYCB0byB1c2UgaXQsIG9ubHkgcmVwb3J0aW5nIGFuIG9iamVjdCBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIHVucmVmZXJlbmNlZCBzY2Fucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVjaWRlIGlmIHRoaXMgbmVlZHMgZm9jdXNlZCBmdXp6aW5nLgoKS21lbWxlYWsgaXMgYSBtZW1vcnkgbGVhayBkZXRlY3RvciwgYSBkZWJ1Z2dpbmcgdG9vbC4gSXQmIzM5O3Mgbm90IGEgZGlyZWN0IGNvbnN1bWVyIG9mIHVudHJ1c3RlZCBpbnB1dCBpbiB0aGUgc2FtZSB3YXksIHNheSwgYSBuZXR3b3JrIHN0YWNrIGRyaXZlciBpcy4gSXQmIzM5O3MgcHVycG9zZSBpcyB0byBmaW5kIGxlYWtzLCBidXQgaXQgZG9lcyB0aGlzIGJ5IHNjYW5uaW5nIGV4aXN0aW5nIG1lbW9yeS4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG9vbCBpdHNlbGYhIENhbiBhIGZ1enplciAqdHJpZ2dlciogdGhlIG5ldyBjb2RlIHBhdGhzPyBBYnNvbHV0ZWx5LCBieSBsZWFraW5nIG1lbW9yeSBvciBpbnRlcmFjdGluZyB3aXRoIGttZW1sZWFrIHZpYSBkZWJ1Z2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLCBsaWtlIHRoZSBvbmUgYWRkZWQgaW4gdGhlIHBhdGNoLgoKVGhlIGdlbmVyYWwgcHJhY3RpY2UgaXMgdGhhdCB0b29scyBsaWtlIHRoaXMgYXJlICplbmFibGVkKiBkdXJpbmcgZnV6emluZyB0byBjYXRjaCBidWdzIGluIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBidXQgbm90IHByaW1hcmlseSBmdXp6ZWQgdGhlbXNlbHZlcy4gQnV0IHRoaXMgaXMgKmRpZmZlcmVudCogLSB0aGUgcGF0Y2ggKmNoYW5nZXMqIGhvdyBrbWVtbGVhayB3b3Jrcy4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgYWRkaW5nIGEgbmV3IGNvbnRyb2wgYW5kIGNoYW5naW5nIHRoZSByZXBvcnRpbmcgbG9naWMuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGZ1enppbmcgKmttZW1sZWFrIGl0c2VsZiogaXMgd29ydGh3aGlsZS4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCAmIzM0O25vJiMzNDsgYXMgYSBwcmltYXJ5IHRhcmdldC4gRGlhZ25vc3RpYyB0b29scyBhcmVuJiMzOTt0IHVzdWFsbHkgd2hlcmUgd2UgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gSG93ZXZlciwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGRlc2NyaXB0aW9ucyBmb3IgZGVidWdmcywgYW5kIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB0aG9zZS4KCk5vdywgdGhlIHByb21wdCByZW1pbmRzIG1lIG9mIHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZzogZG9jcywgY29tbWVudHMsIGxvZ2dpbmcsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcGF0Y2ggY2xlYXJseSBtb2RpZmllcyAqYWN0dWFsIGtlcm5lbCBsb2dpYyogd2l0aGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkg4oCTIGl0JiMzOTtzIG5vdCBqdXN0IGRvY3VtZW50YXRpb24uIEl0JiMzOTtzIGZ1bmN0aW9uYWwsIGFsdGVyaW5nIGhvdyBrbWVtbGVhayBvcGVyYXRlcy4gYGttZW1sZWFrX3NjYW5gIGlzIG1vZGlmaWVkLCBhbmQgdGhlIGNoYW5nZSBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiBob3cgbGVha3MgYXJlIHJlcG9ydGVkLiBJIHNob3VsZCBsb29rIGF0IGBtbS9rbWVtbGVhay5jYCBtb3JlIGNsb3NlbHkgYW5kIGNvbnNpZGVyIG90aGVyIGZ1bmN0aW9ucyBhcyB3ZWxsLiBgX19hbGxvY19vYmplY3RgIGhhcyBhbHNvIGJlZW4gY2hhbmdlZC4KClNvLCBhY2NvcmRpbmcgdG8gbXkgaW50ZXJuYWwgYXNzZXNzbWVudCwgYW5kIGluIHJlbGF0aW9uIHRvIHRoZSBndWlkZWxpbmVzLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gcnVuIHNvbWUgdmVyaWZpY2F0aW9uIHRvb2xzIGFuZCBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX3VucmVmX3NjYW5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rbWVtbGVhay5jPTIzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX21pbl9hZ2U7XG5tbS9rbWVtbGVhay5jLTIzNy0vKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovXG5tbS9rbWVtbGVhay5jOjIzODpzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG5tbS9rbWVtbGVhay5jOjIzOTptb2R1bGVfcGFyYW0obWluX3VucmVmX3NjYW5zLCB1aW50LCAwNjQ0KTtcbm1tL2ttZW1sZWFrLmMtMjQwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xuLS1cbm1tL2ttZW1sZWFrLmM9MTgwNj1zdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4tLVxubW0va21lbWxlYWsuYy0xOTgxLVx0XHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxubW0va21lbWxlYWsuYzoxOTgyOlx0XHQgICAgJiM0MzsmIzQzO29iamVjdC1cdTAwM2V1bnJlZl9zY2FucyBcdTAwM2U9IG1pbl91bnJlZl9zY2Fucykge1xubW0va21lbWxlYWsuYy0xOTgzLVx0XHRcdG9iamVjdC1cdTAwM2VmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBrbWVtbGVhayBEZWxheSBDb3VudGVyKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGttZW1sZWFrX3NjYW5gIGFuZCBgX19hbGxvY19vYmplY3RgLiAgYGttZW1sZWFrX3NjYW5gIGlzIGVpdGhlciBhIHRocmVhZCBvciB0cmlnZ2VyZWQgdmlhIGRlYnVnZnMsIHdoaWNoIHNvdW5kcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gIGBfX2FsbG9jX29iamVjdGAsIGhvd2V2ZXIsIGlzIGNhbGxlZCBldmVyeSBzaW5nbGUgdGltZSBrbWVtbGVhayB0cmFja3MgYW4gYWxsb2NhdGlvbi4gIFRoYXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbjsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgZ29pbmcgdG8gYmUgaGl0IGFsbCB0aGUgdGltZSBpZiBrbWVtbGVhayBpcyBlbmFibGVkLCBhbmQgdGhlIGluc3RydWN0aW9ucyBhcmUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLgoKU28sIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0PyBUaGUgY2hhbmdlIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdOKAmXMganVzdCBhIGNvdW50ZXIgdG8gZGVsYXkgbGVhayByZXBvcnRpbmcuICBGdXp6aW5nICpzcGVjaWZpY2FsbHkqIHRoZSBjb3VudGVyIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgbm90IHVuY292ZXIgYW55dGhpbmcgZWFydGgtc2hhdHRlcmluZy4gIFN0aWxsLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHZhbGlkIHRhcmdldHMuIElmIEkgZGVjaWRlIGl0ICppcyogd29ydGggZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpHaXZlbiB0aGF0IGBfX2FsbG9jX29iamVjdGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMganVzdCBmdXp6aW5nIGBrbWVtbGVha19zY2FuYC4gSXQmIzM5O3MgdGhlIG9ubHkgb25lIHRoYXQgc2VlbXMgcHJhY3RpY2FsIHRvIHB1dCBpbiBmb2N1cy4KCkJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzIHJlbGF0ZWQgdG8ga21lbWxlYWsgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfS01FTUxFQUsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU5MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipUcmFjaW5nIERvd24gREVCVUdfS01FTUxFQUsqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgREVCVUdfS01FTUxFQUtgLiBUaGlzIGlzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgb3IgZGVidWdnaW5nIHRvb2wgd29ya3Mgd2l0aGluIGEga2VybmVsIG9yIHN5c3RlbS4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgc2NvcGUsIGRlcGVuZGVuY2llcywgYW5kIGludGVuZGVkIHB1cnBvc2UuIEZyb20gdGhlcmUsIEkgY2FuIGxpa2VseSB0cmFjZSBpdHMgdXNhZ2UsIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgYWN0aXZlLCBhbmQgZXZlbnR1YWxseSBwaWVjZSB0b2dldGhlciB0aGUgZW50aXJlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHVzZSBzb21lIGdyZXAgb3Igc2ltaWxhciB0b29saW5nIHRvIHRyYWNrIGRvd24gdGhlIGhlYWRlciBmaWxlcyBvciBjb25maWd1cmF0aW9uIGZpbGVzIHdoZXJlIHRoaXMgbWFjcm8gaXMgZGVjbGFyZWQuIEtub3dpbmcgdGhlIGV4YWN0IGRlZmluaXRpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19LTUVNTEVBSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTIzNz1jb25maWcgSEFWRV9ERUJVR19LTUVNTEVBS1xuLS1cbm1tL0tjb25maWcuZGVidWctMjM5LVxubW0vS2NvbmZpZy5kZWJ1ZzoyNDA6Y29uZmlnIERFQlVHX0tNRU1MRUFLXG5tbS9LY29uZmlnLmRlYnVnLTI0MS1cdGJvb2wgXCYjMzQ7S2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yNjQtXG5tbS9LY29uZmlnLmRlYnVnOjI2NTpjb25maWcgREVCVUdfS01FTUxFQUtfTUVNX1BPT0xfU0laRVxubW0vS2NvbmZpZy5kZWJ1Zy0yNjYtXHRpbnQgXCYjMzQ7S21lbWxlYWsgbWVtb3J5IHBvb2wgc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjc3LVxubW0vS2NvbmZpZy5kZWJ1ZzoyNzg6Y29uZmlnIERFQlVHX0tNRU1MRUFLX0RFRkFVTFRfT0ZGXG5tbS9LY29uZmlnLmRlYnVnLTI3OS1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBrbWVtbGVhayB0byBvZmZcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTI4NC1cbm1tL0tjb25maWcuZGVidWc6Mjg1OmNvbmZpZyBERUJVR19LTUVNTEVBS19BVVRPX1NDQU5cbm1tL0tjb25maWcuZGVidWctMjg2LVx0Ym9vbCBcJiMzNDtFbmFibGUga21lbWxlYWsgYXV0byBzY2FuIHRocmVhZCBvbiBib290IHVwXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yOTktXG5tbS9LY29uZmlnLmRlYnVnOjMwMDpjb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxubW0vS2NvbmZpZy5kZWJ1Zy0zMDEtXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgREVCVUdfS01FTUxFQUtgIENvbmZpZyBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBjb25maWcgY2hhbmdlIGVuYWJsZXMgYERFQlVHX0tNRU1MRUFLYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBmdXp6aW5nIGl0IHdvcnRoIHRoZSBlZmZvcnQ/IEZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCBpdCBtb2RpZmllcyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIGNlcnRhaW4gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyAoYG1pbl91bnJlZl9zY2Fuc2ApIGJlZm9yZSByZXBvcnRpbmcgYSBsZWFrLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0ZSBtYWNoaW5lLCBhIGNvdW50ZXIgdGhhdCByZXNldHMgdXBvbiByZWZlcmVuY2luZyBhbmQgaW5jcmVtZW50cyBpZiB1bnJlZmVyZW5jZWQuCgpXaGlsZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCYjMzk7cyBzcGVjaWZpYyB0byBhIGRlYnVnZ2luZyB0b29sLiBTeXprYWxsZXIgb2Z0ZW4gaGFzIGBERUJVR19LTUVNTEVBS2AgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBkZXRlY3RpbmcgbGVha3MgaW4gKm90aGVyKiBjb2RlLiBUaGUgZ29hbCBvZiBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbmV3IGxvZ2ljIHdpdGhpbiBga21lbWxlYWtfc2NhbmAgaXRzZWxmLCBsb29raW5nIGZvciBidWdzIGxpa2UgaW50ZWdlciBvdmVyZmxvd3Mgb3IgcmFjZSBjb25kaXRpb25zLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBgb2JqZWN0LSZndDt1bnJlZl9zY2Fuc2AgaXMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGluY3JlbWVudGVkIHdpdGhpbiBga21lbWxlYWtfc2NhbmAgdW5kZXIgYSBgcmF3X3NwaW5fbG9ja19pcnEoJmFtcDtvYmplY3QtJmd0O2xvY2spYC4gQnV0IHdhaXQsIEkganVzdCBub3RpY2VkIHNvbWV0aGluZy4gVGhlIHZhcmlhYmxlIGBvYmplY3QtJmd0O3VucmVmX3NjYW5zYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIHdpdGhpbiB0aGUgc2FtZSBmdW5jdGlvbiBhbmQgKndpdGhvdXQqIHRoZSBsb2NrLiBUaGlzIGJlYXJzIGxvb2tpbmcgaW50by4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL2ttZW1sZWFrLmNgIGFyb3VuZCBsaW5lIDE4MzkuIFRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdCNlbmRpZlxuMTgzMTpcdFxuMTgzMjpcdFx0XHQvKiBpZ25vcmUgb2JqZWN0cyBvdXRzaWRlIGxvd21lbSAocGFpbnQgdGhlbSBibGFjaykgKi9cbjE4MzM6XHRcdFx0aWYgKChvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9QSFlTKSBcdTAwMjZcdTAwMjZcbjE4MzQ6XHRcdFx0ICAgIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9OT19TQ0FOKSkge1xuMTgzNTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcGh5cyA9IG9iamVjdC1cdTAwM2Vwb2ludGVyO1xuMTgzNjpcdFxuMTgzNzpcdFx0XHRcdGlmIChQSFlTX1BGTihwaHlzKSBcdTAwM2MgbWluX2xvd19wZm4gfHxcbjE4Mzg6XHRcdFx0XHQgICAgUEhZU19QRk4ocGh5cyAmIzQzOyBvYmplY3QtXHUwMDNlc2l6ZSkgXHUwMDNlIG1heF9sb3dfcGZuKVxuMTgzOTpcdFx0XHRcdFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcbjE4NDA6XHRcdFx0fVxuMTg0MTpcdFxuMTg0MjpcdFx0XHQvKiByZWZlcmVuY2VkIGxhc3Qgc2NhbjogcmVzdGFydCB0aGUgdW5yZWZlcmVuY2VkIHJ1biAqL1xuMTg0MzpcdFx0XHRpZiAoIWNvbG9yX3doaXRlKG9iamVjdCkpXG4xODQ0Olx0XHRcdFx0b2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zID0gMDtcbjE4NDU6XHRcdFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXG4xODQ2Olx0XHRcdG9iamVjdC1cdTAwM2Vjb3VudCA9IDA7XG4xODQ3Olx0XHRcdGlmIChjb2xvcl9ncmF5KG9iamVjdCkgXHUwMDI2XHUwMDI2IGdldF9vYmplY3Qob2JqZWN0KSlcbjE4NDg6XHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9iamVjdC1cdTAwM2VncmF5X2xpc3QsIFx1MDAyNmdyYXlfbGlzdCk7XG4xODQ5Olx0XG4xODUwOlx0XHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2b2JqZWN0LVx1MDAzZWxvY2spO1xuMTg1MTpcdFxuMTg1MjpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4xODUzOlx0XHRcdFx0a21lbWxlYWtfY29uZF9yZXNjaGVkKG9iamVjdCk7XG4xODU0Olx0XHR9XG4xODU1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE4NTY6XHRcbjE4NTc6XHQjaWZkZWYgQ09ORklHX1NNUFxuMTg1ODpcdFx0LyogcGVyLWNwdSBzZWN0aW9ucyBzY2FubmluZyAqL1xuMTg1OTpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEtNRU1MRUFLOiBBIFRhcmdldGVkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHBpbnBvaW50ZWQgdGhlIHJlbGV2YW50IGNvZGUgc2VnbWVudC4gVGhlIGNydWNpYWwgbG9ja2luZyBvcGVyYXRpb24sIHRoZSByYXcgc3BpbiBsb2NrLCBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgcmF3X3NwaW5fbG9ja19pcnEoJmFtcDtvYmplY3QtJmd0O2xvY2spYCBibG9jay4gUmVsaWVmISBUaGUgY29ycmVzcG9uZGluZyByZWxlYXNlIGlzIGhhbmRsZWQgZnVydGhlciBkb3duLCBhdCBsaW5lIDE4NTAuIExvb2tzIHNhZmUgZnJvbSBhIGJhc2ljIGxvY2svdW5sb2NrIHBlcnNwZWN0aXZlLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4gVGltZSB0byBtYWtlIHN1cmUgSSYjMzk7bSBnb2luZyB0byBiZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbiBga21lbWxlYWtfc2NhbmAuCgpMZXQmIzM5O3MgYWxzbyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2U6IGBERUJVR19LTUVNTEVBS2Agd2lsbCBiZSBteSBmcmllbmQuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLiBHb3R0YSBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19vYmplY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rbWVtbGVhay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmM9NjU4PXN0YXRpYyBub2lubGluZSBkZXBvdF9zdGFja19oYW5kbGVfdCBzZXRfdHJhY2tfcHJlcGFyZSh2b2lkKVxuLS1cbm1tL2ttZW1sZWFrLmMtNjc2LVxubW0va21lbWxlYWsuYzo2Nzc6c3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcClcbm1tL2ttZW1sZWFrLmMtNjc4LXtcbi0tXG5tbS9rbWVtbGVhay5jPTc4OT1zdGF0aWMgdm9pZCBfX2NyZWF0ZV9vYmplY3QodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLFxuLS1cbm1tL2ttZW1sZWFrLmMtNzk1LVxubW0va21lbWxlYWsuYzo3OTY6XHRvYmplY3QgPSBfX2FsbG9jX29iamVjdChnZnApO1xubW0va21lbWxlYWsuYy03OTctXHRpZiAoIW9iamVjdClcbi0tXG5tbS9rbWVtbGVhay5jPTg3MT1zdGF0aWMgdm9pZCBkZWxldGVfb2JqZWN0X3BhcnQodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLFxuLS1cbm1tL2ttZW1sZWFrLmMtODc2LVxubW0va21lbWxlYWsuYzo4Nzc6XHRvYmplY3RfbCA9IF9fYWxsb2Nfb2JqZWN0KEdGUF9LRVJORUwpO1xubW0va21lbWxlYWsuYy04NzgtXHRpZiAoIW9iamVjdF9sKVxuLS1cbm1tL2ttZW1sZWFrLmMtODgwLVxubW0va21lbWxlYWsuYzo4ODE6XHRvYmplY3RfciA9IF9fYWxsb2Nfb2JqZWN0KEdGUF9LRVJORUwpO1xubW0va21lbWxlYWsuYy04ODItXHRpZiAoIW9iamVjdF9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODUzCgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGttZW1sZWFrIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrbWVtbGVha2AsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGhlcmUgaXMgdGhlIGhvdC1wYXRoIGZ1bmN0aW9uIGBfX2FsbG9jX29iamVjdGAgYW5kIGBrbWVtbGVha19zY2FuYC4gV2UgbmVlZCB0byBhdm9pZCBgX19hbGxvY19vYmplY3RgIGR1ZSB0byBpdHMgaGlnaC1mcmVxdWVuY3kgdXNlLiBUaGUgbWFpbiBzY2FubmluZyBsb2dpYyBzZWVtcyB0byBiZSBjb25jZW50cmF0ZWQgaW4gYGttZW1sZWFrX3NjYW5gLCB3aGljaCBpcyB3aGVyZSB0aGUgbmV3IGB1bnJlZl9zY2Fuc2AgZmllbGQgY29tZXMgaW50byBwbGF5LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgYmlnIG9uZSBzZWVtcyB0byBiZSBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCwgb2YgY291cnNlLiBIbW0sIGBtaW5fdW5yZWZfc2NhbnNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciDigJMgdGhhdCBjb3VsZCBiZSB1c2VmdWwgdG8gbWFuaXB1bGF0ZS4gT3RoZXIgdGhhbiB0aG9zZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiBgX19hbGxvY19vYmplY3RgIGFuZCBga21lbWxlYWtfc2NhbmAsIHdoaWNoIGlzIGdvb2QgbmV3cyBmb3IgZm9jdXNpbmcgb3VyIGZ1enppbmcgZWZmb3J0cy4KCk5vdywgaXMgYGttZW1sZWFrX3NjYW5gIHJlYWNoYWJsZT8gWWVzLCBpdCYjMzk7cyBjYWxsZWQgYnkgYGttZW1sZWFrX3NjYW5fdGhyZWFkYCBhbmQsIGltcG9ydGFudGx5LCB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIHdyaXRlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha2AuIEFuZCBoZXksIFN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciB0aGF0IGRlYnVnZnMgaW50ZXJmYWNlLiBQZXJmZWN0ISBUaGlzIG1lYW5zIHdlIGNhbiB0cmlnZ2VyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgYGttZW1sZWFrX3NjYW5gIHByZXR0eSBlYXNpbHkuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoIHByZXNlbnRzIGEgdmFsdWFibGUgZnV6emluZyB0YXJnZXQuIFRoZSBuZXcgbG9naWMgaW4gYGttZW1sZWFrYCB0byBkZWxheSBsZWFrIHJlcG9ydGluZyBhbmQgcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIHVucmVmZXJlbmNlZCBzY2FucyAqZGlyZWN0bHkqIG1vZGlmaWVzIHRoZSBjb3JlIHNjYW4gbG9naWMgaW4gYGttZW1sZWFrX3NjYW5gLiBXZSBzaG91bGQgZGVmaW5pdGVseSBiZSBmdXp6aW5nIHRoaXMhCgpUaGVyZWZvcmUsIEkmIzM5O2xsIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSwgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBga21lbWxlYWtfc2NhbmAsIGVuYWJsZSBgREVCVUdfS01FTUxFQUtgLCBhbmQgdGhlIHJlYXNvbiBpcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgY3JpdGljYWwgbG9naWMgaW4ga21lbWxlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19LTUVNTEVBSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ttZW1sZWFrX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGttZW1sZWFrIHNjYW5uaW5nIGxvZ2ljIGJ5IGFkZGluZyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGBtaW5fdW5yZWZfc2NhbnNgIGFuZCBtb2RpZnlpbmcgYGttZW1sZWFrX3NjYW5gIHRvIHJlcXVpcmUgYSBtaW5pbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSB1bnJlZmVyZW5jZWQgc2NhbnMgYmVmb3JlIHJlcG9ydGluZyBhbiBvYmplY3QuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgc3RhdGUgbWFjaGluZSBvZiB0aGUgbGVhayBkZXRlY3Rvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfS01FTUxFQUsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrbWVtbGVhayBzY2FubmluZyBsb2dpYyBieSBhZGRpbmcgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgbW9kaWZ5aW5nIGBrbWVtbGVha19zY2FuYCB0byByZXF1aXJlIGEgbWluaW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdW5yZWZlcmVuY2VkIHNjYW5zIGJlZm9yZSByZXBvcnRpbmcgYW4gb2JqZWN0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIHN0YXRlIG1hY2hpbmUgb2YgdGhlIGxlYWsgZGV0ZWN0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjowOC41MjcyMjc1NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg5MzQzMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjowOC41MjcyMzI1ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjI2NTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkN2Y0MzYyMjUzZTdiNWJkOTM0OGYxN2Q4YThiNTgwNzAxYzg0ZWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6NDI6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XFxuaW5kZXggN2Q3ODRlMDNmM2Y5ZDUuLmE4YTgzYmM2OWNlYjg4IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxcbkBAIC0xOTgsNiArMTk4LDE0IEBAIHN5c3RlbXMsIGJlY2F1c2Ugb2YgcG9pbnRlcnMgdGVtcG9yYXJpbHkgc3RvcmVkIGluIENQVSByZWdpc3RlcnMgb3JcXG4gc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nXFxuIHRoZSBtaW5pbXVtIGFnZSBvZiBhbiBvYmplY3QgdG8gYmUgcmVwb3J0ZWQgYXMgYSBtZW1vcnkgbGVhay5cXG4gXFxuK1RoZSBgYG1pbl91bnJlZl9zY2Fuc2BgIG1vZHVsZSBwYXJhbWV0ZXIgKGRlZmF1bHQgMSkgcmVxdWlyZXMgYW4gb2JqZWN0IHRvXFxuK2JlIHNlZW4gdW5yZWZlcmVuY2VkIGluIHRoYXQgbWFueSBjb25zZWN1dGl2ZSBzY2FucyBiZWZvcmUgaXQgaXMgcmVwb3J0ZWQuXFxuK0tlZXBpbmcgaXQgYXQgMSBwcmVzZXJ2ZXMgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3VyOyBoaWdoZXIgdmFsdWVzIGZpbHRlclxcbit0aGUgdHJhbnNpZW50IGZhbHNlIHBvc2l0aXZlcyBkZXNjcmliZWQgYWJvdmUsIGF0IHRoZSBjb3N0IG9mIGRlbGF5aW5nXFxuK2dlbnVpbmUgcmVwb3J0cyBieSB1cCB0byB0aGF0IG1hbnkgc2NhbnMuIEl0IGNhbiBiZSBzZXQgYXQgYm9vdCB3aXRoXFxuK2Bga21lbWxlYWsubWluX3VucmVmX3NjYW5zPVxcdTAwM2NuXFx1MDAzZWBgIG9yIGF0IHJ1bi10aW1lIHZpYVxcbitgYC9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zYGAuXFxuK1xcbiBMaW1pdGF0aW9ucyBhbmQgRHJhd2JhY2tzXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jXFxuaW5kZXggN2M3YmExN2NlN2FmMDAuLjViMTRjY2IzNmY5NWJhIDEwMDY0NFxcbi0tLSBhL21tL2ttZW1sZWFrLmNcXG4rKysgYi9tbS9rbWVtbGVhay5jXFxuQEAgLTE1MSw2ICsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHtcXG4gXFx0aW50IG1pbl9jb3VudDtcXG4gXFx0LyogdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludGVycyBmb3VuZCBwb2ludGluZyB0byB0aGlzIG9iamVjdCAqL1xcbiBcXHRpbnQgY291bnQ7XFxuK1xcdC8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi9cXG4rXFx0dW5zaWduZWQgaW50IHVucmVmX3NjYW5zO1xcbiBcXHQvKiBjaGVja3N1bSBmb3IgZGV0ZWN0aW5nIG1vZGlmaWVkIG9iamVjdHMgKi9cXG4gXFx0dTMyIGNoZWNrc3VtO1xcbiBcXHRkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7XFxuQEAgLTIzMiw2ICsyMzQsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfcGVyY3B1X2FkZHI7XFxuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkO1xcbiAvKiB1c2VkIHRvIGF2b2lkIHJlcG9ydGluZyBvZiByZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cyAqL1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX21pbl9hZ2U7XFxuKy8qIGNvbnNlY3V0aXZlIHNjYW5zIGFuIG9iamVjdCBtdXN0IHN0YXkgdW5yZWZlcmVuY2VkIGJlZm9yZSByZXBvcnRpbmcgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxO1xcbittb2R1bGVfcGFyYW0obWluX3VucmVmX3NjYW5zLCB1aW50LCAwNjQ0KTtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47XFxuIC8qIGRlbGF5IGJldHdlZW4gYXV0b21hdGljIG1lbW9yeSBzY2FubmluZ3MgKi9cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19zY2FuX3dhaXQ7XFxuQEAgLTY4Nyw2ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxcbiBcXHRhdG9taWNfc2V0KFxcdTAwMjZvYmplY3QtXFx1MDAzZXVzZV9jb3VudCwgMSk7XFxuIFxcdG9iamVjdC1cXHUwMDNlZXhjZXNzX3JlZiA9IDA7XFxuIFxcdG9iamVjdC1cXHUwMDNlY291bnQgPSAwO1xcdFxcdFxcdC8qIHdoaXRlIGNvbG9yIGluaXRpYWxseSAqL1xcbitcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0b2JqZWN0LVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuIFxcdG9iamVjdC1cXHUwMDNlZGVsX3N0YXRlID0gMDtcXG4gXFxuQEAgLTE4MzMsNiArMTgzOSw5IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4gXFx0XFx0XFx0XFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cXG4rXFx0XFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxcbitcXHRcXHRcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0XFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXFxuIFxcdFxcdG9iamVjdC1cXHUwMDNlY291bnQgPSAwO1xcbiBcXHRcXHRpZiAoY29sb3JfZ3JheShvYmplY3QpIFxcdTAwMjZcXHUwMDI2IGdldF9vYmplY3Qob2JqZWN0KSlcXG5AQCAtMTk2OCw4ICsxOTc3LDkgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxcbiBcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycShcXHUwMDI2b2JqZWN0LVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0dHJhY2VfaGFuZGxlID0gMDtcXG4gXFx0XFx0ZGVkdXBfcHJpbnQgPSBmYWxzZTtcXG4tXFx0XFx0aWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIShvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xcbitcXHRcXHRpZiAoIShvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICArK29iamVjdC1cXHUwMDNldW5yZWZfc2NhbnMgXFx1MDAzZT0gbWluX3VucmVmX3NjYW5zKSB7XFxuIFxcdFxcdFxcdG9iamVjdC1cXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xcbiBcXHRcXHRcXHRpZiAoa21lbWxlYWtfdmVyYm9zZSkge1xcbiBcXHRcXHRcXHRcXHR0cmFjZV9oYW5kbGUgPSBvYmplY3QtXFx1MDAzZXRyYWNlX2hhbmRsZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li44NDAyNmI2MmExYWU1ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTE1MCw2ICsxNTAsNyBAQCBURVNUX1BST0dTICs9IGtzZnRfZ3VwX3Rlc3Quc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2htbS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfaHVnZXRsYi5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfaHVnZXZtLnNoXFxuK1RFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19kZWR1cC5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfa3NtLnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rc21fbnVtYS5zaFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNGFiNjRiYzY5NDhmOFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcXG5AQCAtMCwwICsxLDExMSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJ3MgTi1jb25zZWN1dGl2ZS1zY2FuIGxlYWsgY29uZmlybWF0aW9uXFxuKyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuXFxuKyNcXG4rIyBrbWVtbGVhayBvbmx5IHJlcG9ydHMgYW4gb2JqZWN0IG9uY2UgaXQgaGFzIHN0YXllZCB1bnJlZmVyZW5jZWQgZm9yXFxuKyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0XFxuKyMgc2NhbiAoaGlzdG9yaWNhbCBiZWhhdmlvdXIpOyBoaWdoZXIgdmFsdWVzIGZpbHRlciB0cmFuc2llbnQgZmFsc2VcXG4rIyBwb3NpdGl2ZXMgd2hlcmUgYSBsaXZlIG9iamVjdCdzIG9ubHkgcmVmZXJlbmNlIGlzIGJyaWVmbHkgaW52aXNpYmxlIHRvIGFcXG4rIyBzaW5nbGUgc2NhbiAoZS5nLiBhbiBSQ1UgdHJlZSB1cGRhdGUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBzY2FuIHJ1bnMpLiBUaGVcXG4rIyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsncyBoZWxwZXIgbW9kdWxlIHRvIGNyZWF0ZSBvcnBoYW4gYWxsb2NhdGlvbnNcXG4rIyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF1cXG4rIyBiYWNrdHJhY2Ugc28gdW5yZWxhdGVkIGxlYWtzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc3lzdGVtIGFyZSBpZ25vcmVkKSxcXG4rIyBjaGVja3MgdGhhdDpcXG4rIyAgIC0gbWluX3VucmVmX3NjYW5zPTEgcmVwb3J0cyB0aGVtIG9uIHRoZSBmaXJzdCBzY2FuLFxcbisjICAgLSBtaW5fdW5yZWZfc2NhbnM9MiByZXBvcnRzIG5vdGhpbmcgb24gdGhlIGZpcnN0IHNjYW4gYnV0IGRvZXMgb24gdGhlXFxuKyMgICAgIHNlY29uZCxcXG4rIyAgIC0gdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXFxuKyNcXG4rIyBUaGUgXFxcIm5vdGhpbmcgb24gdGhlIGZpcnN0IHNjYW5cXFwiIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogd2l0aFxcbisjIG1pbl91bnJlZl9zY2Fucz0yIG5vIG9iamVjdCBjYW4gYmUgcmVwb3J0ZWQgaW4gZmV3ZXIgdGhhbiB0d28gc2NhbnMuIExpa2VcXG4rIyBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoLCBpZiB0aGUgbW9kdWxlIHlpZWxkcyBubyBkZXRlY3RhYmxlIG9ycGhhbiBhdCBhbGxcXG4rIyBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIgdGhhbiBmYWlsaW5nLlxcbisjXFxuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbitcXG4ra3NmdF9za2lwPTRcXG4rS01FTUxFQUs9L3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtcXG4rUEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcXG4rTU9EVUxFPWttZW1sZWFrLXRlc3RcXG4rQUdFPTZcXHRcXHQjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJ3MgNXMgbWluaW11bSBvYmplY3QgYWdlXFxuK1xcbitza2lwKCkgeyBlY2hvIFxcXCJTS0lQOiAkKlxcXCI7IGV4aXQgJGtzZnRfc2tpcDsgfVxcbitmYWlsKCkgeyBlY2hvIFxcXCJGQUlMOiAkKlxcXCI7IGV4aXQgMTsgfVxcbitwYXNzKCkgeyBlY2hvIFxcXCJQQVNTOiAkKlxcXCI7IGV4aXQgMDsgfVxcbitcXG4rWyBcXFwiJChpZCAtdSlcXFwiIC1lcSAwIF0gfHwgc2tpcCBcXFwibXVzdCBydW4gYXMgcm9vdFxcXCJcXG4rWyAtciBcXFwiJEtNRU1MRUFLXFxcIiBdIHx8IHNraXAgXFxcIm5vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcXFwiXFxuK1sgLXcgXFxcIiRQQVJBTVxcXCIgXSB8fCBza2lwIFxcXCJtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFxcXCJcXG4rbW9kaW5mbyBcXFwiJE1PRFVMRVxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIHx8XFxuK1xcdHNraXAgXFxcIiRNT0RVTEUgbm90IGJ1aWx0IChDT05GSUdfU0FNUExFX0tNRU1MRUFLKVxcXCJcXG4rXFxuKyMga21lbWxlYWsgY2FuIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIGF0IHJ1bnRpbWUgKGttZW1sZWFrPW9mZiBib290IGFyZyxcXG4rIyBvciBpdCBzZWxmLWRpc2FibGVkIGFmdGVyIGFuIGludGVybmFsIGVycm9yKTsgYSBcXFwic2NhblxcXCIgdGhlbiByZXR1cm5zXFxuKyMgRVBFUk0uIFByb2JlIG9uY2UgYW5kIHNraXAgaWYgc28uXFxuK2VjaG8gc2NhbiBcXHUwMDNlIFxcXCIkS01FTUxFQUtcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8XFxuK1xcdHNraXAgXFxcImttZW1sZWFrIGlzIGRpc2FibGVkIChjaGVjayBkbWVzZyBvciBrbWVtbGVhaz0gYm9vdCBhcmcpXFxcIlxcbitcXG4rcHJldj0kKGNhdCBcXFwiJFBBUkFNXFxcIilcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3ICAjIGludm9rZWQgaW5kaXJlY3RseSB2aWEgdHJhcFxcbitjbGVhbnVwKCkge1xcbitcXHRlY2hvIFxcXCIkcHJldlxcXCIgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcdFxcdCMgcmVzdG9yZSB0aGUgcGFyYW1ldGVyXFxuK1xcdGVjaG8gc2Nhbj1vbiBcXHUwMDNlIFxcXCIkS01FTUxFQUtcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFx0XFx0IyByZS1lbmFibGUgYXV0byBzY2FuXFxuK1xcdHJtbW9kIFxcXCIkTU9EVUxFXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIGNsZWFyIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rfVxcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rIyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxcbisjIG9iamVjdCdzIGNvbnNlY3V0aXZlLXVucmVmZXJlbmNlZCBydW4uIEFuIGF1dG8gc2NhbiBsYW5kaW5nIGJldHdlZW4gdHdvXFxuKyMgbWFudWFsIHNjYW5zIHdvdWxkIGNoYW5nZSB0aGUgcmVzdWx0IGFuZCBtYWtlIHRoZSB0ZXN0IGZsYWt5LlxcbitlY2hvIHNjYW49b2ZmIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFxuKyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUncyBpbml0XFxuKyMgcGF0aCAoaXRzIGttYWxsb2Mvdm1hbGxvYy9wZXJjcHUgYWxsb2NhdGlvbnMgYXJlIGRyb3BwZWQgcmlnaHQgYXdheSkuXFxuKyMgUHJlLWV4aXN0aW5nIHJlcG9ydGVkIGxlYWtzIGFyZSBncmV5ZWQgZmlyc3QgKFxcXCJjbGVhclxcXCIpIHNvIG9ubHkgb3VyXFxuKyMgb3JwaGFucyBhcmUgY291bnRlZC4gVGhlIG1vZHVsZSBpcyBsZWZ0IGxvYWRlZCBvbiBwdXJwb3NlOiBvbmNlIGl0IGlzXFxuKyMgdW5sb2FkZWQgaXRzIHN5bWJvbHMgYXJlIGdvbmUsIHNvIHRoZSBvcnBoYW4gYmFja3RyYWNlcyBubyBsb25nZXIgcmVzb2x2ZVxcbisjIHRvIFtrbWVtbGVha190ZXN0XSBhbmQgY291bGQgbm90IGJlIG1hdGNoZWQgYmVsb3cuXFxuK2dlbl9vcnBoYW5zKCkge1xcbitcXHRybW1vZCBcXFwiJE1PRFVMRVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWNobyBjbGVhciBcXHUwMDNlIFxcXCIkS01FTUxFQUtcXFwiXFxuK1xcdG1vZHByb2JlIFxcXCIkTU9EVUxFXFxcIiB8fCBza2lwIFxcXCJmYWlsZWQgdG8gbG9hZCAkTU9EVUxFXFxcIlxcbitcXHRzbGVlcCBcXFwiJEFHRVxcXCJcXG4rfVxcbitcXG4rc2NhbigpIHsgZWNobyBzY2FuIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCI7IH1cXG4rXFxuKyMgTnVtYmVyIG9mIGhlbHBlci1tb2R1bGUgb3JwaGFucyBjdXJyZW50bHkgcmVwb3J0ZWQgYnkga21lbWxlYWsuIE1hdGNoaW5nXFxuKyMgdGhlIG1vZHVsZSdzIG93biBiYWNrdHJhY2UgKFtrbWVtbGVha190ZXN0XSkga2VlcHMgdGhlIGNvdW50IGltbXVuZSB0b1xcbisjIHVucmVsYXRlZCBsZWFrcyBvbiB0aGUgcnVubmluZyBzeXN0ZW0uIGttZW1sZWFrIG9ubHkgbGlzdHMgYW4gb2JqZWN0IGhlcmVcXG4rIyBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIHJlZmxlY3RzIHRoZSBjb25maXJtYXRpb24gZ2F0aW5nLlxcbitjb3VudF9vcnBoYW5zKCkge1xcbitcXHRjPSQoZ3JlcCAtYyAnXFxcXFtrbWVtbGVha190ZXN0XFxcXF0nIFxcXCIkS01FTUxFQUtcXFwiIDJcXHUwMDNlL2Rldi9udWxsKVxcbitcXHRlY2hvIFxcXCIke2M6LTB9XFxcIlxcbit9XFxuK1xcbisjIDApIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxcbitlY2hvIDMgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIlxcbitbIFxcXCIkKGNhdCBcXFwiJFBBUkFNXFxcIilcXFwiID0gXFxcIjNcXFwiIF0gfHwgZmFpbCBcXFwibWluX3VucmVmX3NjYW5zIGRpZCBub3QgcmVhZCBiYWNrIGFzIDNcXFwiXFxuK1xcbisjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb3JwaGFucyByZXBvcnRlZCBvbiB0aGUgZmlyc3Qgc2Nhbi4gVGhpc1xcbisjICAgIGFsc28gZXN0YWJsaXNoZXMgdGhhdCB0aGUgaGVscGVyIHByb2R1Y2VzIGRldGVjdGFibGUgb3JwaGFucyBoZXJlLlxcbitlY2hvIDEgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIlxcbitnZW5fb3JwaGFuc1xcbitzY2FuXFxuK2ZpcnN0PSQoY291bnRfb3JwaGFucylcXG4rWyBcXFwiJGZpcnN0XFxcIiAtZ3QgMCBdIHx8XFxuK1xcdHNraXAgXFxcIiRNT0RVTEUgcHJvZHVjZWQgbm8gZGV0ZWN0YWJsZSBvcnBoYW5zIChjYW5ub3QgdGVzdCBtaW5fdW5yZWZfc2NhbnMpXFxcIlxcbitcXG4rIyAyKSBtaW5fdW5yZWZfc2NhbnM9Mjogbm90aGluZyByZXBvcnRlZCBhZnRlciB0aGUgZmlyc3Qgc2NhbiwgcmVwb3J0ZWRcXG4rIyAgICBhZnRlciB0aGUgc2Vjb25kLiBUaGUgZmlyc3Qtc2Nhbi16ZXJvIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24uXFxuK2VjaG8gMiBcXHUwMDNlIFxcXCIkUEFSQU1cXFwiXFxuK2dlbl9vcnBoYW5zXFxuK3NjYW47IHMxPSQoY291bnRfb3JwaGFucylcXG4rc2NhbjsgczI9JChjb3VudF9vcnBoYW5zKVxcbitbIFxcXCIkczFcXFwiIC1lcSAwIF0gfHwgZmFpbCBcXFwibWluX3VucmVmX3NjYW5zPTI6ICRzMSBvcnBoYW4ocykgcmVwb3J0ZWQgYWZ0ZXIgdGhlIDFzdCBzY2FuIChtdXN0IGJlIDApXFxcIlxcbitbIFxcXCIkczJcXFwiIC1ndCAwIF0gfHwgZmFpbCBcXFwibWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBvbiB0aGUgMm5kIHNjYW4gKGZhbHNlIG5lZ2F0aXZlKVxcXCJcXG4rXFxuK3Bhc3MgXFxcIm1pbl91bnJlZl9zY2Fucz0xIGltbWVkaWF0ZTsgPTIgZ2F0ZWQgdG8gMm5kIHNjYW4gKGNvdW50cyAkZmlyc3QvJHMxLyRzMik7IHBhcmFtIHJlYWQtYmFjayBva1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDI6MDkuMTMwMzI1MDg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI5MDMyMzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJkN2Y0MzYyMjUzZTdiNWJkOTM0OGYxN2Q4YThiNTgwNzAxYzg0ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0MjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuaW5kZXggN2Q3ODRlMDNmM2Y5ZDUuLmE4YTgzYmM2OWNlYjg4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbkBAIC0xOTgsNiArMTk4LDE0IEBAIHN5c3RlbXMsIGJlY2F1c2Ugb2YgcG9pbnRlcnMgdGVtcG9yYXJpbHkgc3RvcmVkIGluIENQVSByZWdpc3RlcnMgb3JcbiBzdGFja3MuIEttZW1sZWFrIGRlZmluZXMgTVNFQ1NfTUlOX0FHRSAoZGVmYXVsdGluZyB0byAxMDAwKSByZXByZXNlbnRpbmdcbiB0aGUgbWluaW11bSBhZ2Ugb2YgYW4gb2JqZWN0IHRvIGJlIHJlcG9ydGVkIGFzIGEgbWVtb3J5IGxlYWsuXG4gXG4rVGhlIGBgbWluX3VucmVmX3NjYW5zYGAgbW9kdWxlIHBhcmFtZXRlciAoZGVmYXVsdCAxKSByZXF1aXJlcyBhbiBvYmplY3QgdG9cbitiZSBzZWVuIHVucmVmZXJlbmNlZCBpbiB0aGF0IG1hbnkgY29uc2VjdXRpdmUgc2NhbnMgYmVmb3JlIGl0IGlzIHJlcG9ydGVkLlxuK0tlZXBpbmcgaXQgYXQgMSBwcmVzZXJ2ZXMgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3VyOyBoaWdoZXIgdmFsdWVzIGZpbHRlclxuK3RoZSB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmVzIGRlc2NyaWJlZCBhYm92ZSwgYXQgdGhlIGNvc3Qgb2YgZGVsYXlpbmdcbitnZW51aW5lIHJlcG9ydHMgYnkgdXAgdG8gdGhhdCBtYW55IHNjYW5zLiBJdCBjYW4gYmUgc2V0IGF0IGJvb3Qgd2l0aFxuK2Bga21lbWxlYWsubWluX3VucmVmX3NjYW5zPVx1MDAzY25cdTAwM2VgYCBvciBhdCBydW4tdGltZSB2aWFcbitgYC9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zYGAuXG4rXG4gTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrc1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMDAuLjViMTRjY2IzNmY5NWJhIDEwMDY0NFxuLS0tIGEvbW0va21lbWxlYWsuY1xuKysrIGIvbW0va21lbWxlYWsuY1xuQEAgLTE1MSw2ICsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHtcbiBcdGludCBtaW5fY291bnQ7XG4gXHQvKiB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50ZXJzIGZvdW5kIHBvaW50aW5nIHRvIHRoaXMgb2JqZWN0ICovXG4gXHRpbnQgY291bnQ7XG4rXHQvKiBjb25zZWN1dGl2ZSBzY2FucyB0aGUgb2JqZWN0IGhhcyBiZWVuIHNlZW4gdW5yZWZlcmVuY2VkICovXG4rXHR1bnNpZ25lZCBpbnQgdW5yZWZfc2NhbnM7XG4gXHQvKiBjaGVja3N1bSBmb3IgZGV0ZWN0aW5nIG1vZGlmaWVkIG9iamVjdHMgKi9cbiBcdHUzMiBjaGVja3N1bTtcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IHRyYWNlX2hhbmRsZTtcbkBAIC0yMzIsNiArMjM0LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3BlcmNwdV9hZGRyO1xuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkO1xuIC8qIHVzZWQgdG8gYXZvaWQgcmVwb3J0aW5nIG9mIHJlY2VudGx5IGFsbG9jYXRlZCBvYmplY3RzICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19taW5fYWdlO1xuKy8qIGNvbnNlY3V0aXZlIHNjYW5zIGFuIG9iamVjdCBtdXN0IHN0YXkgdW5yZWZlcmVuY2VkIGJlZm9yZSByZXBvcnRpbmcgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4rbW9kdWxlX3BhcmFtKG1pbl91bnJlZl9zY2FucywgdWludCwgMDY0NCk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47XG4gLyogZGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgbWVtb3J5IHNjYW5uaW5ncyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfc2Nhbl93YWl0O1xuQEAgLTY4Nyw2ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxuIFx0YXRvbWljX3NldChcdTAwMjZvYmplY3QtXHUwMDNldXNlX2NvdW50LCAxKTtcbiBcdG9iamVjdC1cdTAwM2VleGNlc3NfcmVmID0gMDtcbiBcdG9iamVjdC1cdTAwM2Vjb3VudCA9IDA7XHRcdFx0Lyogd2hpdGUgY29sb3IgaW5pdGlhbGx5ICovXG4rXHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNoZWNrc3VtID0gMDtcbiBcdG9iamVjdC1cdTAwM2VkZWxfc3RhdGUgPSAwO1xuIFxuQEAgLTE4MzMsNiArMTgzOSw5IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBcdFx0XHRcdF9fcGFpbnRfaXQob2JqZWN0LCBLTUVNTEVBS19CTEFDSyk7XG4gXHRcdH1cbiBcbitcdFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cbitcdFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxuK1x0XHRcdG9iamVjdC1cdTAwM2V1bnJlZl9zY2FucyA9IDA7XG4gXHRcdC8qIHJlc2V0IHRoZSByZWZlcmVuY2UgY291bnQgKHdoaXRlbiB0aGUgb2JqZWN0KSAqL1xuIFx0XHRvYmplY3QtXHUwMDNlY291bnQgPSAwO1xuIFx0XHRpZiAoY29sb3JfZ3JheShvYmplY3QpIFx1MDAyNlx1MDAyNiBnZXRfb2JqZWN0KG9iamVjdCkpXG5AQCAtMTk2OCw4ICsxOTc3LDkgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxuIFx0XHRyYXdfc3Bpbl9sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jayk7XG4gXHRcdHRyYWNlX2hhbmRsZSA9IDA7XG4gXHRcdGRlZHVwX3ByaW50ID0gZmFsc2U7XG4tXHRcdGlmICh1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xuK1x0XHRpZiAoIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9SRVBPUlRFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICArK29iamVjdC1cdTAwM2V1bnJlZl9zY2FucyBcdTAwM2U9IG1pbl91bnJlZl9zY2Fucykge1xuIFx0XHRcdG9iamVjdC1cdTAwM2VmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7XG4gXHRcdFx0aWYgKGttZW1sZWFrX3ZlcmJvc2UpIHtcbiBcdFx0XHRcdHRyYWNlX2hhbmRsZSA9IG9iamVjdC1cdTAwM2V0cmFjZV9oYW5kbGU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLjg0MDI2YjYyYTFhZTVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTUwLDYgKzE1MCw3IEBAIFRFU1RfUFJPR1MgKz0ga3NmdF9ndXBfdGVzdC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9obW0uc2hcbiBURVNUX1BST0dTICs9IGtzZnRfaHVnZXRsYi5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9odWdldm0uc2hcbitURVNUX1BST0dTICs9IGtzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19kZWR1cC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rc20uc2hcbiBURVNUX1BST0dTICs9IGtzZnRfa3NtX251bWEuc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzRhYjY0YmM2OTQ4Zjhcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuQEAgLTAsMCArMSwxMTEgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJ3MgTi1jb25zZWN1dGl2ZS1zY2FuIGxlYWsgY29uZmlybWF0aW9uXG4rIyAodGhlIG1pbl91bnJlZl9zY2FucyBtb2R1bGUgcGFyYW1ldGVyKS5cbisjXG4rIyBrbWVtbGVhayBvbmx5IHJlcG9ydHMgYW4gb2JqZWN0IG9uY2UgaXQgaGFzIHN0YXllZCB1bnJlZmVyZW5jZWQgZm9yXG4rIyBtaW5fdW5yZWZfc2NhbnMgY29uc2VjdXRpdmUgc2NhbnMuIFRoZSBkZWZhdWx0IG9mIDEgcmVwb3J0cyBvbiB0aGUgZmlyc3RcbisjIHNjYW4gKGhpc3RvcmljYWwgYmVoYXZpb3VyKTsgaGlnaGVyIHZhbHVlcyBmaWx0ZXIgdHJhbnNpZW50IGZhbHNlXG4rIyBwb3NpdGl2ZXMgd2hlcmUgYSBsaXZlIG9iamVjdCdzIG9ubHkgcmVmZXJlbmNlIGlzIGJyaWVmbHkgaW52aXNpYmxlIHRvIGFcbisjIHNpbmdsZSBzY2FuIChlLmcuIGFuIFJDVSB0cmVlIHVwZGF0ZSBpbiBmbGlnaHQgd2hpbGUgdGhlIHNjYW4gcnVucykuIFRoZVxuKyMgdGVzdCBsb2FkcyBzYW1wbGVzL2ttZW1sZWFrJ3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zXG4rIyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF1cbisjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLFxuKyMgY2hlY2tzIHRoYXQ6XG4rIyAgIC0gbWluX3VucmVmX3NjYW5zPTEgcmVwb3J0cyB0aGVtIG9uIHRoZSBmaXJzdCBzY2FuLFxuKyMgICAtIG1pbl91bnJlZl9zY2Fucz0yIHJlcG9ydHMgbm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhbiBidXQgZG9lcyBvbiB0aGVcbisjICAgICBzZWNvbmQsXG4rIyAgIC0gdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXG4rI1xuKyMgVGhlIFwibm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhblwiIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogd2l0aFxuKyMgbWluX3VucmVmX3NjYW5zPTIgbm8gb2JqZWN0IGNhbiBiZSByZXBvcnRlZCBpbiBmZXdlciB0aGFuIHR3byBzY2Fucy4gTGlrZVxuKyMga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm8gZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsXG4rIyBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIgdGhhbiBmYWlsaW5nLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4ra3NmdF9za2lwPTRcbitLTUVNTEVBSz0vc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha1xuK1BBUkFNPS9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zXG4rTU9EVUxFPWttZW1sZWFrLXRlc3RcbitBR0U9Nlx0XHQjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJ3MgNXMgbWluaW11bSBvYmplY3QgYWdlXG4rXG4rc2tpcCgpIHsgZWNobyBcIlNLSVA6ICQqXCI7IGV4aXQgJGtzZnRfc2tpcDsgfVxuK2ZhaWwoKSB7IGVjaG8gXCJGQUlMOiAkKlwiOyBleGl0IDE7IH1cbitwYXNzKCkgeyBlY2hvIFwiUEFTUzogJCpcIjsgZXhpdCAwOyB9XG4rXG4rWyBcIiQoaWQgLXUpXCIgLWVxIDAgXSB8fCBza2lwIFwibXVzdCBydW4gYXMgcm9vdFwiXG4rWyAtciBcIiRLTUVNTEVBS1wiIF0gfHwgc2tpcCBcIm5vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcIlxuK1sgLXcgXCIkUEFSQU1cIiBdIHx8IHNraXAgXCJtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFwiXG4rbW9kaW5mbyBcIiRNT0RVTEVcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbitcdHNraXAgXCIkTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcIlxuK1xuKyMga21lbWxlYWsgY2FuIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIGF0IHJ1bnRpbWUgKGttZW1sZWFrPW9mZiBib290IGFyZyxcbisjIG9yIGl0IHNlbGYtZGlzYWJsZWQgYWZ0ZXIgYW4gaW50ZXJuYWwgZXJyb3IpOyBhIFwic2NhblwiIHRoZW4gcmV0dXJuc1xuKyMgRVBFUk0uIFByb2JlIG9uY2UgYW5kIHNraXAgaWYgc28uXG4rZWNobyBzY2FuIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGwgfHxcbitcdHNraXAgXCJrbWVtbGVhayBpcyBkaXNhYmxlZCAoY2hlY2sgZG1lc2cgb3Iga21lbWxlYWs9IGJvb3QgYXJnKVwiXG4rXG4rcHJldj0kKGNhdCBcIiRQQVJBTVwiKVxuKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyAgIyBpbnZva2VkIGluZGlyZWN0bHkgdmlhIHRyYXBcbitjbGVhbnVwKCkge1xuK1x0ZWNobyBcIiRwcmV2XCIgXHUwMDNlIFwiJFBBUkFNXCIgMlx1MDAzZS9kZXYvbnVsbFx0XHQjIHJlc3RvcmUgdGhlIHBhcmFtZXRlclxuK1x0ZWNobyBzY2FuPW9uIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGxcdFx0IyByZS1lbmFibGUgYXV0byBzY2FuXG4rXHRybW1vZCBcIiRNT0RVTEVcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIGNsZWFyIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGxcbit9XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIFN0b3AgdGhlIGF1dG9tYXRpYyBzY2FuIHRocmVhZDogb25seSBvdXIgbWFudWFsIHNjYW5zIHNob3VsZCBhZHZhbmNlIGFuXG4rIyBvYmplY3QncyBjb25zZWN1dGl2ZS11bnJlZmVyZW5jZWQgcnVuLiBBbiBhdXRvIHNjYW4gbGFuZGluZyBiZXR3ZWVuIHR3b1xuKyMgbWFudWFsIHNjYW5zIHdvdWxkIGNoYW5nZSB0aGUgcmVzdWx0IGFuZCBtYWtlIHRoZSB0ZXN0IGZsYWt5LlxuK2VjaG8gc2Nhbj1vZmYgXHUwMDNlIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1xuKyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUncyBpbml0XG4rIyBwYXRoIChpdHMga21hbGxvYy92bWFsbG9jL3BlcmNwdSBhbGxvY2F0aW9ucyBhcmUgZHJvcHBlZCByaWdodCBhd2F5KS5cbisjIFByZS1leGlzdGluZyByZXBvcnRlZCBsZWFrcyBhcmUgZ3JleWVkIGZpcnN0IChcImNsZWFyXCIpIHNvIG9ubHkgb3VyXG4rIyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcbisjIHVubG9hZGVkIGl0cyBzeW1ib2xzIGFyZSBnb25lLCBzbyB0aGUgb3JwaGFuIGJhY2t0cmFjZXMgbm8gbG9uZ2VyIHJlc29sdmVcbisjIHRvIFtrbWVtbGVha190ZXN0XSBhbmQgY291bGQgbm90IGJlIG1hdGNoZWQgYmVsb3cuXG4rZ2VuX29ycGhhbnMoKSB7XG4rXHRybW1vZCBcIiRNT0RVTEVcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIGNsZWFyIFx1MDAzZSBcIiRLTUVNTEVBS1wiXG4rXHRtb2Rwcm9iZSBcIiRNT0RVTEVcIiB8fCBza2lwIFwiZmFpbGVkIHRvIGxvYWQgJE1PRFVMRVwiXG4rXHRzbGVlcCBcIiRBR0VcIlxuK31cbitcbitzY2FuKCkgeyBlY2hvIHNjYW4gXHUwMDNlIFwiJEtNRU1MRUFLXCI7IH1cbitcbisjIE51bWJlciBvZiBoZWxwZXItbW9kdWxlIG9ycGhhbnMgY3VycmVudGx5IHJlcG9ydGVkIGJ5IGttZW1sZWFrLiBNYXRjaGluZ1xuKyMgdGhlIG1vZHVsZSdzIG93biBiYWNrdHJhY2UgKFtrbWVtbGVha190ZXN0XSkga2VlcHMgdGhlIGNvdW50IGltbXVuZSB0b1xuKyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxuKyMgb25jZSBpdCBoYXMgYmVlbiByZXBvcnRlZCwgc28gdGhpcyByZWZsZWN0cyB0aGUgY29uZmlybWF0aW9uIGdhdGluZy5cbitjb3VudF9vcnBoYW5zKCkge1xuK1x0Yz0kKGdyZXAgLWMgJ1xcW2ttZW1sZWFrX3Rlc3RcXF0nIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbClcbitcdGVjaG8gXCIke2M6LTB9XCJcbit9XG4rXG4rIyAwKSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbitlY2hvIDMgXHUwMDNlIFwiJFBBUkFNXCJcbitbIFwiJChjYXQgXCIkUEFSQU1cIilcIiA9IFwiM1wiIF0gfHwgZmFpbCBcIm1pbl91bnJlZl9zY2FucyBkaWQgbm90IHJlYWQgYmFjayBhcyAzXCJcbitcbisjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb3JwaGFucyByZXBvcnRlZCBvbiB0aGUgZmlyc3Qgc2Nhbi4gVGhpc1xuKyMgICAgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZSBvcnBoYW5zIGhlcmUuXG4rZWNobyAxIFx1MDAzZSBcIiRQQVJBTVwiXG4rZ2VuX29ycGhhbnNcbitzY2FuXG4rZmlyc3Q9JChjb3VudF9vcnBoYW5zKVxuK1sgXCIkZmlyc3RcIiAtZ3QgMCBdIHx8XG4rXHRza2lwIFwiJE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcIlxuK1xuKyMgMikgbWluX3VucmVmX3NjYW5zPTI6IG5vdGhpbmcgcmVwb3J0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHNjYW4sIHJlcG9ydGVkXG4rIyAgICBhZnRlciB0aGUgc2Vjb25kLiBUaGUgZmlyc3Qtc2Nhbi16ZXJvIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24uXG4rZWNobyAyIFx1MDAzZSBcIiRQQVJBTVwiXG4rZ2VuX29ycGhhbnNcbitzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpXG4rc2NhbjsgczI9JChjb3VudF9vcnBoYW5zKVxuK1sgXCIkczFcIiAtZXEgMCBdIHx8IGZhaWwgXCJtaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSByZXBvcnRlZCBhZnRlciB0aGUgMXN0IHNjYW4gKG11c3QgYmUgMClcIlxuK1sgXCIkczJcIiAtZ3QgMCBdIHx8IGZhaWwgXCJtaW5fdW5yZWZfc2NhbnM9Mjogbm8gcmVwb3J0IG9uIHRoZSAybmQgc2NhbiAoZmFsc2UgbmVnYXRpdmUpXCJcbitcbitwYXNzIFwibWluX3VucmVmX3NjYW5zPTEgaW1tZWRpYXRlOyA9MiBnYXRlZCB0byAybmQgc2NhbiAoY291bnRzICRmaXJzdC8kczEvJHMyKTsgcGFyYW0gcmVhZC1iYWNrIG9rXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjA5LjEzMDMyNjUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyOTMxMzQzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS21lbWxlYWsgUGF0Y2ggRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0va21lbWxlYWsuY2Ag4oCTIGFkZHMgYSBgbWluX3VucmVmX3NjYW5zYCBtb2R1bGUgcGFyYW1ldGVyLCBhbmQgYSBzZWxmdGVzdCwgYGtzZnRfa21lbWxlYWtfY29uZmlybS5zaGAuIEl0IHNlZW1zIHRvIGFkZCBhIG5ldyBgdW5yZWZfc2NhbnNgIGZpZWxkIGluIHRoZSBga21lbWxlYWtfb2JqZWN0YCBzdHJ1Y3R1cmUgYW5kIG1vZGlmaWVzIGBrbWVtbGVha19zY2FuKClgIHRvIHVzZSBpdCwgb25seSByZXBvcnRpbmcgYW4gb2JqZWN0IGFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgdW5yZWZlcmVuY2VkIHNjYW5zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWNpZGUgaWYgdGhpcyBuZWVkcyBmb2N1c2VkIGZ1enppbmcuXG5cbkttZW1sZWFrIGlzIGEgbWVtb3J5IGxlYWsgZGV0ZWN0b3IsIGEgZGVidWdnaW5nIHRvb2wuIEl0J3Mgbm90IGEgZGlyZWN0IGNvbnN1bWVyIG9mIHVudHJ1c3RlZCBpbnB1dCBpbiB0aGUgc2FtZSB3YXksIHNheSwgYSBuZXR3b3JrIHN0YWNrIGRyaXZlciBpcy4gSXQncyBwdXJwb3NlIGlzIHRvIGZpbmQgbGVha3MsIGJ1dCBpdCBkb2VzIHRoaXMgYnkgc2Nhbm5pbmcgZXhpc3RpbmcgbWVtb3J5LiBCdXQgaG9sZCBvbiwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0b29sIGl0c2VsZiEgQ2FuIGEgZnV6emVyICp0cmlnZ2VyKiB0aGUgbmV3IGNvZGUgcGF0aHM/IEFic29sdXRlbHksIGJ5IGxlYWtpbmcgbWVtb3J5IG9yIGludGVyYWN0aW5nIHdpdGgga21lbWxlYWsgdmlhIGRlYnVnZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIGxpa2UgdGhlIG9uZSBhZGRlZCBpbiB0aGUgcGF0Y2guXG5cblRoZSBnZW5lcmFsIHByYWN0aWNlIGlzIHRoYXQgdG9vbHMgbGlrZSB0aGlzIGFyZSAqZW5hYmxlZCogZHVyaW5nIGZ1enppbmcgdG8gY2F0Y2ggYnVncyBpbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYnV0IG5vdCBwcmltYXJpbHkgZnV6emVkIHRoZW1zZWx2ZXMuIEJ1dCB0aGlzIGlzICpkaWZmZXJlbnQqIC0gdGhlIHBhdGNoICpjaGFuZ2VzKiBob3cga21lbWxlYWsgd29ya3MuIEl0J3MgZnVuY3Rpb25hbCwgYWRkaW5nIGEgbmV3IGNvbnRyb2wgYW5kIGNoYW5naW5nIHRoZSByZXBvcnRpbmcgbG9naWMuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgZnV6emluZyAqa21lbWxlYWsgaXRzZWxmKiBpcyB3b3J0aHdoaWxlLiBJJ20gbGVhbmluZyB0b3dhcmQgXCJub1wiIGFzIGEgcHJpbWFyeSB0YXJnZXQuIERpYWdub3N0aWMgdG9vbHMgYXJlbid0IHVzdWFsbHkgd2hlcmUgd2UgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gSG93ZXZlciwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGRlc2NyaXB0aW9ucyBmb3IgZGVidWdmcywgYW5kIEknZCBuZWVkIHRvIGNvbnNpZGVyIHRob3NlLlxuXG5Ob3csIHRoZSBwcm9tcHQgcmVtaW5kcyBtZSBvZiB0aGUgY3JpdGVyaWEgZm9yICpub3QqIGZ1enppbmc6IGRvY3MsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgKmFjdHVhbCBrZXJuZWwgbG9naWMqIHdpdGhpbiB0aGUgYG1tL2AgZGlyZWN0b3J5IOKAkyBpdCdzIG5vdCBqdXN0IGRvY3VtZW50YXRpb24uIEl0J3MgZnVuY3Rpb25hbCwgYWx0ZXJpbmcgaG93IGttZW1sZWFrIG9wZXJhdGVzLiBga21lbWxlYWtfc2NhbmAgaXMgbW9kaWZpZWQsIGFuZCB0aGUgY2hhbmdlIGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGhvdyBsZWFrcyBhcmUgcmVwb3J0ZWQuIEkgc2hvdWxkIGxvb2sgYXQgYG1tL2ttZW1sZWFrLmNgIG1vcmUgY2xvc2VseSBhbmQgY29uc2lkZXIgb3RoZXIgZnVuY3Rpb25zIGFzIHdlbGwuIGBfX2FsbG9jX29iamVjdGAgaGFzIGFsc28gYmVlbiBjaGFuZ2VkLlxuXG5TbywgYWNjb3JkaW5nIHRvIG15IGludGVybmFsIGFzc2Vzc21lbnQsIGFuZCBpbiByZWxhdGlvbiB0byB0aGUgZ3VpZGVsaW5lcywgSSB0aGluayBpdCdzIHRpbWUgdG8gcnVuIHNvbWUgdmVyaWZpY2F0aW9uIHRvb2xzIGFuZCBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoxOC40MjM0NjI2MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3OTQ3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl91bnJlZl9zY2Fuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rbWVtbGVhay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttZW1sZWFrLmM9MjM2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTtcXG5tbS9rbWVtbGVhay5jLTIzNy0vKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovXFxubW0va21lbWxlYWsuYzoyMzg6c3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxO1xcbm1tL2ttZW1sZWFrLmM6MjM5Om1vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpO1xcbm1tL2ttZW1sZWFrLmMtMjQwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xcbi0tXFxubW0va21lbWxlYWsuYz0xODA2PXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMTk4MS1cXHRcXHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFxcdTAwMjZcXHUwMDI2XFxubW0va21lbWxlYWsuYzoxOTgyOlxcdFxcdCAgICArK29iamVjdC1cXHUwMDNldW5yZWZfc2NhbnMgXFx1MDAzZT0gbWluX3VucmVmX3NjYW5zKSB7XFxubW0va21lbWxlYWsuYy0xOTgzLVxcdFxcdFxcdG9iamVjdC1cXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoxOC41MzE0MTQ4MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMzODk4OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGttZW1sZWFrIERlbGF5IENvdW50ZXIqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrbWVtbGVha19zY2FuYCBhbmQgYF9fYWxsb2Nfb2JqZWN0YC4gIGBrbWVtbGVha19zY2FuYCBpcyBlaXRoZXIgYSB0aHJlYWQgb3IgdHJpZ2dlcmVkIHZpYSBkZWJ1Z2ZzLCB3aGljaCBzb3VuZHMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuICBgX19hbGxvY19vYmplY3RgLCBob3dldmVyLCBpcyBjYWxsZWQgZXZlcnkgc2luZ2xlIHRpbWUga21lbWxlYWsgdHJhY2tzIGFuIGFsbG9jYXRpb24uICBUaGF0J3MgYSBob3QtcGF0aCBmdW5jdGlvbjsgaXQncyBwcmFjdGljYWxseSBnb2luZyB0byBiZSBoaXQgYWxsIHRoZSB0aW1lIGlmIGttZW1sZWFrIGlzIGVuYWJsZWQsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuXG5cblNvLCBpcyB0aGlzIGV2ZW4gd29ydGggdGhlIGVmZm9ydD8gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXTigJlzIGp1c3QgYSBjb3VudGVyIHRvIGRlbGF5IGxlYWsgcmVwb3J0aW5nLiAgRnV6emluZyAqc3BlY2lmaWNhbGx5KiB0aGUgY291bnRlciBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IG5vdCB1bmNvdmVyIGFueXRoaW5nIGVhcnRoLXNoYXR0ZXJpbmcuICBTdGlsbCwgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB2YWxpZCB0YXJnZXRzLiBJZiBJIGRlY2lkZSBpdCAqaXMqIHdvcnRoIGZ1enppbmcsIEknbGwgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuXG5cbkdpdmVuIHRoYXQgYF9fYWxsb2Nfb2JqZWN0YCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBJJ20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIGp1c3QgZnV6emluZyBga21lbWxlYWtfc2NhbmAuIEl0J3MgdGhlIG9ubHkgb25lIHRoYXQgc2VlbXMgcHJhY3RpY2FsIHRvIHB1dCBpbiBmb2N1cy5cblxuQmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgcmVsYXRlZCB0byBrbWVtbGVhayB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBidWlsZCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoyMy4zNjUzMTY5MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTk3MDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfS01FTUxFQUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjIzLjQ3ODkyNDMxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTgzNDUzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipUcmFjaW5nIERvd24gREVCVUdfS01FTUxFQUsqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBERUJVR19LTUVNTEVBS2AuIFRoaXMgaXMgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgZmVhdHVyZSBvciBkZWJ1Z2dpbmcgdG9vbCB3b3JrcyB3aXRoaW4gYSBrZXJuZWwgb3Igc3lzdGVtLiBLbm93aW5nIHdoZXJlIGl0J3MgZGVmaW5lZCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBpbnRlbmRlZCBwdXJwb3NlLiBGcm9tIHRoZXJlLCBJIGNhbiBsaWtlbHkgdHJhY2UgaXRzIHVzYWdlLCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgYWN0aXZlLCBhbmQgZXZlbnR1YWxseSBwaWVjZSB0b2dldGhlciB0aGUgZW50aXJlIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgaWYgSSBjYW4gdXNlIHNvbWUgZ3JlcCBvciBzaW1pbGFyIHRvb2xpbmcgdG8gdHJhY2sgZG93biB0aGUgaGVhZGVyIGZpbGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hlcmUgdGhpcyBtYWNybyBpcyBkZWNsYXJlZC4gS25vd2luZyB0aGUgZXhhY3QgZGVmaW5pdGlvbiBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoyNi4wMzcyNzEzOTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NzM5OTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfS01FTUxFQUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MjM3PWNvbmZpZyBIQVZFX0RFQlVHX0tNRU1MRUFLXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTIzOS1cXG5tbS9LY29uZmlnLmRlYnVnOjI0MDpjb25maWcgREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI0MS1cXHRib29sIFxcXCJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTI2NC1cXG5tbS9LY29uZmlnLmRlYnVnOjI2NTpjb25maWcgREVCVUdfS01FTUxFQUtfTUVNX1BPT0xfU0laRVxcbm1tL0tjb25maWcuZGVidWctMjY2LVxcdGludCBcXFwiS21lbWxlYWsgbWVtb3J5IHBvb2wgc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjc3LVxcbm1tL0tjb25maWcuZGVidWc6Mjc4OmNvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRlxcbm1tL0tjb25maWcuZGVidWctMjc5LVxcdGJvb2wgXFxcIkRlZmF1bHQga21lbWxlYWsgdG8gb2ZmXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yODQtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyODU6Y29uZmlnIERFQlVHX0tNRU1MRUFLX0FVVE9fU0NBTlxcbm1tL0tjb25maWcuZGVidWctMjg2LVxcdGJvb2wgXFxcIkVuYWJsZSBrbWVtbGVhayBhdXRvIHNjYW4gdGhyZWFkIG9uIGJvb3QgdXBcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTI5OS1cXG5tbS9LY29uZmlnLmRlYnVnOjMwMDpjb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbm1tL0tjb25maWcuZGVidWctMzAxLVxcdGJvb2wgXFxcIkRlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoyOC42MjQ2NzYwOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA2MDQyMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBERUJVR19LTUVNTEVBS2AgQ29uZmlnIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgY29uZmlnIGNoYW5nZSBlbmFibGVzIGBERUJVR19LTUVNTEVBS2AuIFRoZSBxdWVzdGlvbiBpcywgaXMgZnV6emluZyBpdCB3b3J0aCB0aGUgZWZmb3J0PyBGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgaXQgbW9kaWZpZXMgYGttZW1sZWFrX3NjYW5gIHRvIHJlcXVpcmUgYSBjZXJ0YWluIG51bWJlciBvZiBjb25zZWN1dGl2ZSB1bnJlZmVyZW5jZWQgc2NhbnMgKGBtaW5fdW5yZWZfc2NhbnNgKSBiZWZvcmUgcmVwb3J0aW5nIGEgbGVhay4gSXQncyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0ZSBtYWNoaW5lLCBhIGNvdW50ZXIgdGhhdCByZXNldHMgdXBvbiByZWZlcmVuY2luZyBhbmQgaW5jcmVtZW50cyBpZiB1bnJlZmVyZW5jZWQuXG5cbldoaWxlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0J3Mgc3BlY2lmaWMgdG8gYSBkZWJ1Z2dpbmcgdG9vbC4gU3l6a2FsbGVyIG9mdGVuIGhhcyBgREVCVUdfS01FTUxFQUtgIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZGV0ZWN0aW5nIGxlYWtzIGluICpvdGhlciogY29kZS4gVGhlIGdvYWwgb2YgZnV6emluZyB0aGlzIHBhdGNoIGlzIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIG5ldyBsb2dpYyB3aXRoaW4gYGttZW1sZWFrX3NjYW5gIGl0c2VsZiwgbG9va2luZyBmb3IgYnVncyBsaWtlIGludGVnZXIgb3ZlcmZsb3dzIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBgb2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zYCBpcyBhbiBgdW5zaWduZWQgaW50YCwgd2hpY2ggaXMgaW5jcmVtZW50ZWQgd2l0aGluIGBrbWVtbGVha19zY2FuYCB1bmRlciBhIGByYXdfc3Bpbl9sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jaylgLiBCdXQgd2FpdCwgSSBqdXN0IG5vdGljZWQgc29tZXRoaW5nLiBUaGUgdmFyaWFibGUgYG9iamVjdC1cdTAwM2V1bnJlZl9zY2Fuc2AgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24gYW5kICp3aXRob3V0KiB0aGUgbG9jay4gVGhpcyBiZWFycyBsb29raW5nIGludG8uIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBtbS9rbWVtbGVhay5jYCBhcm91bmQgbGluZSAxODM5LiBUaGF0IGNvdWxkIGJlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjMzLjczMDcyMDA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rbWVtbGVhay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MzA6XFx0I2VuZGlmXFxuMTgzMTpcXHRcXG4xODMyOlxcdFxcdFxcdC8qIGlnbm9yZSBvYmplY3RzIG91dHNpZGUgbG93bWVtIChwYWludCB0aGVtIGJsYWNrKSAqL1xcbjE4MzM6XFx0XFx0XFx0aWYgKChvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1BIWVMpIFxcdTAwMjZcXHUwMDI2XFxuMTgzNDpcXHRcXHRcXHQgICAhKG9iamVjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPQkpFQ1RfTk9fU0NBTikpIHtcXG4xODM1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGh5cyA9IG9iamVjdC1cXHUwMDNlcG9pbnRlcjtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0XFx0XFx0aWYgKFBIWVNfUEZOKHBoeXMpIFxcdTAwM2MgbWluX2xvd19wZm4gfHxcXG4xODM4OlxcdFxcdFxcdFxcdCAgICBQSFlTX1BGTihwaHlzICsgb2JqZWN0LVxcdTAwM2VzaXplKSBcXHUwMDNlIG1heF9sb3dfcGZuKVxcbjE4Mzk6XFx0XFx0XFx0XFx0XFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcXG4xODQwOlxcdFxcdFxcdH1cXG4xODQxOlxcdFxcbjE4NDI6XFx0XFx0XFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cXG4xODQzOlxcdFxcdFxcdGlmICghY29sb3Jfd2hpdGUob2JqZWN0KSlcXG4xODQ0OlxcdFxcdFxcdFxcdG9iamVjdC1cXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xcbjE4NDU6XFx0XFx0XFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXFxuMTg0NjpcXHRcXHRcXHRvYmplY3QtXFx1MDAzZWNvdW50ID0gMDtcXG4xODQ3OlxcdFxcdFxcdGlmIChjb2xvcl9ncmF5KG9iamVjdCkgXFx1MDAyNlxcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxcbjE4NDg6XFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2b2JqZWN0LVxcdTAwM2VncmF5X2xpc3QsIFxcdTAwMjZncmF5X2xpc3QpO1xcbjE4NDk6XFx0XFxuMTg1MDpcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZvYmplY3QtXFx1MDAzZWxvY2spO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuMTg1MzpcXHRcXHRcXHRcXHRrbWVtbGVha19jb25kX3Jlc2NoZWQob2JqZWN0KTtcXG4xODU0OlxcdFxcdH1cXG4xODU1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE4NTY6XFx0XFxuMTg1NzpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE4NTg6XFx0XFx0LyogcGVyLWNwdSBzZWN0aW9ucyBzY2FubmluZyAqL1xcbjE4NTk6XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjMzLjczMDg1MDA1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTAzMDU3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLTUVNTEVBSzogQSBUYXJnZXRlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCB0aGUgcmVsZXZhbnQgY29kZSBzZWdtZW50LiBUaGUgY3J1Y2lhbCBsb2NraW5nIG9wZXJhdGlvbiwgdGhlIHJhdyBzcGluIGxvY2ssIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGByYXdfc3Bpbl9sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jaylgIGJsb2NrLiBSZWxpZWYhIFRoZSBjb3JyZXNwb25kaW5nIHJlbGVhc2UgaXMgaGFuZGxlZCBmdXJ0aGVyIGRvd24sIGF0IGxpbmUgMTg1MC4gTG9va3Mgc2FmZSBmcm9tIGEgYmFzaWMgbG9jay91bmxvY2sgcGVyc3BlY3RpdmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuIFRpbWUgdG8gbWFrZSBzdXJlIEknbSBnb2luZyB0byBiZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUuIEknbGwgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIG9uIGBrbWVtbGVha19zY2FuYC5cblxuTGV0J3MgYWxzbyBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZTogYERFQlVHX0tNRU1MRUFLYCB3aWxsIGJlIG15IGZyaWVuZC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLiBHb3R0YSBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjozNy4zODExNTg1NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTYyMjk3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19vYmplY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va21lbWxlYWsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rbWVtbGVhay5jPTY1OD1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUodm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtNjc2LVxcbm1tL2ttZW1sZWFrLmM6Njc3OnN0YXRpYyBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpfX2FsbG9jX29iamVjdChnZnBfdCBnZnApXFxubW0va21lbWxlYWsuYy02Nzgte1xcbi0tXFxubW0va21lbWxlYWsuYz03ODk9c3RhdGljIHZvaWQgX19jcmVhdGVfb2JqZWN0KHVuc2lnbmVkIGxvbmcgcHRyLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm1tL2ttZW1sZWFrLmMtNzk1LVxcbm1tL2ttZW1sZWFrLmM6Nzk2OlxcdG9iamVjdCA9IF9fYWxsb2Nfb2JqZWN0KGdmcCk7XFxubW0va21lbWxlYWsuYy03OTctXFx0aWYgKCFvYmplY3QpXFxuLS1cXG5tbS9rbWVtbGVhay5jPTg3MT1zdGF0aWMgdm9pZCBkZWxldGVfb2JqZWN0X3BhcnQodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLFxcbi0tXFxubW0va21lbWxlYWsuYy04NzYtXFxubW0va21lbWxlYWsuYzo4Nzc6XFx0b2JqZWN0X2wgPSBfX2FsbG9jX29iamVjdChHRlBfS0VSTkVMKTtcXG5tbS9rbWVtbGVhay5jLTg3OC1cXHRpZiAoIW9iamVjdF9sKVxcbi0tXFxubW0va21lbWxlYWsuYy04ODAtXFxubW0va21lbWxlYWsuYzo4ODE6XFx0b2JqZWN0X3IgPSBfX2FsbG9jX29iamVjdChHRlBfS0VSTkVMKTtcXG5tbS9rbWVtbGVhay5jLTg4Mi1cXHRpZiAoIW9iamVjdF9yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjozOC45MzczOTMwNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0MDIwNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGttZW1sZWFrIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGttZW1sZWFrYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaG90LXBhdGggZnVuY3Rpb24gYF9fYWxsb2Nfb2JqZWN0YCBhbmQgYGttZW1sZWFrX3NjYW5gLiBXZSBuZWVkIHRvIGF2b2lkIGBfX2FsbG9jX29iamVjdGAgZHVlIHRvIGl0cyBoaWdoLWZyZXF1ZW5jeSB1c2UuIFRoZSBtYWluIHNjYW5uaW5nIGxvZ2ljIHNlZW1zIHRvIGJlIGNvbmNlbnRyYXRlZCBpbiBga21lbWxlYWtfc2NhbmAsIHdoaWNoIGlzIHdoZXJlIHRoZSBuZXcgYHVucmVmX3NjYW5zYCBmaWVsZCBjb21lcyBpbnRvIHBsYXkuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgYmlnIG9uZSBzZWVtcyB0byBiZSBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCwgb2YgY291cnNlLiBIbW0sIGBtaW5fdW5yZWZfc2NhbnNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciDigJMgdGhhdCBjb3VsZCBiZSB1c2VmdWwgdG8gbWFuaXB1bGF0ZS4gT3RoZXIgdGhhbiB0aG9zZSwgSSBkb24ndCBzZWUgYW55IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIGBfX2FsbG9jX29iamVjdGAgYW5kIGBrbWVtbGVha19zY2FuYCwgd2hpY2ggaXMgZ29vZCBuZXdzIGZvciBmb2N1c2luZyBvdXIgZnV6emluZyBlZmZvcnRzLlxuXG5Ob3csIGlzIGBrbWVtbGVha19zY2FuYCByZWFjaGFibGU/IFllcywgaXQncyBjYWxsZWQgYnkgYGttZW1sZWFrX3NjYW5fdGhyZWFkYCBhbmQsIGltcG9ydGFudGx5LCB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIHdyaXRlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha2AuIEFuZCBoZXksIFN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciB0aGF0IGRlYnVnZnMgaW50ZXJmYWNlLiBQZXJmZWN0ISBUaGlzIG1lYW5zIHdlIGNhbiB0cmlnZ2VyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgYGttZW1sZWFrX3NjYW5gIHByZXR0eSBlYXNpbHkuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LiBUaGUgbmV3IGxvZ2ljIGluIGBrbWVtbGVha2AgdG8gZGVsYXkgbGVhayByZXBvcnRpbmcgYW5kIHJlcXVpcmUgYSBtaW5pbXVtIG51bWJlciBvZiB1bnJlZmVyZW5jZWQgc2NhbnMgKmRpcmVjdGx5KiBtb2RpZmllcyB0aGUgY29yZSBzY2FuIGxvZ2ljIGluIGBrbWVtbGVha19zY2FuYC4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgZnV6emluZyB0aGlzIVxuXG5UaGVyZWZvcmUsIEknbGwgcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGBrbWVtbGVha19zY2FuYCwgZW5hYmxlIGBERUJVR19LTUVNTEVBS2AsIGFuZCB0aGUgcmVhc29uIGlzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBjcml0aWNhbCBsb2dpYyBpbiBrbWVtbGVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MywiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDI6NDUuMjc3NjAwNTkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMDQyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia21lbWxlYWtfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrbWVtbGVhayBzY2FubmluZyBsb2dpYyBieSBhZGRpbmcgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgbW9kaWZ5aW5nIGBrbWVtbGVha19zY2FuYCB0byByZXF1aXJlIGEgbWluaW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdW5yZWZlcmVuY2VkIHNjYW5zIGJlZm9yZSByZXBvcnRpbmcgYW4gb2JqZWN0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIHN0YXRlIG1hY2hpbmUgb2YgdGhlIGxlYWsgZGV0ZWN0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 22:30:47 +0000 UTC FinishedAt: 2026-06-26 22:42:47 +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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK" ], "series_id": "96bfc007-2196-432b-822f-19b1bb51587e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kmemleak_scan" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a21lbWxlYWtfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmQ3ZjQzNjIyNTNlN2I1YmQ5MzQ4ZjE3ZDhhOGI1ODA3MDFjODRlY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDIyOjQyOjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuaW5kZXggN2Q3ODRlMDNmM2Y5ZDUuLmE4YTgzYmM2OWNlYjg4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbkBAIC0xOTgsNiAmIzQzOzE5OCwxNCBAQCBzeXN0ZW1zLCBiZWNhdXNlIG9mIHBvaW50ZXJzIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiBDUFUgcmVnaXN0ZXJzIG9yXG4gc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nXG4gdGhlIG1pbmltdW0gYWdlIG9mIGFuIG9iamVjdCB0byBiZSByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrLlxuIFxuJiM0MztUaGUgYGBtaW5fdW5yZWZfc2NhbnNgYCBtb2R1bGUgcGFyYW1ldGVyIChkZWZhdWx0IDEpIHJlcXVpcmVzIGFuIG9iamVjdCB0b1xuJiM0MztiZSBzZWVuIHVucmVmZXJlbmNlZCBpbiB0aGF0IG1hbnkgY29uc2VjdXRpdmUgc2NhbnMgYmVmb3JlIGl0IGlzIHJlcG9ydGVkLlxuJiM0MztLZWVwaW5nIGl0IGF0IDEgcHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW91cjsgaGlnaGVyIHZhbHVlcyBmaWx0ZXJcbiYjNDM7dGhlIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZXMgZGVzY3JpYmVkIGFib3ZlLCBhdCB0aGUgY29zdCBvZiBkZWxheWluZ1xuJiM0MztnZW51aW5lIHJlcG9ydHMgYnkgdXAgdG8gdGhhdCBtYW55IHNjYW5zLiBJdCBjYW4gYmUgc2V0IGF0IGJvb3Qgd2l0aFxuJiM0MztgYGttZW1sZWFrLm1pbl91bnJlZl9zY2Fucz1cdTAwM2NuXHUwMDNlYGAgb3IgYXQgcnVuLXRpbWUgdmlhXG4mIzQzO2BgL3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNgYC5cbiYjNDM7XG4gTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrc1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMDAuLjViMTRjY2IzNmY5NWJhIDEwMDY0NFxuLS0tIGEvbW0va21lbWxlYWsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuY1xuQEAgLTE1MSw2ICYjNDM7MTUxLDggQEAgc3RydWN0IGttZW1sZWFrX29iamVjdCB7XG4gXHRpbnQgbWluX2NvdW50O1xuIFx0LyogdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludGVycyBmb3VuZCBwb2ludGluZyB0byB0aGlzIG9iamVjdCAqL1xuIFx0aW50IGNvdW50O1xuJiM0MztcdC8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgdW5yZWZfc2NhbnM7XG4gXHQvKiBjaGVja3N1bSBmb3IgZGV0ZWN0aW5nIG1vZGlmaWVkIG9iamVjdHMgKi9cbiBcdHUzMiBjaGVja3N1bTtcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IHRyYWNlX2hhbmRsZTtcbkBAIC0yMzIsNiAmIzQzOzIzNCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjtcbiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzY2FuX3RocmVhZDtcbiAvKiB1c2VkIHRvIGF2b2lkIHJlcG9ydGluZyBvZiByZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTtcbiYjNDM7LyogY29uc2VjdXRpdmUgc2NhbnMgYW4gb2JqZWN0IG11c3Qgc3RheSB1bnJlZmVyZW5jZWQgYmVmb3JlIHJlcG9ydGluZyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4mIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xuIC8qIGRlbGF5IGJldHdlZW4gYXV0b21hdGljIG1lbW9yeSBzY2FubmluZ3MgKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDtcbkBAIC02ODcsNiAmIzQzOzY5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpfX2FsbG9jX29iamVjdChnZnBfdCBnZnApXG4gXHRhdG9taWNfc2V0KFx1MDAyNm9iamVjdC1cdTAwM2V1c2VfY291bnQsIDEpO1xuIFx0b2JqZWN0LVx1MDAzZWV4Y2Vzc19yZWYgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcdFx0XHQvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi9cbiYjNDM7XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNoZWNrc3VtID0gMDtcbiBcdG9iamVjdC1cdTAwM2VkZWxfc3RhdGUgPSAwO1xuIFxuQEAgLTE4MzMsNiAmIzQzOzE4MzksOSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdFx0XHRfX3BhaW50X2l0KG9iamVjdCwgS01FTUxFQUtfQkxBQ0spO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHQvKiByZWZlcmVuY2VkIGxhc3Qgc2NhbjogcmVzdGFydCB0aGUgdW5yZWZlcmVuY2VkIHJ1biAqL1xuJiM0MztcdFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxuJiM0MztcdFx0XHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0XHQvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi9cbiBcdFx0b2JqZWN0LVx1MDAzZWNvdW50ID0gMDtcbiBcdFx0aWYgKGNvbG9yX2dyYXkob2JqZWN0KSBcdTAwMjZcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxuQEAgLTE5NjgsOCAmIzQzOzE5NzcsOSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4gXHRcdHJhd19zcGluX2xvY2tfaXJxKFx1MDAyNm9iamVjdC1cdTAwM2Vsb2NrKTtcbiBcdFx0dHJhY2VfaGFuZGxlID0gMDtcbiBcdFx0ZGVkdXBfcHJpbnQgPSBmYWxzZTtcbi1cdFx0aWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICEob2JqZWN0LVx1MDAzZWZsYWdzIFx1MDAyNiBPQkpFQ1RfUkVQT1JURUQpKSB7XG4mIzQzO1x0XHRpZiAoIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9SRVBPUlRFRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICYjNDM7JiM0MztvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgXHUwMDNlPSBtaW5fdW5yZWZfc2NhbnMpIHtcbiBcdFx0XHRvYmplY3QtXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xuIFx0XHRcdGlmIChrbWVtbGVha192ZXJib3NlKSB7XG4gXHRcdFx0XHR0cmFjZV9oYW5kbGUgPSBvYmplY3QtXHUwMDNldHJhY2VfaGFuZGxlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li44NDAyNmI2MmExYWU1ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTE1MCw2ICYjNDM7MTUwLDcgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9ndXBfdGVzdC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaG1tLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9odWdldGxiLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9odWdldm0uc2hcbiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19kZWR1cC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfa3NtLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rc21fbnVtYS5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNGFiNjRiYzY5NDhmOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoXG5AQCAtMCwwICYjNDM7MSwxMTEgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgRnVuY3Rpb25hbCB0ZXN0IGZvciBrbWVtbGVhayYjMzk7cyBOLWNvbnNlY3V0aXZlLXNjYW4gbGVhayBjb25maXJtYXRpb25cbiYjNDM7IyAodGhlIG1pbl91bnJlZl9zY2FucyBtb2R1bGUgcGFyYW1ldGVyKS5cbiYjNDM7I1xuJiM0MzsjIGttZW1sZWFrIG9ubHkgcmVwb3J0cyBhbiBvYmplY3Qgb25jZSBpdCBoYXMgc3RheWVkIHVucmVmZXJlbmNlZCBmb3JcbiYjNDM7IyBtaW5fdW5yZWZfc2NhbnMgY29uc2VjdXRpdmUgc2NhbnMuIFRoZSBkZWZhdWx0IG9mIDEgcmVwb3J0cyBvbiB0aGUgZmlyc3RcbiYjNDM7IyBzY2FuIChoaXN0b3JpY2FsIGJlaGF2aW91cik7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyIHRyYW5zaWVudCBmYWxzZVxuJiM0MzsjIHBvc2l0aXZlcyB3aGVyZSBhIGxpdmUgb2JqZWN0JiMzOTtzIG9ubHkgcmVmZXJlbmNlIGlzIGJyaWVmbHkgaW52aXNpYmxlIHRvIGFcbiYjNDM7IyBzaW5nbGUgc2NhbiAoZS5nLiBhbiBSQ1UgdHJlZSB1cGRhdGUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBzY2FuIHJ1bnMpLiBUaGVcbiYjNDM7IyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsmIzM5O3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zXG4mIzQzOyMgYW5kLCBjb3VudGluZyBvbmx5IHRob3NlIG9ycGhhbnMgKG1hdGNoZWQgYnkgdGhlaXIgW2ttZW1sZWFrX3Rlc3RdXG4mIzQzOyMgYmFja3RyYWNlIHNvIHVucmVsYXRlZCBsZWFrcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSBhcmUgaWdub3JlZCksXG4mIzQzOyMgY2hlY2tzIHRoYXQ6XG4mIzQzOyMgICAtIG1pbl91bnJlZl9zY2Fucz0xIHJlcG9ydHMgdGhlbSBvbiB0aGUgZmlyc3Qgc2NhbixcbiYjNDM7IyAgIC0gbWluX3VucmVmX3NjYW5zPTIgcmVwb3J0cyBub3RoaW5nIG9uIHRoZSBmaXJzdCBzY2FuIGJ1dCBkb2VzIG9uIHRoZVxuJiM0MzsjICAgICBzZWNvbmQsXG4mIzQzOyMgICAtIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxuJiM0MzsjXG4mIzQzOyMgVGhlIFwmIzM0O25vdGhpbmcgb24gdGhlIGZpcnN0IHNjYW5cJiMzNDsgY2hlY2sgaXMgdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiB3aXRoXG4mIzQzOyMgbWluX3VucmVmX3NjYW5zPTIgbm8gb2JqZWN0IGNhbiBiZSByZXBvcnRlZCBpbiBmZXdlciB0aGFuIHR3byBzY2Fucy4gTGlrZVxuJiM0MzsjIGtzZnRfa21lbWxlYWtfZGVkdXAuc2gsIGlmIHRoZSBtb2R1bGUgeWllbGRzIG5vIGRldGVjdGFibGUgb3JwaGFuIGF0IGFsbFxuJiM0MzsjIGluIHRoZSBydW5uaW5nIGVudmlyb25tZW50IHRoZSB0ZXN0IHNraXBzIHJhdGhlciB0aGFuIGZhaWxpbmcuXG4mIzQzOyNcbiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7a3NmdF9za2lwPTRcbiYjNDM7S01FTUxFQUs9L3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtcbiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcbiYjNDM7TU9EVUxFPWttZW1sZWFrLXRlc3RcbiYjNDM7QUdFPTZcdFx0IyBzZWNvbmRzOyBtdXN0IGV4Y2VlZCBrbWVtbGVhayYjMzk7cyA1cyBtaW5pbXVtIG9iamVjdCBhZ2VcbiYjNDM7XG4mIzQzO3NraXAoKSB7IGVjaG8gXCYjMzQ7U0tJUDogJCpcJiMzNDs7IGV4aXQgJGtzZnRfc2tpcDsgfVxuJiM0MztmYWlsKCkgeyBlY2hvIFwmIzM0O0ZBSUw6ICQqXCYjMzQ7OyBleGl0IDE7IH1cbiYjNDM7cGFzcygpIHsgZWNobyBcJiMzNDtQQVNTOiAkKlwmIzM0OzsgZXhpdCAwOyB9XG4mIzQzO1xuJiM0MztbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1lcSAwIF0gfHwgc2tpcCBcJiMzNDttdXN0IHJ1biBhcyByb290XCYjMzQ7XG4mIzQzO1sgLXIgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IF0gfHwgc2tpcCBcJiMzNDtubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspXCYjMzQ7XG4mIzQzO1sgLXcgXCYjMzQ7JFBBUkFNXCYjMzQ7IF0gfHwgc2tpcCBcJiMzNDttaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFwmIzM0O1xuJiM0Mzttb2RpbmZvIFwmIzM0OyRNT0RVTEVcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8XG4mIzQzO1x0c2tpcCBcJiMzNDskTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcJiMzNDtcbiYjNDM7XG4mIzQzOyMga21lbWxlYWsgY2FuIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIGF0IHJ1bnRpbWUgKGttZW1sZWFrPW9mZiBib290IGFyZyxcbiYjNDM7IyBvciBpdCBzZWxmLWRpc2FibGVkIGFmdGVyIGFuIGludGVybmFsIGVycm9yKTsgYSBcJiMzNDtzY2FuXCYjMzQ7IHRoZW4gcmV0dXJuc1xuJiM0MzsjIEVQRVJNLiBQcm9iZSBvbmNlIGFuZCBza2lwIGlmIHNvLlxuJiM0MztlY2hvIHNjYW4gXHUwMDNlIFwmIzM0OyRLTUVNTEVBS1wmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8XG4mIzQzO1x0c2tpcCBcJiMzNDtrbWVtbGVhayBpcyBkaXNhYmxlZCAoY2hlY2sgZG1lc2cgb3Iga21lbWxlYWs9IGJvb3QgYXJnKVwmIzM0O1xuJiM0MztcbiYjNDM7cHJldj0kKGNhdCBcJiMzNDskUEFSQU1cJiMzNDspXG4mIzQzOyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyAgIyBpbnZva2VkIGluZGlyZWN0bHkgdmlhIHRyYXBcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRlY2hvIFwmIzM0OyRwcmV2XCYjMzQ7IFx1MDAzZSBcJiMzNDskUEFSQU1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFx0XHQjIHJlc3RvcmUgdGhlIHBhcmFtZXRlclxuJiM0MztcdGVjaG8gc2Nhbj1vbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcdFx0IyByZS1lbmFibGUgYXV0byBzY2FuXG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7fVxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxuJiM0MzsjIG9iamVjdCYjMzk7cyBjb25zZWN1dGl2ZS11bnJlZmVyZW5jZWQgcnVuLiBBbiBhdXRvIHNjYW4gbGFuZGluZyBiZXR3ZWVuIHR3b1xuJiM0MzsjIG1hbnVhbCBzY2FucyB3b3VsZCBjaGFuZ2UgdGhlIHJlc3VsdCBhbmQgbWFrZSB0aGUgdGVzdCBmbGFreS5cbiYjNDM7ZWNobyBzY2FuPW9mZiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzOyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUmIzM5O3MgaW5pdFxuJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLlxuJiM0MzsjIFByZS1leGlzdGluZyByZXBvcnRlZCBsZWFrcyBhcmUgZ3JleWVkIGZpcnN0IChcJiMzNDtjbGVhclwmIzM0Oykgc28gb25seSBvdXJcbiYjNDM7IyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcbiYjNDM7IyB1bmxvYWRlZCBpdHMgc3ltYm9scyBhcmUgZ29uZSwgc28gdGhlIG9ycGhhbiBiYWNrdHJhY2VzIG5vIGxvbmdlciByZXNvbHZlXG4mIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy5cbiYjNDM7Z2VuX29ycGhhbnMoKSB7XG4mIzQzO1x0cm1tb2QgXCYjMzQ7JE1PRFVMRVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWNobyBjbGVhciBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7XG4mIzQzO1x0bW9kcHJvYmUgXCYjMzQ7JE1PRFVMRVwmIzM0OyB8fCBza2lwIFwmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEVcJiMzNDtcbiYjNDM7XHRzbGVlcCBcJiMzNDskQUdFXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NjYW4oKSB7IGVjaG8gc2NhbiBcdTAwM2UgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7OyB9XG4mIzQzO1xuJiM0MzsjIE51bWJlciBvZiBoZWxwZXItbW9kdWxlIG9ycGhhbnMgY3VycmVudGx5IHJlcG9ydGVkIGJ5IGttZW1sZWFrLiBNYXRjaGluZ1xuJiM0MzsjIHRoZSBtb2R1bGUmIzM5O3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvXG4mIzQzOyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxuJiM0MzsjIG9uY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQsIHNvIHRoaXMgcmVmbGVjdHMgdGhlIGNvbmZpcm1hdGlvbiBnYXRpbmcuXG4mIzQzO2NvdW50X29ycGhhbnMoKSB7XG4mIzQzO1x0Yz0kKGdyZXAgLWMgJiMzOTtcXFtrbWVtbGVha190ZXN0XFxdJiMzOTsgXCYjMzQ7JEtNRU1MRUFLXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpXG4mIzQzO1x0ZWNobyBcJiMzNDske2M6LTB9XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXG4mIzQzO2VjaG8gMyBcdTAwM2UgXCYjMzQ7JFBBUkFNXCYjMzQ7XG4mIzQzO1sgXCYjMzQ7JChjYXQgXCYjMzQ7JFBBUkFNXCYjMzQ7KVwmIzM0OyA9IFwmIzM0OzNcJiMzNDsgXSB8fCBmYWlsIFwmIzM0O21pbl91bnJlZl9zY2FucyBkaWQgbm90IHJlYWQgYmFjayBhcyAzXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb3JwaGFucyByZXBvcnRlZCBvbiB0aGUgZmlyc3Qgc2Nhbi4gVGhpc1xuJiM0MzsjICAgIGFsc28gZXN0YWJsaXNoZXMgdGhhdCB0aGUgaGVscGVyIHByb2R1Y2VzIGRldGVjdGFibGUgb3JwaGFucyBoZXJlLlxuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyRQQVJBTVwmIzM0O1xuJiM0MztnZW5fb3JwaGFuc1xuJiM0MztzY2FuXG4mIzQzO2ZpcnN0PSQoY291bnRfb3JwaGFucylcbiYjNDM7WyBcJiMzNDskZmlyc3RcJiMzNDsgLWd0IDAgXSB8fFxuJiM0MztcdHNraXAgXCYjMzQ7JE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcJiMzNDtcbiYjNDM7XG4mIzQzOyMgMikgbWluX3VucmVmX3NjYW5zPTI6IG5vdGhpbmcgcmVwb3J0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHNjYW4sIHJlcG9ydGVkXG4mIzQzOyMgICAgYWZ0ZXIgdGhlIHNlY29uZC4gVGhlIGZpcnN0LXNjYW4temVybyBjaGVjayBpcyB0aGUgY29yZSByZWdyZXNzaW9uLlxuJiM0MztlY2hvIDIgXHUwMDNlIFwmIzM0OyRQQVJBTVwmIzM0O1xuJiM0MztnZW5fb3JwaGFuc1xuJiM0MztzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpXG4mIzQzO3NjYW47IHMyPSQoY291bnRfb3JwaGFucylcbiYjNDM7WyBcJiMzNDskczFcJiMzNDsgLWVxIDAgXSB8fCBmYWlsIFwmIzM0O21pbl91bnJlZl9zY2Fucz0yOiAkczEgb3JwaGFuKHMpIHJlcG9ydGVkIGFmdGVyIHRoZSAxc3Qgc2NhbiAobXVzdCBiZSAwKVwmIzM0O1xuJiM0MztbIFwmIzM0OyRzMlwmIzM0OyAtZ3QgMCBdIHx8IGZhaWwgXCYjMzQ7bWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBvbiB0aGUgMm5kIHNjYW4gKGZhbHNlIG5lZ2F0aXZlKVwmIzM0O1xuJiM0MztcbiYjNDM7cGFzcyBcJiMzNDttaW5fdW5yZWZfc2NhbnM9MSBpbW1lZGlhdGU7ID0yIGdhdGVkIHRvIDJuZCBzY2FuIChjb3VudHMgJGZpcnN0LyRzMS8kczIpOyBwYXJhbSByZWFkLWJhY2sgb2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19LTUVNTEVBSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ttZW1sZWFrX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGttZW1sZWFrIHNjYW5uaW5nIGxvZ2ljIGJ5IGFkZGluZyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGBtaW5fdW5yZWZfc2NhbnNgIGFuZCBtb2RpZnlpbmcgYGttZW1sZWFrX3NjYW5gIHRvIHJlcXVpcmUgYSBtaW5pbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSB1bnJlZmVyZW5jZWQgc2NhbnMgYmVmb3JlIHJlcG9ydGluZyBhbiBvYmplY3QuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgc3RhdGUgbWFjaGluZSBvZiB0aGUgbGVhayBkZXRlY3Rvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQ3ZjQzNjIyNTNlN2I1YmQ5MzQ4ZjE3ZDhhOGI1ODA3MDFjODRlYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDIyOjQyOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CmluZGV4IDdkNzg0ZTAzZjNmOWQ1Li5hOGE4M2JjNjljZWI4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdApAQCAtMTk4LDYgJiM0MzsxOTgsMTQgQEAgc3lzdGVtcywgYmVjYXVzZSBvZiBwb2ludGVycyB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gQ1BVIHJlZ2lzdGVycyBvcgogc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nCiB0aGUgbWluaW11bSBhZ2Ugb2YgYW4gb2JqZWN0IHRvIGJlIHJlcG9ydGVkIGFzIGEgbWVtb3J5IGxlYWsuCiAKJiM0MztUaGUgYGBtaW5fdW5yZWZfc2NhbnNgYCBtb2R1bGUgcGFyYW1ldGVyIChkZWZhdWx0IDEpIHJlcXVpcmVzIGFuIG9iamVjdCB0bwomIzQzO2JlIHNlZW4gdW5yZWZlcmVuY2VkIGluIHRoYXQgbWFueSBjb25zZWN1dGl2ZSBzY2FucyBiZWZvcmUgaXQgaXMgcmVwb3J0ZWQuCiYjNDM7S2VlcGluZyBpdCBhdCAxIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXI7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyCiYjNDM7dGhlIHRyYW5zaWVudCBmYWxzZSBwb3NpdGl2ZXMgZGVzY3JpYmVkIGFib3ZlLCBhdCB0aGUgY29zdCBvZiBkZWxheWluZwomIzQzO2dlbnVpbmUgcmVwb3J0cyBieSB1cCB0byB0aGF0IG1hbnkgc2NhbnMuIEl0IGNhbiBiZSBzZXQgYXQgYm9vdCB3aXRoCiYjNDM7YGBrbWVtbGVhay5taW5fdW5yZWZfc2NhbnM9Jmx0O24mZ3Q7YGAgb3IgYXQgcnVuLXRpbWUgdmlhCiYjNDM7YGAvc3lzL21vZHVsZS9rbWVtbGVhay9wYXJhbWV0ZXJzL21pbl91bnJlZl9zY2Fuc2BgLgomIzQzOwogTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCA3YzdiYTE3Y2U3YWYwMC4uNWIxNGNjYjM2Zjk1YmEgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuYwpAQCAtMTUxLDYgJiM0MzsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHsKIAlpbnQgbWluX2NvdW50OwogCS8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi8KIAlpbnQgY291bnQ7CiYjNDM7CS8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi8KJiM0MzsJdW5zaWduZWQgaW50IHVucmVmX3NjYW5zOwogCS8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqLwogCXUzMiBjaGVja3N1bTsKIAlkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7CkBAIC0yMzIsNiAmIzQzOzIzNCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9wZXJjcHVfYWRkcjsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkOwogLyogdXNlZCB0byBhdm9pZCByZXBvcnRpbmcgb2YgcmVjZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTsKJiM0MzsvKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxOwomIzQzO21vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47CiAvKiBkZWxheSBiZXR3ZWVuIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmdzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3NjYW5fd2FpdDsKQEAgLTY4Nyw2ICYjNDM7NjkyLDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcCkKIAlhdG9taWNfc2V0KCZhbXA7b2JqZWN0LSZndDt1c2VfY291bnQsIDEpOwogCW9iamVjdC0mZ3Q7ZXhjZXNzX3JlZiA9IDA7CiAJb2JqZWN0LSZndDtjb3VudCA9IDA7CQkJLyogd2hpdGUgY29sb3IgaW5pdGlhbGx5ICovCiYjNDM7CW9iamVjdC0mZ3Q7dW5yZWZfc2NhbnMgPSAwOwogCW9iamVjdC0mZ3Q7Y2hlY2tzdW0gPSAwOwogCW9iamVjdC0mZ3Q7ZGVsX3N0YXRlID0gMDsKIApAQCAtMTgzMyw2ICYjNDM7MTgzOSw5IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZCkKIAkJCQlfX3BhaW50X2l0KG9iamVjdCwgS01FTUxFQUtfQkxBQ0spOwogCQl9CiAKJiM0MzsJCS8qIHJlZmVyZW5jZWQgbGFzdCBzY2FuOiByZXN0YXJ0IHRoZSB1bnJlZmVyZW5jZWQgcnVuICovCiYjNDM7CQlpZiAoIWNvbG9yX3doaXRlKG9iamVjdCkpCiYjNDM7CQkJb2JqZWN0LSZndDt1bnJlZl9zY2FucyA9IDA7CiAJCS8qIHJlc2V0IHRoZSByZWZlcmVuY2UgY291bnQgKHdoaXRlbiB0aGUgb2JqZWN0KSAqLwogCQlvYmplY3QtJmd0O2NvdW50ID0gMDsKIAkJaWYgKGNvbG9yX2dyYXkob2JqZWN0KSAmYW1wOyZhbXA7IGdldF9vYmplY3Qob2JqZWN0KSkKQEAgLTE5NjgsOCAmIzQzOzE5NzcsOSBAQCBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiAJCXJhd19zcGluX2xvY2tfaXJxKCZhbXA7b2JqZWN0LSZndDtsb2NrKTsKIAkJdHJhY2VfaGFuZGxlID0gMDsKIAkJZGVkdXBfcHJpbnQgPSBmYWxzZTsKLQkJaWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSAmYW1wOyZhbXA7Ci0JCSAgICAhKG9iamVjdC0mZ3Q7ZmxhZ3MgJmFtcDsgT0JKRUNUX1JFUE9SVEVEKSkgewomIzQzOwkJaWYgKCEob2JqZWN0LSZndDtmbGFncyAmYW1wOyBPQkpFQ1RfUkVQT1JURUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICYjNDM7JiM0MztvYmplY3QtJmd0O3VucmVmX3NjYW5zICZndDs9IG1pbl91bnJlZl9zY2FucykgewogCQkJb2JqZWN0LSZndDtmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7CiAJCQlpZiAoa21lbWxlYWtfdmVyYm9zZSkgewogCQkJCXRyYWNlX2hhbmRsZSA9IG9iamVjdC0mZ3Q7dHJhY2VfaGFuZGxlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlNmRmOTY4ZjA5NzFjOC4uODQwMjZiNjJhMWFlNWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfZ3VwX3Rlc3Quc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaG1tLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2h1Z2V0bGIuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfaHVnZXZtLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X2tzbS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9rc21fbnVtYS5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9rbWVtbGVha19jb25maXJtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNGFiNjRiYzY5NDhmOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaApAQCAtMCwwICYjNDM7MSwxMTEgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJiMzOTtzIE4tY29uc2VjdXRpdmUtc2NhbiBsZWFrIGNvbmZpcm1hdGlvbgomIzQzOyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuCiYjNDM7IwomIzQzOyMga21lbWxlYWsgb25seSByZXBvcnRzIGFuIG9iamVjdCBvbmNlIGl0IGhhcyBzdGF5ZWQgdW5yZWZlcmVuY2VkIGZvcgomIzQzOyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0CiYjNDM7IyBzY2FuIChoaXN0b3JpY2FsIGJlaGF2aW91cik7IGhpZ2hlciB2YWx1ZXMgZmlsdGVyIHRyYW5zaWVudCBmYWxzZQomIzQzOyMgcG9zaXRpdmVzIHdoZXJlIGEgbGl2ZSBvYmplY3QmIzM5O3Mgb25seSByZWZlcmVuY2UgaXMgYnJpZWZseSBpbnZpc2libGUgdG8gYQomIzQzOyMgc2luZ2xlIHNjYW4gKGUuZy4gYW4gUkNVIHRyZWUgdXBkYXRlIGluIGZsaWdodCB3aGlsZSB0aGUgc2NhbiBydW5zKS4gVGhlCiYjNDM7IyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsmIzM5O3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zCiYjNDM7IyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF0KJiM0MzsjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLAomIzQzOyMgY2hlY2tzIHRoYXQ6CiYjNDM7IyAgIC0gbWluX3VucmVmX3NjYW5zPTEgcmVwb3J0cyB0aGVtIG9uIHRoZSBmaXJzdCBzY2FuLAomIzQzOyMgICAtIG1pbl91bnJlZl9zY2Fucz0yIHJlcG9ydHMgbm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhbiBidXQgZG9lcyBvbiB0aGUKJiM0MzsjICAgICBzZWNvbmQsCiYjNDM7IyAgIC0gdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uCiYjNDM7IwomIzQzOyMgVGhlICYjMzQ7bm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhbiYjMzQ7IGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogd2l0aAomIzQzOyMgbWluX3VucmVmX3NjYW5zPTIgbm8gb2JqZWN0IGNhbiBiZSByZXBvcnRlZCBpbiBmZXdlciB0aGFuIHR3byBzY2Fucy4gTGlrZQomIzQzOyMga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm8gZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsCiYjNDM7IyBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIgdGhhbiBmYWlsaW5nLgomIzQzOyMKJiM0MzsjIEF1dGhvcjogQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsKJiM0Mztrc2Z0X3NraXA9NAomIzQzO0tNRU1MRUFLPS9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrCiYjNDM7UEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnMKJiM0MztNT0RVTEU9a21lbWxlYWstdGVzdAomIzQzO0FHRT02CQkjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJiMzOTtzIDVzIG1pbmltdW0gb2JqZWN0IGFnZQomIzQzOwomIzQzO3NraXAoKSB7IGVjaG8gJiMzNDtTS0lQOiAkKiYjMzQ7OyBleGl0ICRrc2Z0X3NraXA7IH0KJiM0MztmYWlsKCkgeyBlY2hvICYjMzQ7RkFJTDogJComIzM0OzsgZXhpdCAxOyB9CiYjNDM7cGFzcygpIHsgZWNobyAmIzM0O1BBU1M6ICQqJiMzNDs7IGV4aXQgMDsgfQomIzQzOwomIzQzO1sgJiMzNDskKGlkIC11KSYjMzQ7IC1lcSAwIF0gfHwgc2tpcCAmIzM0O211c3QgcnVuIGFzIHJvb3QmIzM0OwomIzQzO1sgLXIgJiMzNDskS01FTUxFQUsmIzM0OyBdIHx8IHNraXAgJiMzNDtubyBrbWVtbGVhayBkZWJ1Z2ZzIChDT05GSUdfREVCVUdfS01FTUxFQUspJiMzNDsKJiM0MztbIC13ICYjMzQ7JFBBUkFNJiMzNDsgXSB8fCBza2lwICYjMzQ7bWluX3VucmVmX3NjYW5zIG1vZHVsZSBwYXJhbWV0ZXIgbm90IHByZXNlbnQmIzM0OwomIzQzO21vZGluZm8gJiMzNDskTU9EVUxFJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fAomIzQzOwlza2lwICYjMzQ7JE1PRFVMRSBub3QgYnVpbHQgKENPTkZJR19TQU1QTEVfS01FTUxFQUspJiMzNDsKJiM0MzsKJiM0MzsjIGttZW1sZWFrIGNhbiBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCBhdCBydW50aW1lIChrbWVtbGVhaz1vZmYgYm9vdCBhcmcsCiYjNDM7IyBvciBpdCBzZWxmLWRpc2FibGVkIGFmdGVyIGFuIGludGVybmFsIGVycm9yKTsgYSAmIzM0O3NjYW4mIzM0OyB0aGVuIHJldHVybnMKJiM0MzsjIEVQRVJNLiBQcm9iZSBvbmNlIGFuZCBza2lwIGlmIHNvLgomIzQzO2VjaG8gc2NhbiAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsgMiZndDsvZGV2L251bGwgfHwKJiM0MzsJc2tpcCAmIzM0O2ttZW1sZWFrIGlzIGRpc2FibGVkIChjaGVjayBkbWVzZyBvciBrbWVtbGVhaz0gYm9vdCBhcmcpJiMzNDsKJiM0MzsKJiM0MztwcmV2PSQoY2F0ICYjMzQ7JFBBUkFNJiMzNDspCiYjNDM7IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3ICAjIGludm9rZWQgaW5kaXJlY3RseSB2aWEgdHJhcAomIzQzO2NsZWFudXAoKSB7CiYjNDM7CWVjaG8gJiMzNDskcHJldiYjMzQ7ICZndDsgJiMzNDskUEFSQU0mIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZXN0b3JlIHRoZSBwYXJhbWV0ZXIKJiM0MzsJZWNobyBzY2FuPW9uICZndDsgJiMzNDskS01FTUxFQUsmIzM0OyAyJmd0Oy9kZXYvbnVsbAkJIyByZS1lbmFibGUgYXV0byBzY2FuCiYjNDM7CXJtbW9kICYjMzQ7JE1PRFVMRSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWVjaG8gY2xlYXIgJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhbgomIzQzOyMgb2JqZWN0JiMzOTtzIGNvbnNlY3V0aXZlLXVucmVmZXJlbmNlZCBydW4uIEFuIGF1dG8gc2NhbiBsYW5kaW5nIGJldHdlZW4gdHdvCiYjNDM7IyBtYW51YWwgc2NhbnMgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgYW5kIG1ha2UgdGhlIHRlc3QgZmxha3kuCiYjNDM7ZWNobyBzY2FuPW9mZiAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsjIENyZWF0ZSBhIGZyZXNoLCBhZ2VkIHNldCBvZiBvcnBoYW4gb2JqZWN0cyBmcm9tIHRoZSBoZWxwZXIgbW9kdWxlJiMzOTtzIGluaXQKJiM0MzsjIHBhdGggKGl0cyBrbWFsbG9jL3ZtYWxsb2MvcGVyY3B1IGFsbG9jYXRpb25zIGFyZSBkcm9wcGVkIHJpZ2h0IGF3YXkpLgomIzQzOyMgUHJlLWV4aXN0aW5nIHJlcG9ydGVkIGxlYWtzIGFyZSBncmV5ZWQgZmlyc3QgKCYjMzQ7Y2xlYXImIzM0Oykgc28gb25seSBvdXIKJiM0MzsjIG9ycGhhbnMgYXJlIGNvdW50ZWQuIFRoZSBtb2R1bGUgaXMgbGVmdCBsb2FkZWQgb24gcHVycG9zZTogb25jZSBpdCBpcwomIzQzOyMgdW5sb2FkZWQgaXRzIHN5bWJvbHMgYXJlIGdvbmUsIHNvIHRoZSBvcnBoYW4gYmFja3RyYWNlcyBubyBsb25nZXIgcmVzb2x2ZQomIzQzOyMgdG8gW2ttZW1sZWFrX3Rlc3RdIGFuZCBjb3VsZCBub3QgYmUgbWF0Y2hlZCBiZWxvdy4KJiM0MztnZW5fb3JwaGFucygpIHsKJiM0MzsJcm1tb2QgJiMzNDskTU9EVUxFJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWNobyBjbGVhciAmZ3Q7ICYjMzQ7JEtNRU1MRUFLJiMzNDsKJiM0MzsJbW9kcHJvYmUgJiMzNDskTU9EVUxFJiMzNDsgfHwgc2tpcCAmIzM0O2ZhaWxlZCB0byBsb2FkICRNT0RVTEUmIzM0OwomIzQzOwlzbGVlcCAmIzM0OyRBR0UmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzY2FuKCkgeyBlY2hvIHNjYW4gJmd0OyAmIzM0OyRLTUVNTEVBSyYjMzQ7OyB9CiYjNDM7CiYjNDM7IyBOdW1iZXIgb2YgaGVscGVyLW1vZHVsZSBvcnBoYW5zIGN1cnJlbnRseSByZXBvcnRlZCBieSBrbWVtbGVhay4gTWF0Y2hpbmcKJiM0MzsjIHRoZSBtb2R1bGUmIzM5O3Mgb3duIGJhY2t0cmFjZSAoW2ttZW1sZWFrX3Rlc3RdKSBrZWVwcyB0aGUgY291bnQgaW1tdW5lIHRvCiYjNDM7IyB1bnJlbGF0ZWQgbGVha3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLiBrbWVtbGVhayBvbmx5IGxpc3RzIGFuIG9iamVjdCBoZXJlCiYjNDM7IyBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIHJlZmxlY3RzIHRoZSBjb25maXJtYXRpb24gZ2F0aW5nLgomIzQzO2NvdW50X29ycGhhbnMoKSB7CiYjNDM7CWM9JChncmVwIC1jICYjMzk7XFtrbWVtbGVha190ZXN0XF0mIzM5OyAmIzM0OyRLTUVNTEVBSyYjMzQ7IDImZ3Q7L2Rldi9udWxsKQomIzQzOwllY2hvICYjMzQ7JHtjOi0wfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgMCkgdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uCiYjNDM7ZWNobyAzICZndDsgJiMzNDskUEFSQU0mIzM0OwomIzQzO1sgJiMzNDskKGNhdCAmIzM0OyRQQVJBTSYjMzQ7KSYjMzQ7ID0gJiMzNDszJiMzNDsgXSB8fCBmYWlsICYjMzQ7bWluX3VucmVmX3NjYW5zIGRpZCBub3QgcmVhZCBiYWNrIGFzIDMmIzM0OwomIzQzOwomIzQzOyMgMSkgbWluX3VucmVmX3NjYW5zPTEgKGRlZmF1bHQpOiBvcnBoYW5zIHJlcG9ydGVkIG9uIHRoZSBmaXJzdCBzY2FuLiBUaGlzCiYjNDM7IyAgICBhbHNvIGVzdGFibGlzaGVzIHRoYXQgdGhlIGhlbHBlciBwcm9kdWNlcyBkZXRlY3RhYmxlIG9ycGhhbnMgaGVyZS4KJiM0MztlY2hvIDEgJmd0OyAmIzM0OyRQQVJBTSYjMzQ7CiYjNDM7Z2VuX29ycGhhbnMKJiM0MztzY2FuCiYjNDM7Zmlyc3Q9JChjb3VudF9vcnBoYW5zKQomIzQzO1sgJiMzNDskZmlyc3QmIzM0OyAtZ3QgMCBdIHx8CiYjNDM7CXNraXAgJiMzNDskTU9EVUxFIHByb2R1Y2VkIG5vIGRldGVjdGFibGUgb3JwaGFucyAoY2Fubm90IHRlc3QgbWluX3VucmVmX3NjYW5zKSYjMzQ7CiYjNDM7CiYjNDM7IyAyKSBtaW5fdW5yZWZfc2NhbnM9Mjogbm90aGluZyByZXBvcnRlZCBhZnRlciB0aGUgZmlyc3Qgc2NhbiwgcmVwb3J0ZWQKJiM0MzsjICAgIGFmdGVyIHRoZSBzZWNvbmQuIFRoZSBmaXJzdC1zY2FuLXplcm8gY2hlY2sgaXMgdGhlIGNvcmUgcmVncmVzc2lvbi4KJiM0MztlY2hvIDIgJmd0OyAmIzM0OyRQQVJBTSYjMzQ7CiYjNDM7Z2VuX29ycGhhbnMKJiM0MztzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpCiYjNDM7c2NhbjsgczI9JChjb3VudF9vcnBoYW5zKQomIzQzO1sgJiMzNDskczEmIzM0OyAtZXEgMCBdIHx8IGZhaWwgJiMzNDttaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSByZXBvcnRlZCBhZnRlciB0aGUgMXN0IHNjYW4gKG11c3QgYmUgMCkmIzM0OwomIzQzO1sgJiMzNDskczImIzM0OyAtZ3QgMCBdIHx8IGZhaWwgJiMzNDttaW5fdW5yZWZfc2NhbnM9Mjogbm8gcmVwb3J0IG9uIHRoZSAybmQgc2NhbiAoZmFsc2UgbmVnYXRpdmUpJiMzNDsKJiM0MzsKJiM0MztwYXNzICYjMzQ7bWluX3VucmVmX3NjYW5zPTEgaW1tZWRpYXRlOyA9MiBnYXRlZCB0byAybmQgc2NhbiAoY291bnRzICRmaXJzdC8kczEvJHMyKTsgcGFyYW0gcmVhZC1iYWNrIG9rJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLbWVtbGVhayBQYXRjaCBGdXp6aW5nIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2ttZW1sZWFrLmNgIOKAkyBhZGRzIGEgYG1pbl91bnJlZl9zY2Fuc2AgbW9kdWxlIHBhcmFtZXRlciwgYW5kIGEgc2VsZnRlc3QsIGBrc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hgLiBJdCBzZWVtcyB0byBhZGQgYSBuZXcgYHVucmVmX3NjYW5zYCBmaWVsZCBpbiB0aGUgYGttZW1sZWFrX29iamVjdGAgc3RydWN0dXJlIGFuZCBtb2RpZmllcyBga21lbWxlYWtfc2NhbigpYCB0byB1c2UgaXQsIG9ubHkgcmVwb3J0aW5nIGFuIG9iamVjdCBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIHVucmVmZXJlbmNlZCBzY2Fucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVjaWRlIGlmIHRoaXMgbmVlZHMgZm9jdXNlZCBmdXp6aW5nLgoKS21lbWxlYWsgaXMgYSBtZW1vcnkgbGVhayBkZXRlY3RvciwgYSBkZWJ1Z2dpbmcgdG9vbC4gSXQmIzM5O3Mgbm90IGEgZGlyZWN0IGNvbnN1bWVyIG9mIHVudHJ1c3RlZCBpbnB1dCBpbiB0aGUgc2FtZSB3YXksIHNheSwgYSBuZXR3b3JrIHN0YWNrIGRyaXZlciBpcy4gSXQmIzM5O3MgcHVycG9zZSBpcyB0byBmaW5kIGxlYWtzLCBidXQgaXQgZG9lcyB0aGlzIGJ5IHNjYW5uaW5nIGV4aXN0aW5nIG1lbW9yeS4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdG9vbCBpdHNlbGYhIENhbiBhIGZ1enplciAqdHJpZ2dlciogdGhlIG5ldyBjb2RlIHBhdGhzPyBBYnNvbHV0ZWx5LCBieSBsZWFraW5nIG1lbW9yeSBvciBpbnRlcmFjdGluZyB3aXRoIGttZW1sZWFrIHZpYSBkZWJ1Z2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLCBsaWtlIHRoZSBvbmUgYWRkZWQgaW4gdGhlIHBhdGNoLgoKVGhlIGdlbmVyYWwgcHJhY3RpY2UgaXMgdGhhdCB0b29scyBsaWtlIHRoaXMgYXJlICplbmFibGVkKiBkdXJpbmcgZnV6emluZyB0byBjYXRjaCBidWdzIGluIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBidXQgbm90IHByaW1hcmlseSBmdXp6ZWQgdGhlbXNlbHZlcy4gQnV0IHRoaXMgaXMgKmRpZmZlcmVudCogLSB0aGUgcGF0Y2ggKmNoYW5nZXMqIGhvdyBrbWVtbGVhayB3b3Jrcy4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgYWRkaW5nIGEgbmV3IGNvbnRyb2wgYW5kIGNoYW5naW5nIHRoZSByZXBvcnRpbmcgbG9naWMuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGZ1enppbmcgKmttZW1sZWFrIGl0c2VsZiogaXMgd29ydGh3aGlsZS4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCAmIzM0O25vJiMzNDsgYXMgYSBwcmltYXJ5IHRhcmdldC4gRGlhZ25vc3RpYyB0b29scyBhcmVuJiMzOTt0IHVzdWFsbHkgd2hlcmUgd2UgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gSG93ZXZlciwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGRlc2NyaXB0aW9ucyBmb3IgZGVidWdmcywgYW5kIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB0aG9zZS4KCk5vdywgdGhlIHByb21wdCByZW1pbmRzIG1lIG9mIHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZzogZG9jcywgY29tbWVudHMsIGxvZ2dpbmcsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcGF0Y2ggY2xlYXJseSBtb2RpZmllcyAqYWN0dWFsIGtlcm5lbCBsb2dpYyogd2l0aGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkg4oCTIGl0JiMzOTtzIG5vdCBqdXN0IGRvY3VtZW50YXRpb24uIEl0JiMzOTtzIGZ1bmN0aW9uYWwsIGFsdGVyaW5nIGhvdyBrbWVtbGVhayBvcGVyYXRlcy4gYGttZW1sZWFrX3NjYW5gIGlzIG1vZGlmaWVkLCBhbmQgdGhlIGNoYW5nZSBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiBob3cgbGVha3MgYXJlIHJlcG9ydGVkLiBJIHNob3VsZCBsb29rIGF0IGBtbS9rbWVtbGVhay5jYCBtb3JlIGNsb3NlbHkgYW5kIGNvbnNpZGVyIG90aGVyIGZ1bmN0aW9ucyBhcyB3ZWxsLiBgX19hbGxvY19vYmplY3RgIGhhcyBhbHNvIGJlZW4gY2hhbmdlZC4KClNvLCBhY2NvcmRpbmcgdG8gbXkgaW50ZXJuYWwgYXNzZXNzbWVudCwgYW5kIGluIHJlbGF0aW9uIHRvIHRoZSBndWlkZWxpbmVzLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gcnVuIHNvbWUgdmVyaWZpY2F0aW9uIHRvb2xzIGFuZCBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX3VucmVmX3NjYW5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rbWVtbGVhay5jPTIzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX21pbl9hZ2U7XG5tbS9rbWVtbGVhay5jLTIzNy0vKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovXG5tbS9rbWVtbGVhay5jOjIzODpzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG5tbS9rbWVtbGVhay5jOjIzOTptb2R1bGVfcGFyYW0obWluX3VucmVmX3NjYW5zLCB1aW50LCAwNjQ0KTtcbm1tL2ttZW1sZWFrLmMtMjQwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xuLS1cbm1tL2ttZW1sZWFrLmM9MTgwNj1zdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpXG4tLVxubW0va21lbWxlYWsuYy0xOTgxLVx0XHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFx1MDAyNlx1MDAyNlxubW0va21lbWxlYWsuYzoxOTgyOlx0XHQgICAgJiM0MzsmIzQzO29iamVjdC1cdTAwM2V1bnJlZl9zY2FucyBcdTAwM2U9IG1pbl91bnJlZl9zY2Fucykge1xubW0va21lbWxlYWsuYy0xOTgzLVx0XHRcdG9iamVjdC1cdTAwM2VmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBrbWVtbGVhayBEZWxheSBDb3VudGVyKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGttZW1sZWFrX3NjYW5gIGFuZCBgX19hbGxvY19vYmplY3RgLiAgYGttZW1sZWFrX3NjYW5gIGlzIGVpdGhlciBhIHRocmVhZCBvciB0cmlnZ2VyZWQgdmlhIGRlYnVnZnMsIHdoaWNoIHNvdW5kcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gIGBfX2FsbG9jX29iamVjdGAsIGhvd2V2ZXIsIGlzIGNhbGxlZCBldmVyeSBzaW5nbGUgdGltZSBrbWVtbGVhayB0cmFja3MgYW4gYWxsb2NhdGlvbi4gIFRoYXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbjsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgZ29pbmcgdG8gYmUgaGl0IGFsbCB0aGUgdGltZSBpZiBrbWVtbGVhayBpcyBlbmFibGVkLCBhbmQgdGhlIGluc3RydWN0aW9ucyBhcmUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLgoKU28sIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0PyBUaGUgY2hhbmdlIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdOKAmXMganVzdCBhIGNvdW50ZXIgdG8gZGVsYXkgbGVhayByZXBvcnRpbmcuICBGdXp6aW5nICpzcGVjaWZpY2FsbHkqIHRoZSBjb3VudGVyIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgbm90IHVuY292ZXIgYW55dGhpbmcgZWFydGgtc2hhdHRlcmluZy4gIFN0aWxsLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHZhbGlkIHRhcmdldHMuIElmIEkgZGVjaWRlIGl0ICppcyogd29ydGggZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpHaXZlbiB0aGF0IGBfX2FsbG9jX29iamVjdGAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMganVzdCBmdXp6aW5nIGBrbWVtbGVha19zY2FuYC4gSXQmIzM5O3MgdGhlIG9ubHkgb25lIHRoYXQgc2VlbXMgcHJhY3RpY2FsIHRvIHB1dCBpbiBmb2N1cy4KCkJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzIHJlbGF0ZWQgdG8ga21lbWxlYWsgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfS01FTUxFQUsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU5MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipUcmFjaW5nIERvd24gREVCVUdfS01FTUxFQUsqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgREVCVUdfS01FTUxFQUtgLiBUaGlzIGlzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgb3IgZGVidWdnaW5nIHRvb2wgd29ya3Mgd2l0aGluIGEga2VybmVsIG9yIHN5c3RlbS4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgc2NvcGUsIGRlcGVuZGVuY2llcywgYW5kIGludGVuZGVkIHB1cnBvc2UuIEZyb20gdGhlcmUsIEkgY2FuIGxpa2VseSB0cmFjZSBpdHMgdXNhZ2UsIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgYWN0aXZlLCBhbmQgZXZlbnR1YWxseSBwaWVjZSB0b2dldGhlciB0aGUgZW50aXJlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHVzZSBzb21lIGdyZXAgb3Igc2ltaWxhciB0b29saW5nIHRvIHRyYWNrIGRvd24gdGhlIGhlYWRlciBmaWxlcyBvciBjb25maWd1cmF0aW9uIGZpbGVzIHdoZXJlIHRoaXMgbWFjcm8gaXMgZGVjbGFyZWQuIEtub3dpbmcgdGhlIGV4YWN0IGRlZmluaXRpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19LTUVNTEVBSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTIzNz1jb25maWcgSEFWRV9ERUJVR19LTUVNTEVBS1xuLS1cbm1tL0tjb25maWcuZGVidWctMjM5LVxubW0vS2NvbmZpZy5kZWJ1ZzoyNDA6Y29uZmlnIERFQlVHX0tNRU1MRUFLXG5tbS9LY29uZmlnLmRlYnVnLTI0MS1cdGJvb2wgXCYjMzQ7S2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yNjQtXG5tbS9LY29uZmlnLmRlYnVnOjI2NTpjb25maWcgREVCVUdfS01FTUxFQUtfTUVNX1BPT0xfU0laRVxubW0vS2NvbmZpZy5kZWJ1Zy0yNjYtXHRpbnQgXCYjMzQ7S21lbWxlYWsgbWVtb3J5IHBvb2wgc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjc3LVxubW0vS2NvbmZpZy5kZWJ1ZzoyNzg6Y29uZmlnIERFQlVHX0tNRU1MRUFLX0RFRkFVTFRfT0ZGXG5tbS9LY29uZmlnLmRlYnVnLTI3OS1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBrbWVtbGVhayB0byBvZmZcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTI4NC1cbm1tL0tjb25maWcuZGVidWc6Mjg1OmNvbmZpZyBERUJVR19LTUVNTEVBS19BVVRPX1NDQU5cbm1tL0tjb25maWcuZGVidWctMjg2LVx0Ym9vbCBcJiMzNDtFbmFibGUga21lbWxlYWsgYXV0byBzY2FuIHRocmVhZCBvbiBib290IHVwXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yOTktXG5tbS9LY29uZmlnLmRlYnVnOjMwMDpjb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxubW0vS2NvbmZpZy5kZWJ1Zy0zMDEtXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgREVCVUdfS01FTUxFQUtgIENvbmZpZyBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBjb25maWcgY2hhbmdlIGVuYWJsZXMgYERFQlVHX0tNRU1MRUFLYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBmdXp6aW5nIGl0IHdvcnRoIHRoZSBlZmZvcnQ/IEZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCBpdCBtb2RpZmllcyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIGNlcnRhaW4gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyAoYG1pbl91bnJlZl9zY2Fuc2ApIGJlZm9yZSByZXBvcnRpbmcgYSBsZWFrLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0ZSBtYWNoaW5lLCBhIGNvdW50ZXIgdGhhdCByZXNldHMgdXBvbiByZWZlcmVuY2luZyBhbmQgaW5jcmVtZW50cyBpZiB1bnJlZmVyZW5jZWQuCgpXaGlsZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCYjMzk7cyBzcGVjaWZpYyB0byBhIGRlYnVnZ2luZyB0b29sLiBTeXprYWxsZXIgb2Z0ZW4gaGFzIGBERUJVR19LTUVNTEVBS2AgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBkZXRlY3RpbmcgbGVha3MgaW4gKm90aGVyKiBjb2RlLiBUaGUgZ29hbCBvZiBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbmV3IGxvZ2ljIHdpdGhpbiBga21lbWxlYWtfc2NhbmAgaXRzZWxmLCBsb29raW5nIGZvciBidWdzIGxpa2UgaW50ZWdlciBvdmVyZmxvd3Mgb3IgcmFjZSBjb25kaXRpb25zLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBgb2JqZWN0LSZndDt1bnJlZl9zY2Fuc2AgaXMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGluY3JlbWVudGVkIHdpdGhpbiBga21lbWxlYWtfc2NhbmAgdW5kZXIgYSBgcmF3X3NwaW5fbG9ja19pcnEoJmFtcDtvYmplY3QtJmd0O2xvY2spYC4gQnV0IHdhaXQsIEkganVzdCBub3RpY2VkIHNvbWV0aGluZy4gVGhlIHZhcmlhYmxlIGBvYmplY3QtJmd0O3VucmVmX3NjYW5zYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIHdpdGhpbiB0aGUgc2FtZSBmdW5jdGlvbiBhbmQgKndpdGhvdXQqIHRoZSBsb2NrLiBUaGlzIGJlYXJzIGxvb2tpbmcgaW50by4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL2ttZW1sZWFrLmNgIGFyb3VuZCBsaW5lIDE4MzkuIFRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdCNlbmRpZlxuMTgzMTpcdFxuMTgzMjpcdFx0XHQvKiBpZ25vcmUgb2JqZWN0cyBvdXRzaWRlIGxvd21lbSAocGFpbnQgdGhlbSBibGFjaykgKi9cbjE4MzM6XHRcdFx0aWYgKChvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9QSFlTKSBcdTAwMjZcdTAwMjZcbjE4MzQ6XHRcdFx0ICAgIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9OT19TQ0FOKSkge1xuMTgzNTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcGh5cyA9IG9iamVjdC1cdTAwM2Vwb2ludGVyO1xuMTgzNjpcdFxuMTgzNzpcdFx0XHRcdGlmIChQSFlTX1BGTihwaHlzKSBcdTAwM2MgbWluX2xvd19wZm4gfHxcbjE4Mzg6XHRcdFx0XHQgICAgUEhZU19QRk4ocGh5cyAmIzQzOyBvYmplY3QtXHUwMDNlc2l6ZSkgXHUwMDNlIG1heF9sb3dfcGZuKVxuMTgzOTpcdFx0XHRcdFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcbjE4NDA6XHRcdFx0fVxuMTg0MTpcdFxuMTg0MjpcdFx0XHQvKiByZWZlcmVuY2VkIGxhc3Qgc2NhbjogcmVzdGFydCB0aGUgdW5yZWZlcmVuY2VkIHJ1biAqL1xuMTg0MzpcdFx0XHRpZiAoIWNvbG9yX3doaXRlKG9iamVjdCkpXG4xODQ0Olx0XHRcdFx0b2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zID0gMDtcbjE4NDU6XHRcdFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXG4xODQ2Olx0XHRcdG9iamVjdC1cdTAwM2Vjb3VudCA9IDA7XG4xODQ3Olx0XHRcdGlmIChjb2xvcl9ncmF5KG9iamVjdCkgXHUwMDI2XHUwMDI2IGdldF9vYmplY3Qob2JqZWN0KSlcbjE4NDg6XHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9iamVjdC1cdTAwM2VncmF5X2xpc3QsIFx1MDAyNmdyYXlfbGlzdCk7XG4xODQ5Olx0XG4xODUwOlx0XHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2b2JqZWN0LVx1MDAzZWxvY2spO1xuMTg1MTpcdFxuMTg1MjpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4xODUzOlx0XHRcdFx0a21lbWxlYWtfY29uZF9yZXNjaGVkKG9iamVjdCk7XG4xODU0Olx0XHR9XG4xODU1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE4NTY6XHRcbjE4NTc6XHQjaWZkZWYgQ09ORklHX1NNUFxuMTg1ODpcdFx0LyogcGVyLWNwdSBzZWN0aW9ucyBzY2FubmluZyAqL1xuMTg1OTpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEtNRU1MRUFLOiBBIFRhcmdldGVkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHBpbnBvaW50ZWQgdGhlIHJlbGV2YW50IGNvZGUgc2VnbWVudC4gVGhlIGNydWNpYWwgbG9ja2luZyBvcGVyYXRpb24sIHRoZSByYXcgc3BpbiBsb2NrLCBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgcmF3X3NwaW5fbG9ja19pcnEoJmFtcDtvYmplY3QtJmd0O2xvY2spYCBibG9jay4gUmVsaWVmISBUaGUgY29ycmVzcG9uZGluZyByZWxlYXNlIGlzIGhhbmRsZWQgZnVydGhlciBkb3duLCBhdCBsaW5lIDE4NTAuIExvb2tzIHNhZmUgZnJvbSBhIGJhc2ljIGxvY2svdW5sb2NrIHBlcnNwZWN0aXZlLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4gVGltZSB0byBtYWtlIHN1cmUgSSYjMzk7bSBnb2luZyB0byBiZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbiBga21lbWxlYWtfc2NhbmAuCgpMZXQmIzM5O3MgYWxzbyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2U6IGBERUJVR19LTUVNTEVBS2Agd2lsbCBiZSBteSBmcmllbmQuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLiBHb3R0YSBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19vYmplY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rbWVtbGVhay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmM9NjU4PXN0YXRpYyBub2lubGluZSBkZXBvdF9zdGFja19oYW5kbGVfdCBzZXRfdHJhY2tfcHJlcGFyZSh2b2lkKVxuLS1cbm1tL2ttZW1sZWFrLmMtNjc2LVxubW0va21lbWxlYWsuYzo2Nzc6c3RhdGljIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKl9fYWxsb2Nfb2JqZWN0KGdmcF90IGdmcClcbm1tL2ttZW1sZWFrLmMtNjc4LXtcbi0tXG5tbS9rbWVtbGVhay5jPTc4OT1zdGF0aWMgdm9pZCBfX2NyZWF0ZV9vYmplY3QodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLFxuLS1cbm1tL2ttZW1sZWFrLmMtNzk1LVxubW0va21lbWxlYWsuYzo3OTY6XHRvYmplY3QgPSBfX2FsbG9jX29iamVjdChnZnApO1xubW0va21lbWxlYWsuYy03OTctXHRpZiAoIW9iamVjdClcbi0tXG5tbS9rbWVtbGVhay5jPTg3MT1zdGF0aWMgdm9pZCBkZWxldGVfb2JqZWN0X3BhcnQodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLFxuLS1cbm1tL2ttZW1sZWFrLmMtODc2LVxubW0va21lbWxlYWsuYzo4Nzc6XHRvYmplY3RfbCA9IF9fYWxsb2Nfb2JqZWN0KEdGUF9LRVJORUwpO1xubW0va21lbWxlYWsuYy04NzgtXHRpZiAoIW9iamVjdF9sKVxuLS1cbm1tL2ttZW1sZWFrLmMtODgwLVxubW0va21lbWxlYWsuYzo4ODE6XHRvYmplY3RfciA9IF9fYWxsb2Nfb2JqZWN0KEdGUF9LRVJORUwpO1xubW0va21lbWxlYWsuYy04ODItXHRpZiAoIW9iamVjdF9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODUzCgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGttZW1sZWFrIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrbWVtbGVha2AsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGhlcmUgaXMgdGhlIGhvdC1wYXRoIGZ1bmN0aW9uIGBfX2FsbG9jX29iamVjdGAgYW5kIGBrbWVtbGVha19zY2FuYC4gV2UgbmVlZCB0byBhdm9pZCBgX19hbGxvY19vYmplY3RgIGR1ZSB0byBpdHMgaGlnaC1mcmVxdWVuY3kgdXNlLiBUaGUgbWFpbiBzY2FubmluZyBsb2dpYyBzZWVtcyB0byBiZSBjb25jZW50cmF0ZWQgaW4gYGttZW1sZWFrX3NjYW5gLCB3aGljaCBpcyB3aGVyZSB0aGUgbmV3IGB1bnJlZl9zY2Fuc2AgZmllbGQgY29tZXMgaW50byBwbGF5LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgYmlnIG9uZSBzZWVtcyB0byBiZSBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCwgb2YgY291cnNlLiBIbW0sIGBtaW5fdW5yZWZfc2NhbnNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciDigJMgdGhhdCBjb3VsZCBiZSB1c2VmdWwgdG8gbWFuaXB1bGF0ZS4gT3RoZXIgdGhhbiB0aG9zZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiBgX19hbGxvY19vYmplY3RgIGFuZCBga21lbWxlYWtfc2NhbmAsIHdoaWNoIGlzIGdvb2QgbmV3cyBmb3IgZm9jdXNpbmcgb3VyIGZ1enppbmcgZWZmb3J0cy4KCk5vdywgaXMgYGttZW1sZWFrX3NjYW5gIHJlYWNoYWJsZT8gWWVzLCBpdCYjMzk7cyBjYWxsZWQgYnkgYGttZW1sZWFrX3NjYW5fdGhyZWFkYCBhbmQsIGltcG9ydGFudGx5LCB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIHdyaXRlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha2AuIEFuZCBoZXksIFN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciB0aGF0IGRlYnVnZnMgaW50ZXJmYWNlLiBQZXJmZWN0ISBUaGlzIG1lYW5zIHdlIGNhbiB0cmlnZ2VyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgYGttZW1sZWFrX3NjYW5gIHByZXR0eSBlYXNpbHkuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoIHByZXNlbnRzIGEgdmFsdWFibGUgZnV6emluZyB0YXJnZXQuIFRoZSBuZXcgbG9naWMgaW4gYGttZW1sZWFrYCB0byBkZWxheSBsZWFrIHJlcG9ydGluZyBhbmQgcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIHVucmVmZXJlbmNlZCBzY2FucyAqZGlyZWN0bHkqIG1vZGlmaWVzIHRoZSBjb3JlIHNjYW4gbG9naWMgaW4gYGttZW1sZWFrX3NjYW5gLiBXZSBzaG91bGQgZGVmaW5pdGVseSBiZSBmdXp6aW5nIHRoaXMhCgpUaGVyZWZvcmUsIEkmIzM5O2xsIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSwgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBga21lbWxlYWtfc2NhbmAsIGVuYWJsZSBgREVCVUdfS01FTUxFQUtgLCBhbmQgdGhlIHJlYXNvbiBpcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgY3JpdGljYWwgbG9naWMgaW4ga21lbWxlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19LTUVNTEVBSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ttZW1sZWFrX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGttZW1sZWFrIHNjYW5uaW5nIGxvZ2ljIGJ5IGFkZGluZyBhIG5ldyBtb2R1bGUgcGFyYW1ldGVyIGBtaW5fdW5yZWZfc2NhbnNgIGFuZCBtb2RpZnlpbmcgYGttZW1sZWFrX3NjYW5gIHRvIHJlcXVpcmUgYSBtaW5pbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSB1bnJlZmVyZW5jZWQgc2NhbnMgYmVmb3JlIHJlcG9ydGluZyBhbiBvYmplY3QuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgc3RhdGUgbWFjaGluZSBvZiB0aGUgbGVhayBkZXRlY3Rvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfS01FTUxFQUsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrbWVtbGVha19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrbWVtbGVhayBzY2FubmluZyBsb2dpYyBieSBhZGRpbmcgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgbW9kaWZ5aW5nIGBrbWVtbGVha19zY2FuYCB0byByZXF1aXJlIGEgbWluaW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdW5yZWZlcmVuY2VkIHNjYW5zIGJlZm9yZSByZXBvcnRpbmcgYW4gb2JqZWN0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIHN0YXRlIG1hY2hpbmUgb2YgdGhlIGxlYWsgZGV0ZWN0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjowOC41MjcyMjc1NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg5MzQzMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjowOC41MjcyMzI1ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjI2NTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkN2Y0MzYyMjUzZTdiNWJkOTM0OGYxN2Q4YThiNTgwNzAxYzg0ZWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6NDI6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XFxuaW5kZXggN2Q3ODRlMDNmM2Y5ZDUuLmE4YTgzYmM2OWNlYjg4IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxcbkBAIC0xOTgsNiArMTk4LDE0IEBAIHN5c3RlbXMsIGJlY2F1c2Ugb2YgcG9pbnRlcnMgdGVtcG9yYXJpbHkgc3RvcmVkIGluIENQVSByZWdpc3RlcnMgb3JcXG4gc3RhY2tzLiBLbWVtbGVhayBkZWZpbmVzIE1TRUNTX01JTl9BR0UgKGRlZmF1bHRpbmcgdG8gMTAwMCkgcmVwcmVzZW50aW5nXFxuIHRoZSBtaW5pbXVtIGFnZSBvZiBhbiBvYmplY3QgdG8gYmUgcmVwb3J0ZWQgYXMgYSBtZW1vcnkgbGVhay5cXG4gXFxuK1RoZSBgYG1pbl91bnJlZl9zY2Fuc2BgIG1vZHVsZSBwYXJhbWV0ZXIgKGRlZmF1bHQgMSkgcmVxdWlyZXMgYW4gb2JqZWN0IHRvXFxuK2JlIHNlZW4gdW5yZWZlcmVuY2VkIGluIHRoYXQgbWFueSBjb25zZWN1dGl2ZSBzY2FucyBiZWZvcmUgaXQgaXMgcmVwb3J0ZWQuXFxuK0tlZXBpbmcgaXQgYXQgMSBwcmVzZXJ2ZXMgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3VyOyBoaWdoZXIgdmFsdWVzIGZpbHRlclxcbit0aGUgdHJhbnNpZW50IGZhbHNlIHBvc2l0aXZlcyBkZXNjcmliZWQgYWJvdmUsIGF0IHRoZSBjb3N0IG9mIGRlbGF5aW5nXFxuK2dlbnVpbmUgcmVwb3J0cyBieSB1cCB0byB0aGF0IG1hbnkgc2NhbnMuIEl0IGNhbiBiZSBzZXQgYXQgYm9vdCB3aXRoXFxuK2Bga21lbWxlYWsubWluX3VucmVmX3NjYW5zPVxcdTAwM2NuXFx1MDAzZWBgIG9yIGF0IHJ1bi10aW1lIHZpYVxcbitgYC9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zYGAuXFxuK1xcbiBMaW1pdGF0aW9ucyBhbmQgRHJhd2JhY2tzXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jXFxuaW5kZXggN2M3YmExN2NlN2FmMDAuLjViMTRjY2IzNmY5NWJhIDEwMDY0NFxcbi0tLSBhL21tL2ttZW1sZWFrLmNcXG4rKysgYi9tbS9rbWVtbGVhay5jXFxuQEAgLTE1MSw2ICsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHtcXG4gXFx0aW50IG1pbl9jb3VudDtcXG4gXFx0LyogdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludGVycyBmb3VuZCBwb2ludGluZyB0byB0aGlzIG9iamVjdCAqL1xcbiBcXHRpbnQgY291bnQ7XFxuK1xcdC8qIGNvbnNlY3V0aXZlIHNjYW5zIHRoZSBvYmplY3QgaGFzIGJlZW4gc2VlbiB1bnJlZmVyZW5jZWQgKi9cXG4rXFx0dW5zaWduZWQgaW50IHVucmVmX3NjYW5zO1xcbiBcXHQvKiBjaGVja3N1bSBmb3IgZGV0ZWN0aW5nIG1vZGlmaWVkIG9iamVjdHMgKi9cXG4gXFx0dTMyIGNoZWNrc3VtO1xcbiBcXHRkZXBvdF9zdGFja19oYW5kbGVfdCB0cmFjZV9oYW5kbGU7XFxuQEAgLTIzMiw2ICsyMzQsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfcGVyY3B1X2FkZHI7XFxuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkO1xcbiAvKiB1c2VkIHRvIGF2b2lkIHJlcG9ydGluZyBvZiByZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cyAqL1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX21pbl9hZ2U7XFxuKy8qIGNvbnNlY3V0aXZlIHNjYW5zIGFuIG9iamVjdCBtdXN0IHN0YXkgdW5yZWZlcmVuY2VkIGJlZm9yZSByZXBvcnRpbmcgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxO1xcbittb2R1bGVfcGFyYW0obWluX3VucmVmX3NjYW5zLCB1aW50LCAwNjQ0KTtcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47XFxuIC8qIGRlbGF5IGJldHdlZW4gYXV0b21hdGljIG1lbW9yeSBzY2FubmluZ3MgKi9cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19zY2FuX3dhaXQ7XFxuQEAgLTY4Nyw2ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxcbiBcXHRhdG9taWNfc2V0KFxcdTAwMjZvYmplY3QtXFx1MDAzZXVzZV9jb3VudCwgMSk7XFxuIFxcdG9iamVjdC1cXHUwMDNlZXhjZXNzX3JlZiA9IDA7XFxuIFxcdG9iamVjdC1cXHUwMDNlY291bnQgPSAwO1xcdFxcdFxcdC8qIHdoaXRlIGNvbG9yIGluaXRpYWxseSAqL1xcbitcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0b2JqZWN0LVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuIFxcdG9iamVjdC1cXHUwMDNlZGVsX3N0YXRlID0gMDtcXG4gXFxuQEAgLTE4MzMsNiArMTgzOSw5IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4gXFx0XFx0XFx0XFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cXG4rXFx0XFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxcbitcXHRcXHRcXHRvYmplY3QtXFx1MDAzZXVucmVmX3NjYW5zID0gMDtcXG4gXFx0XFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXFxuIFxcdFxcdG9iamVjdC1cXHUwMDNlY291bnQgPSAwO1xcbiBcXHRcXHRpZiAoY29sb3JfZ3JheShvYmplY3QpIFxcdTAwMjZcXHUwMDI2IGdldF9vYmplY3Qob2JqZWN0KSlcXG5AQCAtMTk2OCw4ICsxOTc3LDkgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxcbiBcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycShcXHUwMDI2b2JqZWN0LVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0dHJhY2VfaGFuZGxlID0gMDtcXG4gXFx0XFx0ZGVkdXBfcHJpbnQgPSBmYWxzZTtcXG4tXFx0XFx0aWYgKHVucmVmZXJlbmNlZF9vYmplY3Qob2JqZWN0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIShvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xcbitcXHRcXHRpZiAoIShvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICArK29iamVjdC1cXHUwMDNldW5yZWZfc2NhbnMgXFx1MDAzZT0gbWluX3VucmVmX3NjYW5zKSB7XFxuIFxcdFxcdFxcdG9iamVjdC1cXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xcbiBcXHRcXHRcXHRpZiAoa21lbWxlYWtfdmVyYm9zZSkge1xcbiBcXHRcXHRcXHRcXHR0cmFjZV9oYW5kbGUgPSBvYmplY3QtXFx1MDAzZXRyYWNlX2hhbmRsZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li44NDAyNmI2MmExYWU1ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTE1MCw2ICsxNTAsNyBAQCBURVNUX1BST0dTICs9IGtzZnRfZ3VwX3Rlc3Quc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X2htbS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfaHVnZXRsYi5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfaHVnZXZtLnNoXFxuK1RFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19jb25maXJtLnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19kZWR1cC5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfa3NtLnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rc21fbnVtYS5zaFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNGFiNjRiYzY5NDhmOFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcXG5AQCAtMCwwICsxLDExMSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJ3MgTi1jb25zZWN1dGl2ZS1zY2FuIGxlYWsgY29uZmlybWF0aW9uXFxuKyMgKHRoZSBtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlcikuXFxuKyNcXG4rIyBrbWVtbGVhayBvbmx5IHJlcG9ydHMgYW4gb2JqZWN0IG9uY2UgaXQgaGFzIHN0YXllZCB1bnJlZmVyZW5jZWQgZm9yXFxuKyMgbWluX3VucmVmX3NjYW5zIGNvbnNlY3V0aXZlIHNjYW5zLiBUaGUgZGVmYXVsdCBvZiAxIHJlcG9ydHMgb24gdGhlIGZpcnN0XFxuKyMgc2NhbiAoaGlzdG9yaWNhbCBiZWhhdmlvdXIpOyBoaWdoZXIgdmFsdWVzIGZpbHRlciB0cmFuc2llbnQgZmFsc2VcXG4rIyBwb3NpdGl2ZXMgd2hlcmUgYSBsaXZlIG9iamVjdCdzIG9ubHkgcmVmZXJlbmNlIGlzIGJyaWVmbHkgaW52aXNpYmxlIHRvIGFcXG4rIyBzaW5nbGUgc2NhbiAoZS5nLiBhbiBSQ1UgdHJlZSB1cGRhdGUgaW4gZmxpZ2h0IHdoaWxlIHRoZSBzY2FuIHJ1bnMpLiBUaGVcXG4rIyB0ZXN0IGxvYWRzIHNhbXBsZXMva21lbWxlYWsncyBoZWxwZXIgbW9kdWxlIHRvIGNyZWF0ZSBvcnBoYW4gYWxsb2NhdGlvbnNcXG4rIyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF1cXG4rIyBiYWNrdHJhY2Ugc28gdW5yZWxhdGVkIGxlYWtzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgc3lzdGVtIGFyZSBpZ25vcmVkKSxcXG4rIyBjaGVja3MgdGhhdDpcXG4rIyAgIC0gbWluX3VucmVmX3NjYW5zPTEgcmVwb3J0cyB0aGVtIG9uIHRoZSBmaXJzdCBzY2FuLFxcbisjICAgLSBtaW5fdW5yZWZfc2NhbnM9MiByZXBvcnRzIG5vdGhpbmcgb24gdGhlIGZpcnN0IHNjYW4gYnV0IGRvZXMgb24gdGhlXFxuKyMgICAgIHNlY29uZCxcXG4rIyAgIC0gdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXFxuKyNcXG4rIyBUaGUgXFxcIm5vdGhpbmcgb24gdGhlIGZpcnN0IHNjYW5cXFwiIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogd2l0aFxcbisjIG1pbl91bnJlZl9zY2Fucz0yIG5vIG9iamVjdCBjYW4gYmUgcmVwb3J0ZWQgaW4gZmV3ZXIgdGhhbiB0d28gc2NhbnMuIExpa2VcXG4rIyBrc2Z0X2ttZW1sZWFrX2RlZHVwLnNoLCBpZiB0aGUgbW9kdWxlIHlpZWxkcyBubyBkZXRlY3RhYmxlIG9ycGhhbiBhdCBhbGxcXG4rIyBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIgdGhhbiBmYWlsaW5nLlxcbisjXFxuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbitcXG4ra3NmdF9za2lwPTRcXG4rS01FTUxFQUs9L3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWtcXG4rUEFSQU09L3N5cy9tb2R1bGUva21lbWxlYWsvcGFyYW1ldGVycy9taW5fdW5yZWZfc2NhbnNcXG4rTU9EVUxFPWttZW1sZWFrLXRlc3RcXG4rQUdFPTZcXHRcXHQjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJ3MgNXMgbWluaW11bSBvYmplY3QgYWdlXFxuK1xcbitza2lwKCkgeyBlY2hvIFxcXCJTS0lQOiAkKlxcXCI7IGV4aXQgJGtzZnRfc2tpcDsgfVxcbitmYWlsKCkgeyBlY2hvIFxcXCJGQUlMOiAkKlxcXCI7IGV4aXQgMTsgfVxcbitwYXNzKCkgeyBlY2hvIFxcXCJQQVNTOiAkKlxcXCI7IGV4aXQgMDsgfVxcbitcXG4rWyBcXFwiJChpZCAtdSlcXFwiIC1lcSAwIF0gfHwgc2tpcCBcXFwibXVzdCBydW4gYXMgcm9vdFxcXCJcXG4rWyAtciBcXFwiJEtNRU1MRUFLXFxcIiBdIHx8IHNraXAgXFxcIm5vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcXFwiXFxuK1sgLXcgXFxcIiRQQVJBTVxcXCIgXSB8fCBza2lwIFxcXCJtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFxcXCJcXG4rbW9kaW5mbyBcXFwiJE1PRFVMRVxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIHx8XFxuK1xcdHNraXAgXFxcIiRNT0RVTEUgbm90IGJ1aWx0IChDT05GSUdfU0FNUExFX0tNRU1MRUFLKVxcXCJcXG4rXFxuKyMga21lbWxlYWsgY2FuIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIGF0IHJ1bnRpbWUgKGttZW1sZWFrPW9mZiBib290IGFyZyxcXG4rIyBvciBpdCBzZWxmLWRpc2FibGVkIGFmdGVyIGFuIGludGVybmFsIGVycm9yKTsgYSBcXFwic2NhblxcXCIgdGhlbiByZXR1cm5zXFxuKyMgRVBFUk0uIFByb2JlIG9uY2UgYW5kIHNraXAgaWYgc28uXFxuK2VjaG8gc2NhbiBcXHUwMDNlIFxcXCIkS01FTUxFQUtcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8XFxuK1xcdHNraXAgXFxcImttZW1sZWFrIGlzIGRpc2FibGVkIChjaGVjayBkbWVzZyBvciBrbWVtbGVhaz0gYm9vdCBhcmcpXFxcIlxcbitcXG4rcHJldj0kKGNhdCBcXFwiJFBBUkFNXFxcIilcXG4rIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3ICAjIGludm9rZWQgaW5kaXJlY3RseSB2aWEgdHJhcFxcbitjbGVhbnVwKCkge1xcbitcXHRlY2hvIFxcXCIkcHJldlxcXCIgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcdFxcdCMgcmVzdG9yZSB0aGUgcGFyYW1ldGVyXFxuK1xcdGVjaG8gc2Nhbj1vbiBcXHUwMDNlIFxcXCIkS01FTUxFQUtcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFx0XFx0IyByZS1lbmFibGUgYXV0byBzY2FuXFxuK1xcdHJtbW9kIFxcXCIkTU9EVUxFXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRlY2hvIGNsZWFyIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rfVxcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rIyBTdG9wIHRoZSBhdXRvbWF0aWMgc2NhbiB0aHJlYWQ6IG9ubHkgb3VyIG1hbnVhbCBzY2FucyBzaG91bGQgYWR2YW5jZSBhblxcbisjIG9iamVjdCdzIGNvbnNlY3V0aXZlLXVucmVmZXJlbmNlZCBydW4uIEFuIGF1dG8gc2NhbiBsYW5kaW5nIGJldHdlZW4gdHdvXFxuKyMgbWFudWFsIHNjYW5zIHdvdWxkIGNoYW5nZSB0aGUgcmVzdWx0IGFuZCBtYWtlIHRoZSB0ZXN0IGZsYWt5LlxcbitlY2hvIHNjYW49b2ZmIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFxuKyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUncyBpbml0XFxuKyMgcGF0aCAoaXRzIGttYWxsb2Mvdm1hbGxvYy9wZXJjcHUgYWxsb2NhdGlvbnMgYXJlIGRyb3BwZWQgcmlnaHQgYXdheSkuXFxuKyMgUHJlLWV4aXN0aW5nIHJlcG9ydGVkIGxlYWtzIGFyZSBncmV5ZWQgZmlyc3QgKFxcXCJjbGVhclxcXCIpIHNvIG9ubHkgb3VyXFxuKyMgb3JwaGFucyBhcmUgY291bnRlZC4gVGhlIG1vZHVsZSBpcyBsZWZ0IGxvYWRlZCBvbiBwdXJwb3NlOiBvbmNlIGl0IGlzXFxuKyMgdW5sb2FkZWQgaXRzIHN5bWJvbHMgYXJlIGdvbmUsIHNvIHRoZSBvcnBoYW4gYmFja3RyYWNlcyBubyBsb25nZXIgcmVzb2x2ZVxcbisjIHRvIFtrbWVtbGVha190ZXN0XSBhbmQgY291bGQgbm90IGJlIG1hdGNoZWQgYmVsb3cuXFxuK2dlbl9vcnBoYW5zKCkge1xcbitcXHRybW1vZCBcXFwiJE1PRFVMRVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWNobyBjbGVhciBcXHUwMDNlIFxcXCIkS01FTUxFQUtcXFwiXFxuK1xcdG1vZHByb2JlIFxcXCIkTU9EVUxFXFxcIiB8fCBza2lwIFxcXCJmYWlsZWQgdG8gbG9hZCAkTU9EVUxFXFxcIlxcbitcXHRzbGVlcCBcXFwiJEFHRVxcXCJcXG4rfVxcbitcXG4rc2NhbigpIHsgZWNobyBzY2FuIFxcdTAwM2UgXFxcIiRLTUVNTEVBS1xcXCI7IH1cXG4rXFxuKyMgTnVtYmVyIG9mIGhlbHBlci1tb2R1bGUgb3JwaGFucyBjdXJyZW50bHkgcmVwb3J0ZWQgYnkga21lbWxlYWsuIE1hdGNoaW5nXFxuKyMgdGhlIG1vZHVsZSdzIG93biBiYWNrdHJhY2UgKFtrbWVtbGVha190ZXN0XSkga2VlcHMgdGhlIGNvdW50IGltbXVuZSB0b1xcbisjIHVucmVsYXRlZCBsZWFrcyBvbiB0aGUgcnVubmluZyBzeXN0ZW0uIGttZW1sZWFrIG9ubHkgbGlzdHMgYW4gb2JqZWN0IGhlcmVcXG4rIyBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIHJlZmxlY3RzIHRoZSBjb25maXJtYXRpb24gZ2F0aW5nLlxcbitjb3VudF9vcnBoYW5zKCkge1xcbitcXHRjPSQoZ3JlcCAtYyAnXFxcXFtrbWVtbGVha190ZXN0XFxcXF0nIFxcXCIkS01FTUxFQUtcXFwiIDJcXHUwMDNlL2Rldi9udWxsKVxcbitcXHRlY2hvIFxcXCIke2M6LTB9XFxcIlxcbit9XFxuK1xcbisjIDApIHRoZSBwYXJhbWV0ZXIgcmVhZHMgYmFjayB3aGF0IHdhcyB3cml0dGVuLlxcbitlY2hvIDMgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIlxcbitbIFxcXCIkKGNhdCBcXFwiJFBBUkFNXFxcIilcXFwiID0gXFxcIjNcXFwiIF0gfHwgZmFpbCBcXFwibWluX3VucmVmX3NjYW5zIGRpZCBub3QgcmVhZCBiYWNrIGFzIDNcXFwiXFxuK1xcbisjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb3JwaGFucyByZXBvcnRlZCBvbiB0aGUgZmlyc3Qgc2Nhbi4gVGhpc1xcbisjICAgIGFsc28gZXN0YWJsaXNoZXMgdGhhdCB0aGUgaGVscGVyIHByb2R1Y2VzIGRldGVjdGFibGUgb3JwaGFucyBoZXJlLlxcbitlY2hvIDEgXFx1MDAzZSBcXFwiJFBBUkFNXFxcIlxcbitnZW5fb3JwaGFuc1xcbitzY2FuXFxuK2ZpcnN0PSQoY291bnRfb3JwaGFucylcXG4rWyBcXFwiJGZpcnN0XFxcIiAtZ3QgMCBdIHx8XFxuK1xcdHNraXAgXFxcIiRNT0RVTEUgcHJvZHVjZWQgbm8gZGV0ZWN0YWJsZSBvcnBoYW5zIChjYW5ub3QgdGVzdCBtaW5fdW5yZWZfc2NhbnMpXFxcIlxcbitcXG4rIyAyKSBtaW5fdW5yZWZfc2NhbnM9Mjogbm90aGluZyByZXBvcnRlZCBhZnRlciB0aGUgZmlyc3Qgc2NhbiwgcmVwb3J0ZWRcXG4rIyAgICBhZnRlciB0aGUgc2Vjb25kLiBUaGUgZmlyc3Qtc2Nhbi16ZXJvIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24uXFxuK2VjaG8gMiBcXHUwMDNlIFxcXCIkUEFSQU1cXFwiXFxuK2dlbl9vcnBoYW5zXFxuK3NjYW47IHMxPSQoY291bnRfb3JwaGFucylcXG4rc2NhbjsgczI9JChjb3VudF9vcnBoYW5zKVxcbitbIFxcXCIkczFcXFwiIC1lcSAwIF0gfHwgZmFpbCBcXFwibWluX3VucmVmX3NjYW5zPTI6ICRzMSBvcnBoYW4ocykgcmVwb3J0ZWQgYWZ0ZXIgdGhlIDFzdCBzY2FuIChtdXN0IGJlIDApXFxcIlxcbitbIFxcXCIkczJcXFwiIC1ndCAwIF0gfHwgZmFpbCBcXFwibWluX3VucmVmX3NjYW5zPTI6IG5vIHJlcG9ydCBvbiB0aGUgMm5kIHNjYW4gKGZhbHNlIG5lZ2F0aXZlKVxcXCJcXG4rXFxuK3Bhc3MgXFxcIm1pbl91bnJlZl9zY2Fucz0xIGltbWVkaWF0ZTsgPTIgZ2F0ZWQgdG8gMm5kIHNjYW4gKGNvdW50cyAkZmlyc3QvJHMxLyRzMik7IHBhcmFtIHJlYWQtYmFjayBva1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDI6MDkuMTMwMzI1MDg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI5MDMyMzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJkN2Y0MzYyMjUzZTdiNWJkOTM0OGYxN2Q4YThiNTgwNzAxYzg0ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0MjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttZW1sZWFrLnJzdFxuaW5kZXggN2Q3ODRlMDNmM2Y5ZDUuLmE4YTgzYmM2OWNlYjg4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21lbWxlYWsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rbWVtbGVhay5yc3RcbkBAIC0xOTgsNiArMTk4LDE0IEBAIHN5c3RlbXMsIGJlY2F1c2Ugb2YgcG9pbnRlcnMgdGVtcG9yYXJpbHkgc3RvcmVkIGluIENQVSByZWdpc3RlcnMgb3JcbiBzdGFja3MuIEttZW1sZWFrIGRlZmluZXMgTVNFQ1NfTUlOX0FHRSAoZGVmYXVsdGluZyB0byAxMDAwKSByZXByZXNlbnRpbmdcbiB0aGUgbWluaW11bSBhZ2Ugb2YgYW4gb2JqZWN0IHRvIGJlIHJlcG9ydGVkIGFzIGEgbWVtb3J5IGxlYWsuXG4gXG4rVGhlIGBgbWluX3VucmVmX3NjYW5zYGAgbW9kdWxlIHBhcmFtZXRlciAoZGVmYXVsdCAxKSByZXF1aXJlcyBhbiBvYmplY3QgdG9cbitiZSBzZWVuIHVucmVmZXJlbmNlZCBpbiB0aGF0IG1hbnkgY29uc2VjdXRpdmUgc2NhbnMgYmVmb3JlIGl0IGlzIHJlcG9ydGVkLlxuK0tlZXBpbmcgaXQgYXQgMSBwcmVzZXJ2ZXMgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3VyOyBoaWdoZXIgdmFsdWVzIGZpbHRlclxuK3RoZSB0cmFuc2llbnQgZmFsc2UgcG9zaXRpdmVzIGRlc2NyaWJlZCBhYm92ZSwgYXQgdGhlIGNvc3Qgb2YgZGVsYXlpbmdcbitnZW51aW5lIHJlcG9ydHMgYnkgdXAgdG8gdGhhdCBtYW55IHNjYW5zLiBJdCBjYW4gYmUgc2V0IGF0IGJvb3Qgd2l0aFxuK2Bga21lbWxlYWsubWluX3VucmVmX3NjYW5zPVx1MDAzY25cdTAwM2VgYCBvciBhdCBydW4tdGltZSB2aWFcbitgYC9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zYGAuXG4rXG4gTGltaXRhdGlvbnMgYW5kIERyYXdiYWNrc1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMDAuLjViMTRjY2IzNmY5NWJhIDEwMDY0NFxuLS0tIGEvbW0va21lbWxlYWsuY1xuKysrIGIvbW0va21lbWxlYWsuY1xuQEAgLTE1MSw2ICsxNTEsOCBAQCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0IHtcbiBcdGludCBtaW5fY291bnQ7XG4gXHQvKiB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50ZXJzIGZvdW5kIHBvaW50aW5nIHRvIHRoaXMgb2JqZWN0ICovXG4gXHRpbnQgY291bnQ7XG4rXHQvKiBjb25zZWN1dGl2ZSBzY2FucyB0aGUgb2JqZWN0IGhhcyBiZWVuIHNlZW4gdW5yZWZlcmVuY2VkICovXG4rXHR1bnNpZ25lZCBpbnQgdW5yZWZfc2NhbnM7XG4gXHQvKiBjaGVja3N1bSBmb3IgZGV0ZWN0aW5nIG1vZGlmaWVkIG9iamVjdHMgKi9cbiBcdHUzMiBjaGVja3N1bTtcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IHRyYWNlX2hhbmRsZTtcbkBAIC0yMzIsNiArMjM0LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3BlcmNwdV9hZGRyO1xuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNjYW5fdGhyZWFkO1xuIC8qIHVzZWQgdG8gYXZvaWQgcmVwb3J0aW5nIG9mIHJlY2VudGx5IGFsbG9jYXRlZCBvYmplY3RzICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19taW5fYWdlO1xuKy8qIGNvbnNlY3V0aXZlIHNjYW5zIGFuIG9iamVjdCBtdXN0IHN0YXkgdW5yZWZlcmVuY2VkIGJlZm9yZSByZXBvcnRpbmcgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG1pbl91bnJlZl9zY2FucyA9IDE7XG4rbW9kdWxlX3BhcmFtKG1pbl91bnJlZl9zY2FucywgdWludCwgMDY0NCk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19sYXN0X3NjYW47XG4gLyogZGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgbWVtb3J5IHNjYW5uaW5ncyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfc2Nhbl93YWl0O1xuQEAgLTY4Nyw2ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqX19hbGxvY19vYmplY3QoZ2ZwX3QgZ2ZwKVxuIFx0YXRvbWljX3NldChcdTAwMjZvYmplY3QtXHUwMDNldXNlX2NvdW50LCAxKTtcbiBcdG9iamVjdC1cdTAwM2VleGNlc3NfcmVmID0gMDtcbiBcdG9iamVjdC1cdTAwM2Vjb3VudCA9IDA7XHRcdFx0Lyogd2hpdGUgY29sb3IgaW5pdGlhbGx5ICovXG4rXHRvYmplY3QtXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xuIFx0b2JqZWN0LVx1MDAzZWNoZWNrc3VtID0gMDtcbiBcdG9iamVjdC1cdTAwM2VkZWxfc3RhdGUgPSAwO1xuIFxuQEAgLTE4MzMsNiArMTgzOSw5IEBAIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcbiBcdFx0XHRcdF9fcGFpbnRfaXQob2JqZWN0LCBLTUVNTEVBS19CTEFDSyk7XG4gXHRcdH1cbiBcbitcdFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cbitcdFx0aWYgKCFjb2xvcl93aGl0ZShvYmplY3QpKVxuK1x0XHRcdG9iamVjdC1cdTAwM2V1bnJlZl9zY2FucyA9IDA7XG4gXHRcdC8qIHJlc2V0IHRoZSByZWZlcmVuY2UgY291bnQgKHdoaXRlbiB0aGUgb2JqZWN0KSAqL1xuIFx0XHRvYmplY3QtXHUwMDNlY291bnQgPSAwO1xuIFx0XHRpZiAoY29sb3JfZ3JheShvYmplY3QpIFx1MDAyNlx1MDAyNiBnZXRfb2JqZWN0KG9iamVjdCkpXG5AQCAtMTk2OCw4ICsxOTc3LDkgQEAgc3RhdGljIHZvaWQga21lbWxlYWtfc2Nhbih2b2lkKVxuIFx0XHRyYXdfc3Bpbl9sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jayk7XG4gXHRcdHRyYWNlX2hhbmRsZSA9IDA7XG4gXHRcdGRlZHVwX3ByaW50ID0gZmFsc2U7XG4tXHRcdGlmICh1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhKG9iamVjdC1cdTAwM2VmbGFncyBcdTAwMjYgT0JKRUNUX1JFUE9SVEVEKSkge1xuK1x0XHRpZiAoIShvYmplY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE9CSkVDVF9SRVBPUlRFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB1bnJlZmVyZW5jZWRfb2JqZWN0KG9iamVjdCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICArK29iamVjdC1cdTAwM2V1bnJlZl9zY2FucyBcdTAwM2U9IG1pbl91bnJlZl9zY2Fucykge1xuIFx0XHRcdG9iamVjdC1cdTAwM2VmbGFncyB8PSBPQkpFQ1RfUkVQT1JURUQ7XG4gXHRcdFx0aWYgKGttZW1sZWFrX3ZlcmJvc2UpIHtcbiBcdFx0XHRcdHRyYWNlX2hhbmRsZSA9IG9iamVjdC1cdTAwM2V0cmFjZV9oYW5kbGU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLjg0MDI2YjYyYTFhZTVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTUwLDYgKzE1MCw3IEBAIFRFU1RfUFJPR1MgKz0ga3NmdF9ndXBfdGVzdC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9obW0uc2hcbiBURVNUX1BST0dTICs9IGtzZnRfaHVnZXRsYi5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9odWdldm0uc2hcbitURVNUX1BST0dTICs9IGtzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rbWVtbGVha19kZWR1cC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9rc20uc2hcbiBURVNUX1BST0dTICs9IGtzZnRfa3NtX251bWEuc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X2ttZW1sZWFrX2NvbmZpcm0uc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzRhYjY0YmM2OTQ4Zjhcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfa21lbWxlYWtfY29uZmlybS5zaFxuQEAgLTAsMCArMSwxMTEgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBGdW5jdGlvbmFsIHRlc3QgZm9yIGttZW1sZWFrJ3MgTi1jb25zZWN1dGl2ZS1zY2FuIGxlYWsgY29uZmlybWF0aW9uXG4rIyAodGhlIG1pbl91bnJlZl9zY2FucyBtb2R1bGUgcGFyYW1ldGVyKS5cbisjXG4rIyBrbWVtbGVhayBvbmx5IHJlcG9ydHMgYW4gb2JqZWN0IG9uY2UgaXQgaGFzIHN0YXllZCB1bnJlZmVyZW5jZWQgZm9yXG4rIyBtaW5fdW5yZWZfc2NhbnMgY29uc2VjdXRpdmUgc2NhbnMuIFRoZSBkZWZhdWx0IG9mIDEgcmVwb3J0cyBvbiB0aGUgZmlyc3RcbisjIHNjYW4gKGhpc3RvcmljYWwgYmVoYXZpb3VyKTsgaGlnaGVyIHZhbHVlcyBmaWx0ZXIgdHJhbnNpZW50IGZhbHNlXG4rIyBwb3NpdGl2ZXMgd2hlcmUgYSBsaXZlIG9iamVjdCdzIG9ubHkgcmVmZXJlbmNlIGlzIGJyaWVmbHkgaW52aXNpYmxlIHRvIGFcbisjIHNpbmdsZSBzY2FuIChlLmcuIGFuIFJDVSB0cmVlIHVwZGF0ZSBpbiBmbGlnaHQgd2hpbGUgdGhlIHNjYW4gcnVucykuIFRoZVxuKyMgdGVzdCBsb2FkcyBzYW1wbGVzL2ttZW1sZWFrJ3MgaGVscGVyIG1vZHVsZSB0byBjcmVhdGUgb3JwaGFuIGFsbG9jYXRpb25zXG4rIyBhbmQsIGNvdW50aW5nIG9ubHkgdGhvc2Ugb3JwaGFucyAobWF0Y2hlZCBieSB0aGVpciBba21lbWxlYWtfdGVzdF1cbisjIGJhY2t0cmFjZSBzbyB1bnJlbGF0ZWQgbGVha3MgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0gYXJlIGlnbm9yZWQpLFxuKyMgY2hlY2tzIHRoYXQ6XG4rIyAgIC0gbWluX3VucmVmX3NjYW5zPTEgcmVwb3J0cyB0aGVtIG9uIHRoZSBmaXJzdCBzY2FuLFxuKyMgICAtIG1pbl91bnJlZl9zY2Fucz0yIHJlcG9ydHMgbm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhbiBidXQgZG9lcyBvbiB0aGVcbisjICAgICBzZWNvbmQsXG4rIyAgIC0gdGhlIHBhcmFtZXRlciByZWFkcyBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4uXG4rI1xuKyMgVGhlIFwibm90aGluZyBvbiB0aGUgZmlyc3Qgc2NhblwiIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogd2l0aFxuKyMgbWluX3VucmVmX3NjYW5zPTIgbm8gb2JqZWN0IGNhbiBiZSByZXBvcnRlZCBpbiBmZXdlciB0aGFuIHR3byBzY2Fucy4gTGlrZVxuKyMga3NmdF9rbWVtbGVha19kZWR1cC5zaCwgaWYgdGhlIG1vZHVsZSB5aWVsZHMgbm8gZGV0ZWN0YWJsZSBvcnBoYW4gYXQgYWxsXG4rIyBpbiB0aGUgcnVubmluZyBlbnZpcm9ubWVudCB0aGUgdGVzdCBza2lwcyByYXRoZXIgdGhhbiBmYWlsaW5nLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4ra3NmdF9za2lwPTRcbitLTUVNTEVBSz0vc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha1xuK1BBUkFNPS9zeXMvbW9kdWxlL2ttZW1sZWFrL3BhcmFtZXRlcnMvbWluX3VucmVmX3NjYW5zXG4rTU9EVUxFPWttZW1sZWFrLXRlc3RcbitBR0U9Nlx0XHQjIHNlY29uZHM7IG11c3QgZXhjZWVkIGttZW1sZWFrJ3MgNXMgbWluaW11bSBvYmplY3QgYWdlXG4rXG4rc2tpcCgpIHsgZWNobyBcIlNLSVA6ICQqXCI7IGV4aXQgJGtzZnRfc2tpcDsgfVxuK2ZhaWwoKSB7IGVjaG8gXCJGQUlMOiAkKlwiOyBleGl0IDE7IH1cbitwYXNzKCkgeyBlY2hvIFwiUEFTUzogJCpcIjsgZXhpdCAwOyB9XG4rXG4rWyBcIiQoaWQgLXUpXCIgLWVxIDAgXSB8fCBza2lwIFwibXVzdCBydW4gYXMgcm9vdFwiXG4rWyAtciBcIiRLTUVNTEVBS1wiIF0gfHwgc2tpcCBcIm5vIGttZW1sZWFrIGRlYnVnZnMgKENPTkZJR19ERUJVR19LTUVNTEVBSylcIlxuK1sgLXcgXCIkUEFSQU1cIiBdIHx8IHNraXAgXCJtaW5fdW5yZWZfc2NhbnMgbW9kdWxlIHBhcmFtZXRlciBub3QgcHJlc2VudFwiXG4rbW9kaW5mbyBcIiRNT0RVTEVcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbitcdHNraXAgXCIkTU9EVUxFIG5vdCBidWlsdCAoQ09ORklHX1NBTVBMRV9LTUVNTEVBSylcIlxuK1xuKyMga21lbWxlYWsgY2FuIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIGF0IHJ1bnRpbWUgKGttZW1sZWFrPW9mZiBib290IGFyZyxcbisjIG9yIGl0IHNlbGYtZGlzYWJsZWQgYWZ0ZXIgYW4gaW50ZXJuYWwgZXJyb3IpOyBhIFwic2NhblwiIHRoZW4gcmV0dXJuc1xuKyMgRVBFUk0uIFByb2JlIG9uY2UgYW5kIHNraXAgaWYgc28uXG4rZWNobyBzY2FuIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGwgfHxcbitcdHNraXAgXCJrbWVtbGVhayBpcyBkaXNhYmxlZCAoY2hlY2sgZG1lc2cgb3Iga21lbWxlYWs9IGJvb3QgYXJnKVwiXG4rXG4rcHJldj0kKGNhdCBcIiRQQVJBTVwiKVxuKyMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNyAgIyBpbnZva2VkIGluZGlyZWN0bHkgdmlhIHRyYXBcbitjbGVhbnVwKCkge1xuK1x0ZWNobyBcIiRwcmV2XCIgXHUwMDNlIFwiJFBBUkFNXCIgMlx1MDAzZS9kZXYvbnVsbFx0XHQjIHJlc3RvcmUgdGhlIHBhcmFtZXRlclxuK1x0ZWNobyBzY2FuPW9uIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGxcdFx0IyByZS1lbmFibGUgYXV0byBzY2FuXG4rXHRybW1vZCBcIiRNT0RVTEVcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIGNsZWFyIFx1MDAzZSBcIiRLTUVNTEVBS1wiIDJcdTAwM2UvZGV2L251bGxcbit9XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIFN0b3AgdGhlIGF1dG9tYXRpYyBzY2FuIHRocmVhZDogb25seSBvdXIgbWFudWFsIHNjYW5zIHNob3VsZCBhZHZhbmNlIGFuXG4rIyBvYmplY3QncyBjb25zZWN1dGl2ZS11bnJlZmVyZW5jZWQgcnVuLiBBbiBhdXRvIHNjYW4gbGFuZGluZyBiZXR3ZWVuIHR3b1xuKyMgbWFudWFsIHNjYW5zIHdvdWxkIGNoYW5nZSB0aGUgcmVzdWx0IGFuZCBtYWtlIHRoZSB0ZXN0IGZsYWt5LlxuK2VjaG8gc2Nhbj1vZmYgXHUwMDNlIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1xuKyMgQ3JlYXRlIGEgZnJlc2gsIGFnZWQgc2V0IG9mIG9ycGhhbiBvYmplY3RzIGZyb20gdGhlIGhlbHBlciBtb2R1bGUncyBpbml0XG4rIyBwYXRoIChpdHMga21hbGxvYy92bWFsbG9jL3BlcmNwdSBhbGxvY2F0aW9ucyBhcmUgZHJvcHBlZCByaWdodCBhd2F5KS5cbisjIFByZS1leGlzdGluZyByZXBvcnRlZCBsZWFrcyBhcmUgZ3JleWVkIGZpcnN0IChcImNsZWFyXCIpIHNvIG9ubHkgb3VyXG4rIyBvcnBoYW5zIGFyZSBjb3VudGVkLiBUaGUgbW9kdWxlIGlzIGxlZnQgbG9hZGVkIG9uIHB1cnBvc2U6IG9uY2UgaXQgaXNcbisjIHVubG9hZGVkIGl0cyBzeW1ib2xzIGFyZSBnb25lLCBzbyB0aGUgb3JwaGFuIGJhY2t0cmFjZXMgbm8gbG9uZ2VyIHJlc29sdmVcbisjIHRvIFtrbWVtbGVha190ZXN0XSBhbmQgY291bGQgbm90IGJlIG1hdGNoZWQgYmVsb3cuXG4rZ2VuX29ycGhhbnMoKSB7XG4rXHRybW1vZCBcIiRNT0RVTEVcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRlY2hvIGNsZWFyIFx1MDAzZSBcIiRLTUVNTEVBS1wiXG4rXHRtb2Rwcm9iZSBcIiRNT0RVTEVcIiB8fCBza2lwIFwiZmFpbGVkIHRvIGxvYWQgJE1PRFVMRVwiXG4rXHRzbGVlcCBcIiRBR0VcIlxuK31cbitcbitzY2FuKCkgeyBlY2hvIHNjYW4gXHUwMDNlIFwiJEtNRU1MRUFLXCI7IH1cbitcbisjIE51bWJlciBvZiBoZWxwZXItbW9kdWxlIG9ycGhhbnMgY3VycmVudGx5IHJlcG9ydGVkIGJ5IGttZW1sZWFrLiBNYXRjaGluZ1xuKyMgdGhlIG1vZHVsZSdzIG93biBiYWNrdHJhY2UgKFtrbWVtbGVha190ZXN0XSkga2VlcHMgdGhlIGNvdW50IGltbXVuZSB0b1xuKyMgdW5yZWxhdGVkIGxlYWtzIG9uIHRoZSBydW5uaW5nIHN5c3RlbS4ga21lbWxlYWsgb25seSBsaXN0cyBhbiBvYmplY3QgaGVyZVxuKyMgb25jZSBpdCBoYXMgYmVlbiByZXBvcnRlZCwgc28gdGhpcyByZWZsZWN0cyB0aGUgY29uZmlybWF0aW9uIGdhdGluZy5cbitjb3VudF9vcnBoYW5zKCkge1xuK1x0Yz0kKGdyZXAgLWMgJ1xcW2ttZW1sZWFrX3Rlc3RcXF0nIFwiJEtNRU1MRUFLXCIgMlx1MDAzZS9kZXYvbnVsbClcbitcdGVjaG8gXCIke2M6LTB9XCJcbit9XG4rXG4rIyAwKSB0aGUgcGFyYW1ldGVyIHJlYWRzIGJhY2sgd2hhdCB3YXMgd3JpdHRlbi5cbitlY2hvIDMgXHUwMDNlIFwiJFBBUkFNXCJcbitbIFwiJChjYXQgXCIkUEFSQU1cIilcIiA9IFwiM1wiIF0gfHwgZmFpbCBcIm1pbl91bnJlZl9zY2FucyBkaWQgbm90IHJlYWQgYmFjayBhcyAzXCJcbitcbisjIDEpIG1pbl91bnJlZl9zY2Fucz0xIChkZWZhdWx0KTogb3JwaGFucyByZXBvcnRlZCBvbiB0aGUgZmlyc3Qgc2Nhbi4gVGhpc1xuKyMgICAgYWxzbyBlc3RhYmxpc2hlcyB0aGF0IHRoZSBoZWxwZXIgcHJvZHVjZXMgZGV0ZWN0YWJsZSBvcnBoYW5zIGhlcmUuXG4rZWNobyAxIFx1MDAzZSBcIiRQQVJBTVwiXG4rZ2VuX29ycGhhbnNcbitzY2FuXG4rZmlyc3Q9JChjb3VudF9vcnBoYW5zKVxuK1sgXCIkZmlyc3RcIiAtZ3QgMCBdIHx8XG4rXHRza2lwIFwiJE1PRFVMRSBwcm9kdWNlZCBubyBkZXRlY3RhYmxlIG9ycGhhbnMgKGNhbm5vdCB0ZXN0IG1pbl91bnJlZl9zY2FucylcIlxuK1xuKyMgMikgbWluX3VucmVmX3NjYW5zPTI6IG5vdGhpbmcgcmVwb3J0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHNjYW4sIHJlcG9ydGVkXG4rIyAgICBhZnRlciB0aGUgc2Vjb25kLiBUaGUgZmlyc3Qtc2Nhbi16ZXJvIGNoZWNrIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24uXG4rZWNobyAyIFx1MDAzZSBcIiRQQVJBTVwiXG4rZ2VuX29ycGhhbnNcbitzY2FuOyBzMT0kKGNvdW50X29ycGhhbnMpXG4rc2NhbjsgczI9JChjb3VudF9vcnBoYW5zKVxuK1sgXCIkczFcIiAtZXEgMCBdIHx8IGZhaWwgXCJtaW5fdW5yZWZfc2NhbnM9MjogJHMxIG9ycGhhbihzKSByZXBvcnRlZCBhZnRlciB0aGUgMXN0IHNjYW4gKG11c3QgYmUgMClcIlxuK1sgXCIkczJcIiAtZ3QgMCBdIHx8IGZhaWwgXCJtaW5fdW5yZWZfc2NhbnM9Mjogbm8gcmVwb3J0IG9uIHRoZSAybmQgc2NhbiAoZmFsc2UgbmVnYXRpdmUpXCJcbitcbitwYXNzIFwibWluX3VucmVmX3NjYW5zPTEgaW1tZWRpYXRlOyA9MiBnYXRlZCB0byAybmQgc2NhbiAoY291bnRzICRmaXJzdC8kczEvJHMyKTsgcGFyYW0gcmVhZC1iYWNrIG9rXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjA5LjEzMDMyNjUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyOTMxMzQzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS21lbWxlYWsgUGF0Y2ggRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0va21lbWxlYWsuY2Ag4oCTIGFkZHMgYSBgbWluX3VucmVmX3NjYW5zYCBtb2R1bGUgcGFyYW1ldGVyLCBhbmQgYSBzZWxmdGVzdCwgYGtzZnRfa21lbWxlYWtfY29uZmlybS5zaGAuIEl0IHNlZW1zIHRvIGFkZCBhIG5ldyBgdW5yZWZfc2NhbnNgIGZpZWxkIGluIHRoZSBga21lbWxlYWtfb2JqZWN0YCBzdHJ1Y3R1cmUgYW5kIG1vZGlmaWVzIGBrbWVtbGVha19zY2FuKClgIHRvIHVzZSBpdCwgb25seSByZXBvcnRpbmcgYW4gb2JqZWN0IGFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgdW5yZWZlcmVuY2VkIHNjYW5zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWNpZGUgaWYgdGhpcyBuZWVkcyBmb2N1c2VkIGZ1enppbmcuXG5cbkttZW1sZWFrIGlzIGEgbWVtb3J5IGxlYWsgZGV0ZWN0b3IsIGEgZGVidWdnaW5nIHRvb2wuIEl0J3Mgbm90IGEgZGlyZWN0IGNvbnN1bWVyIG9mIHVudHJ1c3RlZCBpbnB1dCBpbiB0aGUgc2FtZSB3YXksIHNheSwgYSBuZXR3b3JrIHN0YWNrIGRyaXZlciBpcy4gSXQncyBwdXJwb3NlIGlzIHRvIGZpbmQgbGVha3MsIGJ1dCBpdCBkb2VzIHRoaXMgYnkgc2Nhbm5pbmcgZXhpc3RpbmcgbWVtb3J5LiBCdXQgaG9sZCBvbiwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0b29sIGl0c2VsZiEgQ2FuIGEgZnV6emVyICp0cmlnZ2VyKiB0aGUgbmV3IGNvZGUgcGF0aHM/IEFic29sdXRlbHksIGJ5IGxlYWtpbmcgbWVtb3J5IG9yIGludGVyYWN0aW5nIHdpdGgga21lbWxlYWsgdmlhIGRlYnVnZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIGxpa2UgdGhlIG9uZSBhZGRlZCBpbiB0aGUgcGF0Y2guXG5cblRoZSBnZW5lcmFsIHByYWN0aWNlIGlzIHRoYXQgdG9vbHMgbGlrZSB0aGlzIGFyZSAqZW5hYmxlZCogZHVyaW5nIGZ1enppbmcgdG8gY2F0Y2ggYnVncyBpbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYnV0IG5vdCBwcmltYXJpbHkgZnV6emVkIHRoZW1zZWx2ZXMuIEJ1dCB0aGlzIGlzICpkaWZmZXJlbnQqIC0gdGhlIHBhdGNoICpjaGFuZ2VzKiBob3cga21lbWxlYWsgd29ya3MuIEl0J3MgZnVuY3Rpb25hbCwgYWRkaW5nIGEgbmV3IGNvbnRyb2wgYW5kIGNoYW5naW5nIHRoZSByZXBvcnRpbmcgbG9naWMuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgZnV6emluZyAqa21lbWxlYWsgaXRzZWxmKiBpcyB3b3J0aHdoaWxlLiBJJ20gbGVhbmluZyB0b3dhcmQgXCJub1wiIGFzIGEgcHJpbWFyeSB0YXJnZXQuIERpYWdub3N0aWMgdG9vbHMgYXJlbid0IHVzdWFsbHkgd2hlcmUgd2UgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gSG93ZXZlciwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGRlc2NyaXB0aW9ucyBmb3IgZGVidWdmcywgYW5kIEknZCBuZWVkIHRvIGNvbnNpZGVyIHRob3NlLlxuXG5Ob3csIHRoZSBwcm9tcHQgcmVtaW5kcyBtZSBvZiB0aGUgY3JpdGVyaWEgZm9yICpub3QqIGZ1enppbmc6IGRvY3MsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgKmFjdHVhbCBrZXJuZWwgbG9naWMqIHdpdGhpbiB0aGUgYG1tL2AgZGlyZWN0b3J5IOKAkyBpdCdzIG5vdCBqdXN0IGRvY3VtZW50YXRpb24uIEl0J3MgZnVuY3Rpb25hbCwgYWx0ZXJpbmcgaG93IGttZW1sZWFrIG9wZXJhdGVzLiBga21lbWxlYWtfc2NhbmAgaXMgbW9kaWZpZWQsIGFuZCB0aGUgY2hhbmdlIGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGhvdyBsZWFrcyBhcmUgcmVwb3J0ZWQuIEkgc2hvdWxkIGxvb2sgYXQgYG1tL2ttZW1sZWFrLmNgIG1vcmUgY2xvc2VseSBhbmQgY29uc2lkZXIgb3RoZXIgZnVuY3Rpb25zIGFzIHdlbGwuIGBfX2FsbG9jX29iamVjdGAgaGFzIGFsc28gYmVlbiBjaGFuZ2VkLlxuXG5TbywgYWNjb3JkaW5nIHRvIG15IGludGVybmFsIGFzc2Vzc21lbnQsIGFuZCBpbiByZWxhdGlvbiB0byB0aGUgZ3VpZGVsaW5lcywgSSB0aGluayBpdCdzIHRpbWUgdG8gcnVuIHNvbWUgdmVyaWZpY2F0aW9uIHRvb2xzIGFuZCBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoxOC40MjM0NjI2MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3OTQ3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl91bnJlZl9zY2Fuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rbWVtbGVhay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttZW1sZWFrLmM9MjM2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbWluX2FnZTtcXG5tbS9rbWVtbGVhay5jLTIzNy0vKiBjb25zZWN1dGl2ZSBzY2FucyBhbiBvYmplY3QgbXVzdCBzdGF5IHVucmVmZXJlbmNlZCBiZWZvcmUgcmVwb3J0aW5nICovXFxubW0va21lbWxlYWsuYzoyMzg6c3RhdGljIHVuc2lnbmVkIGludCBtaW5fdW5yZWZfc2NhbnMgPSAxO1xcbm1tL2ttZW1sZWFrLmM6MjM5Om1vZHVsZV9wYXJhbShtaW5fdW5yZWZfc2NhbnMsIHVpbnQsIDA2NDQpO1xcbm1tL2ttZW1sZWFrLmMtMjQwLXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9zY2FuO1xcbi0tXFxubW0va21lbWxlYWsuYz0xODA2PXN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtMTk4MS1cXHRcXHQgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpIFxcdTAwMjZcXHUwMDI2XFxubW0va21lbWxlYWsuYzoxOTgyOlxcdFxcdCAgICArK29iamVjdC1cXHUwMDNldW5yZWZfc2NhbnMgXFx1MDAzZT0gbWluX3VucmVmX3NjYW5zKSB7XFxubW0va21lbWxlYWsuYy0xOTgzLVxcdFxcdFxcdG9iamVjdC1cXHUwMDNlZmxhZ3MgfD0gT0JKRUNUX1JFUE9SVEVEO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoxOC41MzE0MTQ4MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMzODk4OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGttZW1sZWFrIERlbGF5IENvdW50ZXIqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrbWVtbGVha19zY2FuYCBhbmQgYF9fYWxsb2Nfb2JqZWN0YC4gIGBrbWVtbGVha19zY2FuYCBpcyBlaXRoZXIgYSB0aHJlYWQgb3IgdHJpZ2dlcmVkIHZpYSBkZWJ1Z2ZzLCB3aGljaCBzb3VuZHMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuICBgX19hbGxvY19vYmplY3RgLCBob3dldmVyLCBpcyBjYWxsZWQgZXZlcnkgc2luZ2xlIHRpbWUga21lbWxlYWsgdHJhY2tzIGFuIGFsbG9jYXRpb24uICBUaGF0J3MgYSBob3QtcGF0aCBmdW5jdGlvbjsgaXQncyBwcmFjdGljYWxseSBnb2luZyB0byBiZSBoaXQgYWxsIHRoZSB0aW1lIGlmIGttZW1sZWFrIGlzIGVuYWJsZWQsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuXG5cblNvLCBpcyB0aGlzIGV2ZW4gd29ydGggdGhlIGVmZm9ydD8gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXTigJlzIGp1c3QgYSBjb3VudGVyIHRvIGRlbGF5IGxlYWsgcmVwb3J0aW5nLiAgRnV6emluZyAqc3BlY2lmaWNhbGx5KiB0aGUgY291bnRlciBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IG5vdCB1bmNvdmVyIGFueXRoaW5nIGVhcnRoLXNoYXR0ZXJpbmcuICBTdGlsbCwgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB2YWxpZCB0YXJnZXRzLiBJZiBJIGRlY2lkZSBpdCAqaXMqIHdvcnRoIGZ1enppbmcsIEknbGwgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuXG5cbkdpdmVuIHRoYXQgYF9fYWxsb2Nfb2JqZWN0YCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBJJ20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIGp1c3QgZnV6emluZyBga21lbWxlYWtfc2NhbmAuIEl0J3MgdGhlIG9ubHkgb25lIHRoYXQgc2VlbXMgcHJhY3RpY2FsIHRvIHB1dCBpbiBmb2N1cy5cblxuQmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgcmVsYXRlZCB0byBrbWVtbGVhayB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBidWlsZCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoyMy4zNjUzMTY5MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTk3MDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfS01FTUxFQUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjIzLjQ3ODkyNDMxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTgzNDUzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipUcmFjaW5nIERvd24gREVCVUdfS01FTUxFQUsqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBERUJVR19LTUVNTEVBS2AuIFRoaXMgaXMgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgZmVhdHVyZSBvciBkZWJ1Z2dpbmcgdG9vbCB3b3JrcyB3aXRoaW4gYSBrZXJuZWwgb3Igc3lzdGVtLiBLbm93aW5nIHdoZXJlIGl0J3MgZGVmaW5lZCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBpbnRlbmRlZCBwdXJwb3NlLiBGcm9tIHRoZXJlLCBJIGNhbiBsaWtlbHkgdHJhY2UgaXRzIHVzYWdlLCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgYWN0aXZlLCBhbmQgZXZlbnR1YWxseSBwaWVjZSB0b2dldGhlciB0aGUgZW50aXJlIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgaWYgSSBjYW4gdXNlIHNvbWUgZ3JlcCBvciBzaW1pbGFyIHRvb2xpbmcgdG8gdHJhY2sgZG93biB0aGUgaGVhZGVyIGZpbGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hlcmUgdGhpcyBtYWNybyBpcyBkZWNsYXJlZC4gS25vd2luZyB0aGUgZXhhY3QgZGVmaW5pdGlvbiBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoyNi4wMzcyNzEzOTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NzM5OTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfS01FTUxFQUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MjM3PWNvbmZpZyBIQVZFX0RFQlVHX0tNRU1MRUFLXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTIzOS1cXG5tbS9LY29uZmlnLmRlYnVnOjI0MDpjb25maWcgREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI0MS1cXHRib29sIFxcXCJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTI2NC1cXG5tbS9LY29uZmlnLmRlYnVnOjI2NTpjb25maWcgREVCVUdfS01FTUxFQUtfTUVNX1BPT0xfU0laRVxcbm1tL0tjb25maWcuZGVidWctMjY2LVxcdGludCBcXFwiS21lbWxlYWsgbWVtb3J5IHBvb2wgc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjc3LVxcbm1tL0tjb25maWcuZGVidWc6Mjc4OmNvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRlxcbm1tL0tjb25maWcuZGVidWctMjc5LVxcdGJvb2wgXFxcIkRlZmF1bHQga21lbWxlYWsgdG8gb2ZmXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yODQtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyODU6Y29uZmlnIERFQlVHX0tNRU1MRUFLX0FVVE9fU0NBTlxcbm1tL0tjb25maWcuZGVidWctMjg2LVxcdGJvb2wgXFxcIkVuYWJsZSBrbWVtbGVhayBhdXRvIHNjYW4gdGhyZWFkIG9uIGJvb3QgdXBcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTI5OS1cXG5tbS9LY29uZmlnLmRlYnVnOjMwMDpjb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbm1tL0tjb25maWcuZGVidWctMzAxLVxcdGJvb2wgXFxcIkRlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjoyOC42MjQ2NzYwOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA2MDQyMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBERUJVR19LTUVNTEVBS2AgQ29uZmlnIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgY29uZmlnIGNoYW5nZSBlbmFibGVzIGBERUJVR19LTUVNTEVBS2AuIFRoZSBxdWVzdGlvbiBpcywgaXMgZnV6emluZyBpdCB3b3J0aCB0aGUgZWZmb3J0PyBGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgaXQgbW9kaWZpZXMgYGttZW1sZWFrX3NjYW5gIHRvIHJlcXVpcmUgYSBjZXJ0YWluIG51bWJlciBvZiBjb25zZWN1dGl2ZSB1bnJlZmVyZW5jZWQgc2NhbnMgKGBtaW5fdW5yZWZfc2NhbnNgKSBiZWZvcmUgcmVwb3J0aW5nIGEgbGVhay4gSXQncyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0ZSBtYWNoaW5lLCBhIGNvdW50ZXIgdGhhdCByZXNldHMgdXBvbiByZWZlcmVuY2luZyBhbmQgaW5jcmVtZW50cyBpZiB1bnJlZmVyZW5jZWQuXG5cbldoaWxlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0J3Mgc3BlY2lmaWMgdG8gYSBkZWJ1Z2dpbmcgdG9vbC4gU3l6a2FsbGVyIG9mdGVuIGhhcyBgREVCVUdfS01FTUxFQUtgIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZGV0ZWN0aW5nIGxlYWtzIGluICpvdGhlciogY29kZS4gVGhlIGdvYWwgb2YgZnV6emluZyB0aGlzIHBhdGNoIGlzIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIG5ldyBsb2dpYyB3aXRoaW4gYGttZW1sZWFrX3NjYW5gIGl0c2VsZiwgbG9va2luZyBmb3IgYnVncyBsaWtlIGludGVnZXIgb3ZlcmZsb3dzIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBgb2JqZWN0LVx1MDAzZXVucmVmX3NjYW5zYCBpcyBhbiBgdW5zaWduZWQgaW50YCwgd2hpY2ggaXMgaW5jcmVtZW50ZWQgd2l0aGluIGBrbWVtbGVha19zY2FuYCB1bmRlciBhIGByYXdfc3Bpbl9sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jaylgLiBCdXQgd2FpdCwgSSBqdXN0IG5vdGljZWQgc29tZXRoaW5nLiBUaGUgdmFyaWFibGUgYG9iamVjdC1cdTAwM2V1bnJlZl9zY2Fuc2AgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24gYW5kICp3aXRob3V0KiB0aGUgbG9jay4gVGhpcyBiZWFycyBsb29raW5nIGludG8uIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBtbS9rbWVtbGVhay5jYCBhcm91bmQgbGluZSAxODM5LiBUaGF0IGNvdWxkIGJlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjMzLjczMDcyMDA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rbWVtbGVhay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MzA6XFx0I2VuZGlmXFxuMTgzMTpcXHRcXG4xODMyOlxcdFxcdFxcdC8qIGlnbm9yZSBvYmplY3RzIG91dHNpZGUgbG93bWVtIChwYWludCB0aGVtIGJsYWNrKSAqL1xcbjE4MzM6XFx0XFx0XFx0aWYgKChvYmplY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT0JKRUNUX1BIWVMpIFxcdTAwMjZcXHUwMDI2XFxuMTgzNDpcXHRcXHRcXHQgICAhKG9iamVjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPQkpFQ1RfTk9fU0NBTikpIHtcXG4xODM1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGh5cyA9IG9iamVjdC1cXHUwMDNlcG9pbnRlcjtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0XFx0XFx0aWYgKFBIWVNfUEZOKHBoeXMpIFxcdTAwM2MgbWluX2xvd19wZm4gfHxcXG4xODM4OlxcdFxcdFxcdFxcdCAgICBQSFlTX1BGTihwaHlzICsgb2JqZWN0LVxcdTAwM2VzaXplKSBcXHUwMDNlIG1heF9sb3dfcGZuKVxcbjE4Mzk6XFx0XFx0XFx0XFx0XFx0X19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0JMQUNLKTtcXG4xODQwOlxcdFxcdFxcdH1cXG4xODQxOlxcdFxcbjE4NDI6XFx0XFx0XFx0LyogcmVmZXJlbmNlZCBsYXN0IHNjYW46IHJlc3RhcnQgdGhlIHVucmVmZXJlbmNlZCBydW4gKi9cXG4xODQzOlxcdFxcdFxcdGlmICghY29sb3Jfd2hpdGUob2JqZWN0KSlcXG4xODQ0OlxcdFxcdFxcdFxcdG9iamVjdC1cXHUwMDNldW5yZWZfc2NhbnMgPSAwO1xcbjE4NDU6XFx0XFx0XFx0LyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovXFxuMTg0NjpcXHRcXHRcXHRvYmplY3QtXFx1MDAzZWNvdW50ID0gMDtcXG4xODQ3OlxcdFxcdFxcdGlmIChjb2xvcl9ncmF5KG9iamVjdCkgXFx1MDAyNlxcdTAwMjYgZ2V0X29iamVjdChvYmplY3QpKVxcbjE4NDg6XFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2b2JqZWN0LVxcdTAwM2VncmF5X2xpc3QsIFxcdTAwMjZncmF5X2xpc3QpO1xcbjE4NDk6XFx0XFxuMTg1MDpcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZvYmplY3QtXFx1MDAzZWxvY2spO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuMTg1MzpcXHRcXHRcXHRcXHRrbWVtbGVha19jb25kX3Jlc2NoZWQob2JqZWN0KTtcXG4xODU0OlxcdFxcdH1cXG4xODU1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE4NTY6XFx0XFxuMTg1NzpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE4NTg6XFx0XFx0LyogcGVyLWNwdSBzZWN0aW9ucyBzY2FubmluZyAqL1xcbjE4NTk6XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQyOjMzLjczMDg1MDA1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTAzMDU3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLTUVNTEVBSzogQSBUYXJnZXRlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCB0aGUgcmVsZXZhbnQgY29kZSBzZWdtZW50LiBUaGUgY3J1Y2lhbCBsb2NraW5nIG9wZXJhdGlvbiwgdGhlIHJhdyBzcGluIGxvY2ssIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGByYXdfc3Bpbl9sb2NrX2lycShcdTAwMjZvYmplY3QtXHUwMDNlbG9jaylgIGJsb2NrLiBSZWxpZWYhIFRoZSBjb3JyZXNwb25kaW5nIHJlbGVhc2UgaXMgaGFuZGxlZCBmdXJ0aGVyIGRvd24sIGF0IGxpbmUgMTg1MC4gTG9va3Mgc2FmZSBmcm9tIGEgYmFzaWMgbG9jay91bmxvY2sgcGVyc3BlY3RpdmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuIFRpbWUgdG8gbWFrZSBzdXJlIEknbSBnb2luZyB0byBiZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUuIEknbGwgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIG9uIGBrbWVtbGVha19zY2FuYC5cblxuTGV0J3MgYWxzbyBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZTogYERFQlVHX0tNRU1MRUFLYCB3aWxsIGJlIG15IGZyaWVuZC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLiBHb3R0YSBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjozNy4zODExNTg1NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTYyMjk3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19vYmplY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va21lbWxlYWsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rbWVtbGVhay5jPTY1OD1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUodm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtNjc2LVxcbm1tL2ttZW1sZWFrLmM6Njc3OnN0YXRpYyBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpfX2FsbG9jX29iamVjdChnZnBfdCBnZnApXFxubW0va21lbWxlYWsuYy02Nzgte1xcbi0tXFxubW0va21lbWxlYWsuYz03ODk9c3RhdGljIHZvaWQgX19jcmVhdGVfb2JqZWN0KHVuc2lnbmVkIGxvbmcgcHRyLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm1tL2ttZW1sZWFrLmMtNzk1LVxcbm1tL2ttZW1sZWFrLmM6Nzk2OlxcdG9iamVjdCA9IF9fYWxsb2Nfb2JqZWN0KGdmcCk7XFxubW0va21lbWxlYWsuYy03OTctXFx0aWYgKCFvYmplY3QpXFxuLS1cXG5tbS9rbWVtbGVhay5jPTg3MT1zdGF0aWMgdm9pZCBkZWxldGVfb2JqZWN0X3BhcnQodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLFxcbi0tXFxubW0va21lbWxlYWsuYy04NzYtXFxubW0va21lbWxlYWsuYzo4Nzc6XFx0b2JqZWN0X2wgPSBfX2FsbG9jX29iamVjdChHRlBfS0VSTkVMKTtcXG5tbS9rbWVtbGVhay5jLTg3OC1cXHRpZiAoIW9iamVjdF9sKVxcbi0tXFxubW0va21lbWxlYWsuYy04ODAtXFxubW0va21lbWxlYWsuYzo4ODE6XFx0b2JqZWN0X3IgPSBfX2FsbG9jX29iamVjdChHRlBfS0VSTkVMKTtcXG5tbS9rbWVtbGVhay5jLTg4Mi1cXHRpZiAoIW9iamVjdF9yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0MjozOC45MzczOTMwNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0MDIwNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGttZW1sZWFrIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGttZW1sZWFrYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaG90LXBhdGggZnVuY3Rpb24gYF9fYWxsb2Nfb2JqZWN0YCBhbmQgYGttZW1sZWFrX3NjYW5gLiBXZSBuZWVkIHRvIGF2b2lkIGBfX2FsbG9jX29iamVjdGAgZHVlIHRvIGl0cyBoaWdoLWZyZXF1ZW5jeSB1c2UuIFRoZSBtYWluIHNjYW5uaW5nIGxvZ2ljIHNlZW1zIHRvIGJlIGNvbmNlbnRyYXRlZCBpbiBga21lbWxlYWtfc2NhbmAsIHdoaWNoIGlzIHdoZXJlIHRoZSBuZXcgYHVucmVmX3NjYW5zYCBmaWVsZCBjb21lcyBpbnRvIHBsYXkuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgYmlnIG9uZSBzZWVtcyB0byBiZSBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCwgb2YgY291cnNlLiBIbW0sIGBtaW5fdW5yZWZfc2NhbnNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciDigJMgdGhhdCBjb3VsZCBiZSB1c2VmdWwgdG8gbWFuaXB1bGF0ZS4gT3RoZXIgdGhhbiB0aG9zZSwgSSBkb24ndCBzZWUgYW55IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIGBfX2FsbG9jX29iamVjdGAgYW5kIGBrbWVtbGVha19zY2FuYCwgd2hpY2ggaXMgZ29vZCBuZXdzIGZvciBmb2N1c2luZyBvdXIgZnV6emluZyBlZmZvcnRzLlxuXG5Ob3csIGlzIGBrbWVtbGVha19zY2FuYCByZWFjaGFibGU/IFllcywgaXQncyBjYWxsZWQgYnkgYGttZW1sZWFrX3NjYW5fdGhyZWFkYCBhbmQsIGltcG9ydGFudGx5LCB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIHdyaXRlIHRvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVha2AuIEFuZCBoZXksIFN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciB0aGF0IGRlYnVnZnMgaW50ZXJmYWNlLiBQZXJmZWN0ISBUaGlzIG1lYW5zIHdlIGNhbiB0cmlnZ2VyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgYGttZW1sZWFrX3NjYW5gIHByZXR0eSBlYXNpbHkuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LiBUaGUgbmV3IGxvZ2ljIGluIGBrbWVtbGVha2AgdG8gZGVsYXkgbGVhayByZXBvcnRpbmcgYW5kIHJlcXVpcmUgYSBtaW5pbXVtIG51bWJlciBvZiB1bnJlZmVyZW5jZWQgc2NhbnMgKmRpcmVjdGx5KiBtb2RpZmllcyB0aGUgY29yZSBzY2FuIGxvZ2ljIGluIGBrbWVtbGVha19zY2FuYC4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgZnV6emluZyB0aGlzIVxuXG5UaGVyZWZvcmUsIEknbGwgcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGBrbWVtbGVha19zY2FuYCwgZW5hYmxlIGBERUJVR19LTUVNTEVBS2AsIGFuZCB0aGUgcmVhc29uIGlzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBjcml0aWNhbCBsb2dpYyBpbiBrbWVtbGVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MywiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDI6NDUuMjc3NjAwNTkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMDQyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19LTUVNTEVBS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImttZW1sZWFrX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga21lbWxlYWsgc2Nhbm5pbmcgbG9naWMgYnkgYWRkaW5nIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgYG1pbl91bnJlZl9zY2Fuc2AgYW5kIG1vZGlmeWluZyBga21lbWxlYWtfc2NhbmAgdG8gcmVxdWlyZSBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHVucmVmZXJlbmNlZCBzY2FucyBiZWZvcmUgcmVwb3J0aW5nIGFuIG9iamVjdC4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBsZWFrIGRldGVjdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia21lbWxlYWtfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrbWVtbGVhayBzY2FubmluZyBsb2dpYyBieSBhZGRpbmcgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciBgbWluX3VucmVmX3NjYW5zYCBhbmQgbW9kaWZ5aW5nIGBrbWVtbGVha19zY2FuYCB0byByZXF1aXJlIGEgbWluaW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdW5yZWZlcmVuY2VkIHNjYW5zIGJlZm9yZSByZXBvcnRpbmcgYW4gb2JqZWN0LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIHN0YXRlIG1hY2hpbmUgb2YgdGhlIGxlYWsgZGV0ZWN0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[1] Phase: Succeeded StartedAt: 2026-06-26 22:42:57 +0000 UTC FinishedAt: 2026-06-26 22:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 22:42:57 +0000 UTC FinishedAt: 2026-06-26 22:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2] Phase: Succeeded StartedAt: 2026-06-26 22:42:57 +0000 UTC FinishedAt: 2026-06-27 02:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 22:42:57 +0000 UTC FinishedAt: 2026-06-27 02:58:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 22:42:57 +0000 UTC FinishedAt: 2026-06-26 22:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 22:42:57 +0000 UTC FinishedAt: 2026-06-26 22:43:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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-workflowvmtf4/series-workflowvmtf4-convert-artifact-2609773431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 22:43:07 +0000 UTC FinishedAt: 2026-06-26 23:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 22:43:07 +0000 UTC FinishedAt: 2026-06-26 23:09:00 +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:*c5ff4e14-8237-46a1-8fb5-a86129df3c5d,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-workflowvmtf4/series-workflowvmtf4-convert-artifact-2609773431/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": "486c1cd4-90ed-452e-adfc-2918f0749dab", "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-workflowvmtf4/series-workflowvmtf4-build-action-3610480077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 22:43:07 +0000 UTC FinishedAt: 2026-06-26 23:08: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:*c5ff4e14-8237-46a1-8fb5-a86129df3c5d,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-workflowvmtf4/series-workflowvmtf4-convert-artifact-2609773431/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": "486c1cd4-90ed-452e-adfc-2918f0749dab", "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-workflowvmtf4/series-workflowvmtf4-build-action-3610480077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:09:00 +0000 UTC FinishedAt: 2026-06-26 23:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:09:00 +0000 UTC FinishedAt: 2026-06-26 23:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:09:00 +0000 UTC FinishedAt: 2026-06-26 23:09:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:09:00 +0000 UTC FinishedAt: 2026-06-26 23:09:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-workflowvmtf4/series-workflowvmtf4-convert-artifact-3542568358/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:09:39 +0000 UTC FinishedAt: 2026-06-26 23:12:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:09:39 +0000 UTC FinishedAt: 2026-06-26 23:11:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*486c1cd4-90ed-452e-adfc-2918f0749dab,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-workflowvmtf4/series-workflowvmtf4-build-action-3610480077/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-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:12:00 +0000 UTC FinishedAt: 2026-06-26 23:12:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:12:00 +0000 UTC FinishedAt: 2026-06-26 23:12:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:12:00 +0000 UTC FinishedAt: 2026-06-26 23:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:12:00 +0000 UTC FinishedAt: 2026-06-26 23:50:18 +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:*c5ff4e14-8237-46a1-8fb5-a86129df3c5d,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-workflowvmtf4/series-workflowvmtf4-convert-artifact-3542568358/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": "94fe7746-b929-4c98-b72e-effb0765aa76", "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-workflowvmtf4/series-workflowvmtf4-build-action-66481002/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:12:00 +0000 UTC FinishedAt: 2026-06-26 23:50: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:*c5ff4e14-8237-46a1-8fb5-a86129df3c5d,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-workflowvmtf4/series-workflowvmtf4-convert-artifact-3542568358/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": "94fe7746-b929-4c98-b72e-effb0765aa76", "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-workflowvmtf4/series-workflowvmtf4-build-action-66481002/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:50:18 +0000 UTC FinishedAt: 2026-06-26 23:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:50:18 +0000 UTC FinishedAt: 2026-06-26 23:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:50:18 +0000 UTC FinishedAt: 2026-06-26 23:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:50:18 +0000 UTC FinishedAt: 2026-06-26 23:53:17 +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:*94fe7746-b929-4c98-b72e-effb0765aa76,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-workflowvmtf4/series-workflowvmtf4-build-action-66481002/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-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:31 +0000 UTC FinishedAt: 2026-06-27 02:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:31 +0000 UTC FinishedAt: 2026-06-27 02:58:17 +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":["kmemleak_scan"],"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:*486c1cd4-90ed-452e-adfc-2918f0749dab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94fe7746-b929-4c98-b72e-effb0765aa76,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-workflowvmtf4/series-workflowvmtf4-build-action-3610480077/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-workflowvmtf4/series-workflowvmtf4-build-action-66481002/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:31 +0000 UTC FinishedAt: 2026-06-26 23:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:31 +0000 UTC FinishedAt: 2026-06-26 23:54:42 +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":["kmemleak_scan"],"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-workflowvmtf4/series-workflowvmtf4-convert-artifact-954037739/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:31 +0000 UTC FinishedAt: 2026-06-26 23:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:31 +0000 UTC FinishedAt: 2026-06-26 23:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:53:32 +0000 UTC FinishedAt: 2026-06-26 23:53:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:54:52 +0000 UTC FinishedAt: 2026-06-27 02:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvmtf4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"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":["kmemleak_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK"],"series_id":"96bfc007-2196-432b-822f-19b1bb51587e","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-06-26 23:54:52 +0000 UTC FinishedAt: 2026-06-27 02:58:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*486c1cd4-90ed-452e-adfc-2918f0749dab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94fe7746-b929-4c98-b72e-effb0765aa76,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-workflowvmtf4/series-workflowvmtf4-build-action-3610480077/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-workflowvmtf4/series-workflowvmtf4-build-action-66481002/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-workflowvmtf4/series-workflowvmtf4-convert-artifact-954037739/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,}