Name: series-workflowsc58q Phase: Succeeded StartedAt: 2026-09-07 16:17:42 +0000 UTC FinishedAt: 2026-09-07 20:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[0] Phase: Succeeded StartedAt: 2026-09-07 16:17:42 +0000 UTC FinishedAt: 2026-09-07 16:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 16:17:42 +0000 UTC FinishedAt: 2026-09-07 16:39:23 +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": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "PROC_PAGE_MONITOR" ], "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": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "PROC_PAGE_MONITOR" ], "series_id": "cf5c8781-e260-4fcb-a085-690be1e78947" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_cgroup_ino", "kpagecgroup_read" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9jZ3JvdXBfaW5vJiMzNDssCiAgICAmIzM0O2twYWdlY2dyb3VwX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbmluZGV4IDlmNWM3NWQwNmY3NjguLjQwMTMzMDMwN2JjNWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuQEAgLTEwNyw2ICYjNDM7MTA3LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHBhZ2VfcmVmX2NvdW50KFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNmZvbGlvLVx1MDAzZV9yZWZjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZm9saW9fcmVmX2NvdW50KHBhZ2VfZm9saW8ocGFnZSkpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzU4LDE3ICYjNDM7MzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqL1xuIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXG4tXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKHBhZ2VfZm9saW8ocGFnZSkpO1xuJiM0MztcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFmdGVyLXNwbGl0IGZvbGlvcyByZW1haW4gZnJvemVuIHVudGlsIHRoZWlyIG1ldGFkYXRhLCBpbmNsdWRpbmdcbiYjNDM7XHQgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGVcbiYjNDM7XHQgKiByZWxlYXNlIHN0b3JlIGluIGZvbGlvX3JlZl91bmZyZWV6ZSgpIGFuZCBtYWtlcyB0aGF0IG1ldGFkYXRhXG4mIzQzO1x0ICogdmlzaWJsZSB0byB0aGlzIGNhbGxlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbiBcbiBcdHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIWNzc19pc19vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbiBcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gXHRpZiAobWVtY2cpXG4gXHRcdGlubyA9IGNncm91cF9pbm8obWVtY2ctXHUwMDNlY3NzLmNncm91cCk7XG4mIzQzO3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlubztcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX2Nncm91cF9pbm8mIzM0OywKICAgICYjMzQ7a3BhZ2VjZ3JvdXBfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaAppbmRleCA5ZjVjNzVkMDZmNzY4Li40MDEzMzAzMDdiYzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oCkBAIC0xMDcsNiAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gcGFnZV9yZWZfY291bnQoJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnRfYWNxdWlyZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoJmFtcDtmb2xpby0mZ3Q7X3JlZmNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzU4LDE3ICYjNDM7MzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICovCiBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAkvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqLwotCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2socGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJLyoKJiM0MzsJICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZwomIzQzOwkgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGUKJiM0MzsJICogcmVsZWFzZSBzdG9yZSBpbiBmb2xpb19yZWZfdW5mcmVlemUoKSBhbmQgbWFrZXMgdGhhdCBtZXRhZGF0YQomIzQzOwkgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiAKIAl3aGlsZSAobWVtY2cgJmFtcDsmYW1wOyAhY3NzX2lzX29ubGluZSgmYW1wO21lbWNnLSZndDtjc3MpKQogCQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKIAlpZiAobWVtY2cpCiAJCWlubyA9IGNncm91cF9pbm8obWVtY2ctJmd0O2Nzcy5jZ3JvdXApOwomIzQzO3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gaW5vOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERldGFpbGVkIEJyZWFrZG93bioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZW0sIHNvIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGRpZmYgaXRzZWxmLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYGluY2x1ZGUvbGludXgvcGFnZV9yZWYuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpYC4gSW50ZXJlc3RpbmcsIGxpa2VseSBzb21lIHJlZmNvdW50aW5nIG1hbmlwdWxhdGlvbiB0byBwcmV2ZW50IHJhY2VzLCBnaXZlbiB0aGUgY29udGV4dC4gVGhlbiwgSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWdlX2Nncm91cF9pbm8oKWAgZnVuY3Rpb24uCgpUaGUgcGF0Y2ggYWx0ZXJzIGhvdyBgcGFnZV9jZ3JvdXBfaW5vKClgIHdvcmtzLiBJdCYjMzk7cyBub3cgY2FsbGluZyBgZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO2AgYW5kIHRoZW4sIGNydWNpYWxseSwgaW50cm9kdWNpbmcgYSBjYWxsIHRvIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbylgLiBUaGlzIGlzIGNsZWFybHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByYWNlIGNvbmRpdGlvbiBpdCYjMzk7cyB0cnlpbmcgdG8gc29sdmUuIElmIHRoYXQgYWNxdWlzaXRpb24gZmFpbHMsIGl0IGp1bXBzIHRvIGB1bmxvY2tgLCBhdm9pZGluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKWAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhpcyBpcyBhaW1lZCBhdCBtaXRpZ2F0aW5nIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGZvbGlvIHNwbGl0cywgcHJvYmFibHkgd2hlbiB0aGUgbWV0YWRhdGEsIHNwZWNpZmljYWxseSBgbWVtY2dfZGF0YWAsIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBwcm90ZWN0aW5nIGFnYWluc3QgYW4gaW52YWxpZCBhY2Nlc3MgdG8gYG1lbWNnX2RhdGFgIGR1cmluZyBmb2xpbyBzcGxpdC9tZXJnZSBvcGVyYXRpb24uCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGltcGFjdCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgcGFnZV9jZ3JvdXBfaW5vYCBpcyB1c2VkLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZSBhbmQgaGVscCBtZSBjb25maXJtIHRoYXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9jZ3JvdXBfaW5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9wYWdlLmMtOTUtXHRcdFx0Y2FzZSBLUEFHRV9DR1JPVVA6XG5mcy9wcm9jL3BhZ2UuYzo5NjpcdFx0XHRcdGluZm8gPSBwYWdlX2Nncm91cF9pbm8ocGFnZSk7XG5mcy9wcm9jL3BhZ2UuYy05Ny1cdFx0XHRcdGJyZWFrO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg4OD1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4ODk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5MC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NzItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODczOnN0YXRpYyBpbmxpbmUgaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3NC17XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg9Mjc0PVRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMjg0LVx0XHRfX2ZpZWxkKHU2NCxcdFx0Y2dyb3VwX2lubylcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oOjI4NTpcdFx0X19maWVsZCh1NjQsXHRcdHBhZ2VfY2dyb3VwX2lubylcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI4Ni1cdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRtZW1jZ19pZClcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yOTktXHRcdHJjdV9yZWFkX2xvY2soKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oOjMwMDpcdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm8gPSBjZ3JvdXBfaW5vKGZvbGlvX21lbWNnKGZvbGlvKS1cdTAwM2Vjc3MuY2dyb3VwKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMwMS1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzAzLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzA0Olx0VFBfcHJpbnRrKFwmIzM0O2JkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1XCYjMzQ7LFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA1LVx0XHRfX2VudHJ5LVx1MDAzZW5hbWUsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA5LVx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm8sXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDozMTA6XHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMTEtXHQpXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9Njk9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfdGFzayhzdHJ1Y3QgcGFnZSAqcClcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYy03My1cbm1tL2h3cG9pc29uLWluamVjdC5jOjc0Olx0aWYgKHBhZ2VfY2dyb3VwX2lubyhwKSAhPSBod3BvaXNvbl9maWx0ZXJfbWVtY2cpXG5tbS9od3BvaXNvbi1pbmplY3QuYy03NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vbWVtY29udHJvbC5jPTMzND1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzQ2LS8qKlxubW0vbWVtY29udHJvbC5jOjM0NzogKiBwYWdlX2Nncm91cF9pbm8gLSByZXR1cm4gaW5vZGUgbnVtYmVyIG9mIHRoZSBtZW1jZyBhIHBhZ2UgaXMgY2hhcmdlZCB0b1xubW0vbWVtY29udHJvbC5jLTM0OC0gKiBAcGFnZTogdGhlIHBhZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzU1LSAqIHRoZSBjZ3JvdXAgaW5vZGUgZnJvbSBnZXR0aW5nIHRvcm4gZG93biBhbmQgcG90ZW50aWFsbHkgcmVhbGxvY2F0ZWQgYSBtb21lbnRcbm1tL21lbWNvbnRyb2wuYzozNTY6ICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXRcbm1tL21lbWNvbnRyb2wuYy0zNTctICogZG8gbm90IGNhcmUgKHN1Y2ggYXMgcHJvY2ZzIGludGVyZmFjZXMpLlxubW0vbWVtY29udHJvbC5jLTM1OC0gKi9cbm1tL21lbWNvbnRyb2wuYzozNTk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtY29udHJvbC5jLTM2MC17XG4tLVxubW0vbWVtY29udHJvbC5jLTM4Ni19XG5tbS9tZW1jb250cm9sLmM6Mzg3OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2dyb3VwX2lubyk7XG5tbS9tZW1jb250cm9sLmMtMzg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipUcmFjaW5nIHRoZSBgcGFnZV9jZ3JvdXBfaW5vYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHBhZ2VfY2dyb3VwX2lub2AgaXMgYmVpbmcgaW52b2tlZC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBmcy9wcm9jL3BhZ2UuY2AgZmlsZSBzaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcHJvYyBlbnRyeS4gTXkgY3VycmVudCB0YXNrIGlzIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IGBmcy9wcm9jL3BhZ2UuYzo5NmAuIExvb2tzIGxpa2UgaXQmIzM5O3Mgd2l0aGluIGBrcGFnZV9yZWFkYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgYEtQQUdFX0NHUk9VUGAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGVudHJ5LiBFc3NlbnRpYWxseSwgSSYjMzk7bSByZWFkaW5nIGBmcy9wcm9jL3BhZ2UuY2Agd2l0aCB0aGUgc3BlY2lmaWMgcHVycG9zZSBvZiB0cmFja2luZyBkb3duIGhvdyBhbmQgd2hlcmUgdGhpcyBgcGFnZV9jZ3JvdXBfaW5vYCBjYWxsIGlzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9wYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXpvbmUuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gIDIwOlx0XG4gIDIxOlx0I2RlZmluZSBLUE1TSVpFIHNpemVvZih1NjQpXG4gIDIyOlx0I2RlZmluZSBLUE1NQVNLIChLUE1TSVpFIC0gMSlcbiAgMjM6XHRcbiAgMjQ6XHRlbnVtIGtwYWdlX29wZXJhdGlvbiB7XG4gIDI1Olx0XHRLUEFHRV9GTEFHUyxcbiAgMjY6XHRcdEtQQUdFX0NPVU5ULFxuICAyNzpcdFx0S1BBR0VfQ0dST1VQLFxuICAyODpcdH07XG4gIDI5Olx0XG4gIDMwOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tYXhfZHVtcF9wZm4odm9pZClcbiAgMzE6XHR7XG4gIDMyOlx0I2lmZGVmIENPTkZJR19TUEFSU0VNRU1cbiAgMzM6XHRcdC8qXG4gIDM0Olx0XHQgKiBUaGUgbWVtbWFwIG9mIGVhcmx5IHNlY3Rpb25zIGlzIGNvbXBsZXRlbHkgcG9wdWxhdGVkIGFuZCBtYXJrZWRcbiAgMzU6XHRcdCAqIG9ubGluZSBldmVuIGlmIG1heF9wZm4gZG9lcyBub3QgZmFsbCBvbiBhIHNlY3Rpb24gYm91bmRhcnkgLVxuICAzNjpcdFx0ICogcGZuX3RvX29ubGluZV9wYWdlKCkgd2lsbCBzdWNjZWVkIG9uIGFsbCBwYWdlcy4gQWxsb3cgaW5zcGVjdGluZ1xuICAzNzpcdFx0ICogdGhlc2UgbWVtbWFwcy5cbiAgMzg6XHRcdCAqL1xuICAzOTpcdFx0cmV0dXJuIHJvdW5kX3VwKG1heF9wZm4sIFBBR0VTX1BFUl9TRUNUSU9OKTtcbiAgNDA6XHQjZWxzZVxuICA0MTpcdFx0cmV0dXJuIG1heF9wZm47XG4gIDQyOlx0I2VuZGlmXG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0YXRpYyB1NjQgZ2V0X2twYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuICA0NjpcdHtcbiAgNDc6XHRcdHN0cnVjdCBwYWdlX3NuYXBzaG90IHBzO1xuICA0ODpcdFx0dTY0IHJldDtcbiAgNDk6XHRcbiAgNTA6XHRcdHNuYXBzaG90X3BhZ2UoXHUwMDI2cHMsIHBhZ2UpO1xuICA1MTpcdFxuICA1MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxuICA1MzpcdFx0XHRyZXQgPSBmb2xpb19wcmVjaXNlX3BhZ2VfbWFwY291bnQoXHUwMDI2cHMuZm9saW9fc25hcHNob3QsXG4gIDU0Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZwcy5wYWdlX3NuYXBzaG90KTtcbiAgNTU6XHRcdGVsc2VcbiAgNTY6XHRcdFx0cmV0ID0gZm9saW9fYXZlcmFnZV9wYWdlX21hcGNvdW50KFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90KTtcbiAgNTc6XHRcbiAgNTg6XHRcdHJldHVybiByZXQ7XG4gIDU5Olx0fVxuICA2MDpcdFxuICA2MTpcdHN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gIDYyOlx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLFxuICA2MzpcdFx0XHRlbnVtIGtwYWdlX29wZXJhdGlvbiBvcClcbiAgNjQ6XHR7XG4gIDY1Olx0XHRjb25zdCB1bnNpZ25lZCBsb25nIG1heF9kdW1wX3BmbiA9IGdldF9tYXhfZHVtcF9wZm4oKTtcbiAgNjY6XHRcdHU2NCBfX3VzZXIgKm91dCA9ICh1NjQgX191c2VyICopYnVmO1xuICA2NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDY4Olx0XHR1bnNpZ25lZCBsb25nIHNyYyA9ICpwcG9zO1xuICA2OTpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gIDcwOlx0XHRzc2l6ZV90IHJldCA9IDA7XG4gIDcxOlx0XHR1NjQgaW5mbztcbiAgNzI6XHRcbiAgNzM6XHRcdHBmbiA9IHNyYyAvIEtQTVNJWkU7XG4gIDc0Olx0XHRpZiAoc3JjIFx1MDAyNiBLUE1NQVNLIHx8IGNvdW50IFx1MDAyNiBLUE1NQVNLKVxuICA3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNzY6XHRcdGlmIChzcmMgXHUwMDNlPSBtYXhfZHVtcF9wZm4gKiBLUE1TSVpFKVxuICA3NzpcdFx0XHRyZXR1cm4gMDtcbiAgNzg6XHRcdGNvdW50ID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIChtYXhfZHVtcF9wZm4gKiBLUE1TSVpFKSAtIHNyYyk7XG4gIDc5Olx0XG4gIDgwOlx0XHR3aGlsZSAoY291bnQgXHUwMDNlIDApIHtcbiAgODE6XHRcdFx0LypcbiAgODI6XHRcdFx0ICogVE9ETzogWk9ORV9ERVZJQ0Ugc3VwcG9ydCByZXF1aXJlcyB0byBpZGVudGlmeVxuICA4MzpcdFx0XHQgKiBtZW1tYXBzIHRoYXQgd2VyZSBhY3R1YWxseSBpbml0aWFsaXplZC5cbiAgODQ6XHRcdFx0ICovXG4gIDg1Olx0XHRcdHBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbiAgODY6XHRcbiAgODc6XHRcdFx0aWYgKHBhZ2UpIHtcbiAgODg6XHRcdFx0XHRzd2l0Y2ggKG9wKSB7XG4gIDg5Olx0XHRcdFx0Y2FzZSBLUEFHRV9GTEFHUzpcbiAgOTA6XHRcdFx0XHRcdGluZm8gPSBzdGFibGVfcGFnZV9mbGFncyhwYWdlKTtcbiAgOTE6XHRcdFx0XHRcdGJyZWFrO1xuICA5MjpcdFx0XHRcdGNhc2UgS1BBR0VfQ09VTlQ6XG4gIDkzOlx0XHRcdFx0XHRpbmZvID0gZ2V0X2twYWdlX2NvdW50KHBhZ2UpO1xuICA5NDpcdFx0XHRcdFx0YnJlYWs7XG4gIDk1Olx0XHRcdFx0Y2FzZSBLUEFHRV9DR1JPVVA6XG4gIDk2Olx0XHRcdFx0XHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xuICA5NzpcdFx0XHRcdFx0YnJlYWs7XG4gIDk4Olx0XHRcdFx0ZGVmYXVsdDpcbiAgOTk6XHRcdFx0XHRcdGluZm8gPSAwO1xuIDEwMDpcdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgL3Byb2Mva3BhZ2VjZ3JvdXBgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgYC9wcm9jL2twYWdlY2dyb3VwYC4gSSBrbm93IHRoYXQgYGZzL3Byb2MvcGFnZS5jYCBpcyBpbnZvbHZlZCwgdGhhdCBzZWVtcyBsb2dpY2FsLCBidXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgdGhlIGNyZWF0aW9uIGFuZCBmdW5jdGlvbmFsaXR5IG9mIGAvcHJvYy9rcGFnZWNncm91cGAuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBvYnZpb3VzIHBsYWNlcy4gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayB3aXRoaW4gdGhlIGBmcy9wcm9jL2AgZGlyZWN0b3J5IGl0c2VsZjsgc3BlY2lmaWNhbGx5LCB0aGUgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgZGVmaW5lZCBhbmQgY29uZmlndXJlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmaW5kIHdoYXQgSSBuZWVkLCB0aGUgY29uZmlnIG9wdGlvbiB0aGF0IHR1cm5zIHRoaXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3BhZ2VjZ3JvdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0PTUxPXdvcmtsb2FkIG9uZSBzaG91bGQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0LTU1LSAgICBgYC9wcm9jL3BpZC9wYWdlbWFwYGAgaWYgdGhlIHdvcmtsb2FkIGlzIHJlcHJlc2VudGVkIGJ5IGEgcHJvY2Vzcywgb3IgYnlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdDo1NjogICAgZmlsdGVyaW5nIG91dCBhbGllbiBwYWdlcyB1c2luZyBgYC9wcm9jL2twYWdlY2dyb3VwYGAgaW4gY2FzZSB0aGUgd29ya2xvYWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdC01Ny0gICAgaXMgcGxhY2VkIGluIGEgbWVtb3J5IGNncm91cC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3Q9NzE9U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdDo3MjpgYC9wcm9jL3BpZC9wYWdlbWFwYGAsIGBgL3Byb2Mva3BhZ2VmbGFnc2BgLCBhbmQgYGAvcHJvYy9rcGFnZWNncm91cGBgLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0LTczLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3Q9Njg9bnVtYmVyIG9mIHRpbWVzIGEgcGFnZSBpcyBtYXBwZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDItXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0OjEwMzogKiBgYC9wcm9jL2twYWdlY2dyb3VwYGAuICBUaGlzIGZpbGUgY29udGFpbnMgYSA2NC1iaXQgaW5vZGUgbnVtYmVyIG9mIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDQtICAgbWVtb3J5IGNncm91cCBlYWNoIHBhZ2UgaXMgY2hhcmdlZCB0bywgaW5kZXhlZCBieSBQRk4uIE9ubHkgYXZhaWxhYmxlIHdoZW5cbi0tXG5mcy9wcm9jL3BhZ2UuYz0yNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBrcGFnZWZsYWdzX3Byb2Nfb3BzID0ge1xuLS1cbmZzL3Byb2MvcGFnZS5jLTI2Ny0jaWZkZWYgQ09ORklHX01FTUNHXG5mcy9wcm9jL3BhZ2UuYzoyNjg6c3RhdGljIHNzaXplX3Qga3BhZ2VjZ3JvdXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmZzL3Byb2MvcGFnZS5jLTI2OS1cdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMjcyLX1cbmZzL3Byb2MvcGFnZS5jOjI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlY2dyb3VwX3Byb2Nfb3BzID0ge1xuZnMvcHJvYy9wYWdlLmMtMjc0LVx0LnByb2NfZmxhZ3NcdD0gUFJPQ19FTlRSWV9QRVJNQU5FTlQsXG5mcy9wcm9jL3BhZ2UuYy0yNzUtXHQucHJvY19sc2Vla1x0PSBtZW1fbHNlZWssXG5mcy9wcm9jL3BhZ2UuYzoyNzY6XHQucHJvY19yZWFkXHQ9IGtwYWdlY2dyb3VwX3JlYWQsXG5mcy9wcm9jL3BhZ2UuYy0yNzctfTtcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yODA9c3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZClcbi0tXG5mcy9wcm9jL3BhZ2UuYy0yODQtI2lmZGVmIENPTkZJR19NRU1DR1xuZnMvcHJvYy9wYWdlLmM6Mjg1Olx0cHJvY19jcmVhdGUoXCYjMzQ7a3BhZ2VjZ3JvdXBcJiMzNDssIFNfSVJVU1IsIE5VTEwsIFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcbmZzL3Byb2MvcGFnZS5jLTI4Ni0jZW5kaWZcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtNjctI2RlZmluZSBQUk9DX0tQQUdFQ09VTlRcdFx0XCYjMzQ7L3Byb2Mva3BhZ2Vjb3VudFwmIzM0O1xudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY4OiNkZWZpbmUgUFJPQ19LUEFHRUNHUk9VUFx0XCYjMzQ7L3Byb2Mva3BhZ2VjZ3JvdXBcJiMzNDtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02OS1cbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmM9MTg2PXN0YXRpYyBpbnRcdFx0a3BhZ2Vjb3VudF9mZCA9IC0xO1xudG9vbHMvbW0vcGFnZS10eXBlcy5jOjE4NzpzdGF0aWMgaW50XHRcdGtwYWdlY2dyb3VwX2ZkID0gLTE7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTg4LXN0YXRpYyBpbnRcdFx0cGFnZV9pZGxlX2ZkID0gLTE7XG4tLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTI3NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBrcGFnZWZsYWdzX3JlYWQodWludDY0X3QgKmJ1Zixcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjgxLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjI4MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrcGFnZWNncm91cF9yZWFkKHVpbnQ2NF90ICpidWYsXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjgzLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg1LXtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoyODY6XHRpZiAoa3BhZ2VjZ3JvdXBfZmQgXHUwMDNjIDApXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg3LVx0XHRyZXR1cm4gcGFnZXM7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg4LVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjI4OTpcdHJldHVybiBkb191NjRfcmVhZChrcGFnZWNncm91cF9mZCwgb3B0X2twYWdlZmxhZ3MsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0yOTAtfVxuLS1cbnRvb2xzL21tL3BhZ2UtdHlwZXMuYz02NjU9c3RhdGljIHZvaWQgd2Fsa19wZm4odW5zaWduZWQgbG9uZyB2b2Zmc2V0LFxuLS1cbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02NzctXHQvKlxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY3ODpcdCAqIGtwYWdlY2dyb3VwX3JlYWQoKSByZWFkcyBvbmx5IGlmIGtwYWdlY2dyb3VwIHdlcmUgb3BlbmVkLCBidXRcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2Nzk6XHQgKiAvcHJvYy9rcGFnZWNncm91cCBtaWdodCBldmVuIG5vdCBleGlzdCwgc28gaXQmIzM5O3MgYmV0dGVyIHRvIGZpbGxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02ODAtXHQgKiB0aGVtIHdpdGggemVyb3MgaGVyZS5cbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtNjkyLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY5MzpcdFx0aWYgKGtwYWdlY2dyb3VwX3JlYWQoY2dpLCBpbmRleCwgcGFnZXMpICE9IHBhZ2VzKVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY5NDpcdFx0XHRmYXRhbChcJiMzNDtrcGFnZWNncm91cCByZXR1cm5lZCBmZXdlciBwYWdlcyB0aGFuIGV4cGVjdGVkXCYjMzQ7KTtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02OTUtXG4tLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTk3Mj1zdGF0aWMgdm9pZCB3YWxrX2ZpbGVfcmFuZ2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLFxuLS1cbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0xMDMxLVx0XHRcdFx0Y29udGludWU7XG50b29scy9tbS9wYWdlLXR5cGVzLmM6MTAzMjpcdFx0XHRpZiAoIWtwYWdlY2dyb3VwX3JlYWQoXHUwMDI2Y2dyb3VwLCBwZm4sIDEpKVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjEwMzM6XHRcdFx0XHRmYXRhbChcJiMzNDtrcGFnZWNncm91cF9yZWFkIGZhaWxlZFwmIzM0Oyk7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTAzNC1cdFx0XHRpZiAoIWtwYWdlY291bnRfcmVhZChcdTAwMjZtYXBjbnQsIHBmbiwgMSkpXG4tLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTEyNjk9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTM0MS1cdGlmIChvcHRfY2dyb3VwIHx8IG9wdF9saXN0X2Nncm91cClcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMzQyOlx0XHRrcGFnZWNncm91cF9mZCA9IGNoZWNrZWRfb3BlbihQUk9DX0tQQUdFQ0dST1VQLCBPX1JET05MWSk7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTM0My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM9MTY4PXN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIxNC0vKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jOjIxNTogKiBUaGUgdGVzdCByZWFkcyB0aGUgZW50aXJlIC9wcm9jL2twYWdlY2dyb3VwLiBJZiB0aGUgb3BlcmF0aW9uIHdlbnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTYtICogc3VjY2Vzc2Z1bGx5IChhbmQgdGhlIGtlcm5lbCBkaWRuJiMzOTt0IHBhbmljKSwgdGhlIHRlc3QgaXMgdHJlYXRlZCBhcyBwYXNzZWQuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjE3LSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jOjIxODpzdGF0aWMgaW50IHRlc3Rfa21lbV9wcm9jX2twYWdlY2dyb3VwKGNvbnN0IGNoYXIgKnJvb3QpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjE5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjI0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jOjIyNTpcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9rcGFnZWNncm91cFwmIzM0OywgT19SRE9OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIyNi1cdGlmIChmZCBcdTAwM2MgMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM9NDEwPXN0cnVjdCBrbWVtX3Rlc3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy00MTUtXHRUKHRlc3Rfa21lbV9tZW1jZ19kZWxldGlvbiksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM6NDE2Olx0VCh0ZXN0X2ttZW1fcHJvY19rcGFnZWNncm91cCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtNDE3LVx0VCh0ZXN0X2ttZW1fa2VybmVsX3N0YWNrcyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAobW0vbWVtY29udHJvbC5jKSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBtZW1vcnkgY29udHJvbCwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGZpbGUgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gVGhlIGZvY3VzIHNlZW1zIHRvIGJlIGFyb3VuZCBgcGFnZV9jZ3JvdXBfaW5vYC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIGluIHRoaXMgYXJlYSBoYW5kbGVzIHRoZSBhc3NvY2lhdGlvbiBvZiBwYWdlcyB3aXRoIGNncm91cHMsIGFuZCBsaWtlbHksIGhvdyBpbm9kZXMgcGxheSBhIHJvbGUgaW4gdGhhdCBtYW5hZ2VtZW50LiBJJiMzOTttIGd1ZXNzaW5nIGBwYWdlX2Nncm91cF9pbm9gIHJlcHJlc2VudHMgdGhlIGlub2RlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIGNncm91cCB0aGF0IG93bnMgYSBzcGVjaWZpYyBwYWdlLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTtsbCBiZSBkaWdnaW5nIGludG8gaG93IHRoZSBrZXJuZWwgdHJhY2tzIG1lbW9yeSB1c2FnZSBhdCBhIGNncm91cCBsZXZlbCwgYW5kIGhvdyB0aGF0IGlzIGxpbmtlZCBiYWNrIHRvIHBoeXNpY2FsIHBhZ2VzIGluIHRoZSBzeXN0ZW0uIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byByZXByZXNlbnQgY2dyb3VwcywgdGhlaXIgaGllcmFyY2hpZXMsIGFuZCB0aGUgbWVtb3J5IGFjY291bnRpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGludGVyYWN0IHdpdGggY2dyb3VwIG1lbWJlcnNoaXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBjb250ZW50aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBwYXJ0aWN1bGFyIHZhcmlhYmxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ1Olx0XG4gMzQ2Olx0LyoqXG4gMzQ3Olx0ICogcGFnZV9jZ3JvdXBfaW5vIC0gcmV0dXJuIGlub2RlIG51bWJlciBvZiB0aGUgbWVtY2cgYSBwYWdlIGlzIGNoYXJnZWQgdG9cbiAzNDg6XHQgKiBAcGFnZTogdGhlIHBhZ2VcbiAzNDk6XHQgKlxuIDM1MDpcdCAqIExvb2sgdXAgdGhlIGNsb3Nlc3Qgb25saW5lIGFuY2VzdG9yIG9mIHRoZSBtZW1vcnkgY2dyb3VwIEBwYWdlIGlzIGNoYXJnZWQgdG9cbiAzNTE6XHQgKiBhbmQgcmV0dXJuIGl0cyBpbm9kZSBudW1iZXIgb3IgMCBpZiBAcGFnZSBpcyBub3QgY2hhcmdlZCB0byBhbnkgY2dyb3VwLiBJdFxuIDM1MjpcdCAqIGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBAcGFnZS5cbiAzNTM6XHQgKlxuIDM1NDpcdCAqIE5vdGUsIHRoaXMgZnVuY3Rpb24gaXMgaW5oZXJlbnRseSByYWN5LCBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcHJldmVudFxuIDM1NTpcdCAqIHRoZSBjZ3JvdXAgaW5vZGUgZnJvbSBnZXR0aW5nIHRvcm4gZG93biBhbmQgcG90ZW50aWFsbHkgcmVhbGxvY2F0ZWQgYSBtb21lbnRcbiAzNTY6XHQgKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxuIDM1NzpcdCAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cbiAzNTg6XHQgKi9cbiAzNTk6XHRpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4gMzYwOlx0e1xuIDM2MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiAzNjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiAzNjM6XHRcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcbiAzNjQ6XHRcbiAzNjU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzNjY6XHRcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXG4gMzY3Olx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gMzY4Olx0XHQvKlxuIDM2OTpcdFx0ICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZ1xuIDM3MDpcdFx0ICogbWVtY2dfZGF0YSwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGUgYWNxdWlyZSBsb2FkIHBhaXJzIHdpdGggdGhlXG4gMzcxOlx0XHQgKiByZWxlYXNlIHN0b3JlIGluIGZvbGlvX3JlZl91bmZyZWV6ZSgpIGFuZCBtYWtlcyB0aGF0IG1ldGFkYXRhXG4gMzcyOlx0XHQgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLlxuIDM3MzpcdFx0ICovXG4gMzc0Olx0XHRpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSlcbiAzNzU6XHRcdFx0Z290byB1bmxvY2s7XG4gMzc2Olx0XG4gMzc3Olx0XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbiAzNzg6XHRcbiAzNzk6XHRcdHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIWNzc19pc19vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbiAzODA6XHRcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gMzgxOlx0XHRpZiAobWVtY2cpXG4gMzgyOlx0XHRcdGlubyA9IGNncm91cF9pbm8obWVtY2ctXHUwMDNlY3NzLmNncm91cCk7XG4gMzgzOlx0dW5sb2NrOlxuIDM4NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzg1Olx0XHRyZXR1cm4gaW5vO1xuIDM4NjpcdH1cbiAzODc6XHRFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xuIDM4ODpcdFxuIDM4OTpcdC8qIFN1YnNldCBvZiBub2RlX3N0YXRfaXRlbSBmb3IgbWVtY2cgc3RhdHMgKi9cbiAzOTA6XHRzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuIDM5MTpcdFx0TlJfSU5BQ1RJVkVfQU5PTixcbiAzOTI6XHRcdE5SX0FDVElWRV9BTk9OLFxuIDM5MzpcdFx0TlJfSU5BQ1RJVkVfRklMRSxcbiAzOTQ6XHRcdE5SX0FDVElWRV9GSUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBUaGUgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBidXJpZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHBhZ2VfY2dyb3VwX2lub2AsIGdldHMgY2FsbGVkIGRpcmVjdGx5IHdoZW4gcmVhZGluZyBgL3Byb2Mva3BhZ2VjZ3JvdXBgIHZpYSBwcm9jZnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBQbHVzLCBpdCYjMzk7cyBhbHNvIHVzZWQgaW4gYGh3cG9pc29uLWluamVjdC5jYC4gVGhhdCBnaXZlcyBpdCBzb21lIHNvbGlkIHByZXNlbmNlLiBTbywgeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCk5leHQsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIE1NIGxvZ2ljLCBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgYW5kIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZm9saW8gc3BsaXRzIGFuZCBtZW1jZyBtZXRhZGF0YSByZWFkcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgUkNVIHJlYWQgbG9ja3MsIG1lbW9yeSBvcmRlcmluZywgYW5kIHVuZnJlZXplIG9wZXJhdGlvbnMuIFRoaXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZpbmRpbmcgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5LXJlbGF0ZWQgYnVncy4gR2l2ZW4gdGhhdCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoeSBvZiBzb21lIGZ1enppbmcgZWZmb3J0cy4KCkZpbmFsbHksIHdoYXQgY29uZmlndXJhdGlvbnMgZG8gd2UgbmVlZCB0byB0cmlnZ2VyIHRoaXM/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIGBNRU1DR2AgaXMgZW5hYmxlZCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBkb25lIGluIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYC4gV2UmIzM5O2xsIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgYE1FTUNHYCBhbmQgYC9wcm9jL2twYWdlY2dyb3VwYCBpbiB0aG9zZSBmaWxlcyB0byBlc3RhYmxpc2ggdGhlIG5lZWRlZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYC9wcm9jL3BhZ2UuY2AgZmlsZSBpcyBjb25maWd1cmVkLiBUbyBkbyB0aGlzIHByb3Blcmx5LCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uIGFuZCBwYXJhbWV0ZXJzLgoKRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGl0JiMzOTtzIGdvdCBpdHMgb3duIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBgZnMvcHJvY2AgZGlyZWN0b3J5IGl0c2VsZi4gU28sIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUgb3IgYGZzL3Byb2MvTWFrZWZpbGVgIOKAkyBkZXBlbmRpbmcgb24gaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBpdCDigJMgZm9yIGFueSBjbHVlcyByZWdhcmRpbmcgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9MzY9cHJvYy0kKENPTkZJR19QUklOVEspXHQmIzQzOz0ga21zZy5vXG5mcy9wcm9jL01ha2VmaWxlOjM3OnByb2MtJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpXHQmIzQzOz0gcGFnZS5vXG5mcy9wcm9jL01ha2VmaWxlLTM4LXByb2MtJChDT05GSUdfQk9PVF9DT05GSUcpXHQmIzQzOz0gYm9vdGNvbmZpZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgcGFnZSBtb25pdG9yaW5nLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzIEkgc2hvdWxkIGZvY3VzIG9uLiBUaGF0IHRyaWdnZXJzIGEgbWVudGFsIG5vdGUgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAsIHBhcnRpY3VsYXJseSBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLCByaWdodCB3aXRoaW4gdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGZlYXR1cmUgd291bGQgYmUgdGhlIHJpZ2h0IGxvY2F0aW9uIHRvIHN0YXJ0IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnPTgzPWNvbmZpZyBTWVNDVExcbi0tXG5mcy9wcm9jL0tjb25maWctMTAwLVxuZnMvcHJvYy9LY29uZmlnOjEwMTpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvS2NvbmZpZy0xMDItIFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBrcGFnZWNncm91cF9yZWFkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGtwYWdlY2dyb3VwX3JlYWRgIGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgYHBhZ2VfY2dyb3VwX2lub2AuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCBga3BhZ2VfcmVhZGAgYXMgaXQgc2VlbXMgcmVsYXRlZC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIHZlcmlmeSB0aGV5IGFyZSBub3QgYmVpbmcgaW5saW5lZC4KCk9rYXksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAgaXMgaW5saW5lZCwgc28gSSBjYW4gc2FmZWx5IG5hcnJvdyBteSBmb2N1cyBkb3duIHRvIGBwYWdlX2Nncm91cF9pbm9gIGFuZCBga3BhZ2VjZ3JvdXBfcmVhZGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgcGFnZV9jZ3JvdXBfaW5vYC4KClJpZ2h0LCBsZXQmIzM5O3MgZXhhbWluZSB3aGVyZSBgcGFnZV9jZ3JvdXBfaW5vYCBpcyBhY3R1YWxseSBjYWxsZWQuIEl0IGFwcGVhcnMgaW4gYGZzL3Byb2MvcGFnZS5jYCB2aWEgYGtwYWdlX3JlYWRgIGFuZCBga3BhZ2VjZ3JvdXBfcmVhZGAsIGFuZCBpbnRlcmVzdGluZ2x5LCBgbW0vaHdwb2lzb24taW5qZWN0LmNgIGFsc28gY2FsbHMgaXQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZnMgaW5qZWN0aW9uIG1lY2hhbmlzbS4gVGhhdCYjMzk7cyBhIGdvb2QgaGVhZHMgdXA7IEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKU28sIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnk6IGBwYWdlX2Nncm91cF9pbm9gIGlzIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gYGtwYWdlY2dyb3VwX3JlYWRgIGluIGBmcy9wcm9jL3BhZ2UuY2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gcHJvY2ZzIHRoYXQgdWx0aW1hdGVseSBjYWxscyBga3BhZ2VfcmVhZGAsIHdoaWNoIHRoZW4gY2FsbHMgYHBhZ2VfY2dyb3VwX2lub2AuCgpOb3cgbGV0JiMzOTtzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IHdvcmtpbmcgYXNzdW1wdGlvbiBpcyB0aGF0IEkmIzM5O2xsIG5lZWQgYE1FTUNHYCwgYW5kIHRoZW4gSSBuZWVkIHRvIGNoZWNrIGBQUk9DX1BBR0VfTU9OSVRPUmAsIGFuZCBwb3NzaWJseSBgUFJPQ19GU2AsIGJ1dCBgUFJPQ19QQUdFX01PTklUT1JgIHR5cGljYWxseSBkZXBlbmRzIG9uIGBQUk9DX0ZTYCBhbmQgYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYC4gSSBuZWVkIHRvIGxvb2sgaW50byBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgYW55IHN1cnJvdW5kaW5nIGNvbnRleHQuIEkmIzM5O2xsIGNoZWNrIGFyb3VuZCBgY29uZmlnIE1FTUNHYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBpbnRvIGBmcy9wcm9jL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBhcm91bmQgbGluZSAxMDAuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBwcm9jIGZpbGVzeXN0ZW0gaXMgY29uZmlndXJlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGltcG9ydGFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIG9yIG1heWJlIGV2ZW4gYW4gb3B0aW9uIEkmIzM5O3ZlIG92ZXJsb29rZWQuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBjb25maWd1cmF0aW9uIGtub2JzIGFyZSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFx0ICBvcHRpb24gd2lsbCBlbmxhcmdlIHRoZSBrZXJuZWwgYnkgYXQgbGVhc3QgOCBLQi5cbiAgOTY6XHRcbiAgOTc6XHRcdCAgQXMgaXQgaXMgZ2VuZXJhbGx5IGEgZ29vZCB0aGluZywgeW91IHNob3VsZCBzYXkgWSBoZXJlIHVubGVzc1xuICA5ODpcdFx0ICBidWlsZGluZyBhIGtlcm5lbCBmb3IgaW5zdGFsbC9yZXNjdWUgZGlza3Mgb3IgeW91ciBzeXN0ZW0gaXMgdmVyeVxuICA5OTpcdFx0ICBsaW1pdGVkIGluIG1lbW9yeS5cbiAxMDA6XHRcbiAxMDE6XHRjb25maWcgUFJPQ19QQUdFX01PTklUT1JcbiAxMDI6XHQgXHRkZWZhdWx0IHlcbiAxMDM6XHRcdGRlcGVuZHMgb24gUFJPQ19GUyBcdTAwMjZcdTAwMjYgTU1VXG4gMTA0Olx0XHRib29sIFwmIzM0O0VuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmdcJiMzNDsgaWYgRVhQRVJUXG4gMTA1Olx0IFx0aGVscFxuIDEwNjpcdFx0ICBWYXJpb3VzIC9wcm9jIGZpbGVzIGV4aXN0IHRvIG1vbml0b3IgcHJvY2VzcyBtZW1vcnkgdXRpbGl6YXRpb246XG4gMTA3Olx0XHQgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLFxuIDEwODpcdFx0ICAvcHJvYy9rcGFnZWNvdW50LCBhbmQgL3Byb2Mva3BhZ2VmbGFncy4gRGlzYWJsaW5nIHRoZXNlXG4gMTA5Olx0XHQgIGludGVyZmFjZXMgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBhcHByb3hpbWF0ZWx5IDRrYi5cbiAxMTA6XHRcbiAxMTE6XHRjb25maWcgUFJPQ19DSElMRFJFTlxuIDExMjpcdFx0Ym9vbCBcJiMzNDtJbmNsdWRlIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS90YXNrL1x1MDAzY3RpZFx1MDAzZS9jaGlsZHJlbiBmaWxlXCYjMzQ7XG4gMTEzOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAxMTQ6XHRcdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1OAoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBJJiMzOTt2ZSBnb3QgdGhpcy4gVGhlIHNpdHVhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQuIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gdHJ1ZSwgYW5kIEkgY29uY3VyLiBUaGlzIHBhdGNoIHRhcmdldHMgdGhlIGBwYWdlX2Nncm91cF9pbm8oKWAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCYjMzk7cyBpbXBsZW1lbnRpbmcgYW4gYGFjcXVpcmVgIG1lbW9yeSBvcmRlcmluZyBkdXJpbmcgYSByZWFkIG9mIHRoZSBmb2xpbyByZWZjb3VudCwgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgLiBUaGlzIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIG1ldGFkYXRhIHZpc2liaWxpdHksIHNwZWNpZmljYWxseSB0aGluZ3MgbGlrZSBgbWVtY2dfZGF0YWAsIGR1cmluZyB0aGUgZm9saW8gc3BsaXR0aW5nIHByb2Nlc3MuCgpUaGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyAqcmVhY2hhYmxlKiB2aWEgYC9wcm9jL2twYWdlY2dyb3VwYC4gYC9wcm9jL2twYWdlY2dyb3VwYCBpcyBrbm93biB0byBleHBvc2Uga2VybmVsIGludGVybmFscy4gVGhhdCBhY2Nlc3Mgcm91dGUgaXMgdGhlIHBlcmZlY3QgdmVjdG9yIGZvciBleHBvc2luZyBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgd2hpY2ggYXJlIHRoZSBleGFjdCBraW5kIG9mIGJ1Z3MgZnV6emluZyBpcyBkZXNpZ25lZCB0byBmaW5kLgoKV2UmIzM5O3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBNRU1DRyBhbmQgUFJPQ19QQUdFX01PTklUT1IuIFRoYXQmIzM5O3MgZXNzZW50aWFsIGZvciBnZXR0aW5nIHRoaXMgY29kZSBwYXRoIHRvIGV2ZW4gZXhlY3V0ZS4gQWxzbywgZm9jdXNpbmcgb24gYHBhZ2VfY2dyb3VwX2lub2AgYW5kIGBrcGFnZWNncm91cF9yZWFkYCBpcyBzcG90LW9uLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuIFRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9jZ3JvdXBfaW5vJiMzNDssCiAgICAmIzM0O2twYWdlY2dyb3VwX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZV9jZ3JvdXBfaW5vKCkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobW0vbWVtY29udHJvbC5jKSB0byBhZGQgYWNxdWlyZSBtZW1vcnkgb3JkZXJpbmcgKGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKCkpIHdoZW4gY2hlY2tpbmcgZm9saW8gcmVmY291bnRzLCBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZm9saW8gc3BsaXRzIHdoZW4gYWNjZXNzaW5nIG1lbWNnIG1ldGFkYXRhLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL2twYWdlY2dyb3VwIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VfY2dyb3VwX2lubyYjMzQ7LAogICAgJiMzNDtrcGFnZWNncm91cF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2VfY2dyb3VwX2lubygpIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbWNvbnRyb2wuYykgdG8gYWRkIGFjcXVpcmUgbWVtb3J5IG9yZGVyaW5nIChmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpKSB3aGVuIGNoZWNraW5nIGZvbGlvIHJlZmNvdW50cywgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZvbGlvIHNwbGl0cyB3aGVuIGFjY2Vzc2luZyBtZW1jZyBtZXRhZGF0YS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9rcGFnZWNncm91cCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgYmFycmllci9zeW5jaHJvbml6YXRpb24gY2hlY2sgKGBmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpYCkgaW4gYHBhZ2VfY2dyb3VwX2lubygpYCB0byBlbnN1cmUgbWV0YWRhdGEgaXMgdmlzaWJsZSBhZnRlciBmb2xpbyBzcGxpdHRpbmcgYW5kIHByZXZlbnQgcmFjeSBhY2Nlc3Mgd2hlbiBmb2xpb3MgYXJlIGZyb3plbi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlubyA9IDBgLCBgZm9saW9gLCBgbWVtY2dgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBvcGVyYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaAppbmRleCA5ZjVjNzVkMDZmNzY4Li40MDEzMzAzMDdiYzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oCkBAIC0xMDcsNiAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gcGFnZV9yZWZfY291bnQoJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnRfYWNxdWlyZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoJmFtcDtmb2xpby0mZ3Q7X3JlZmNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzU4LDE3ICYjNDM7MzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICovCiBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAkvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqLwotCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2socGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJLyoKJiM0MzsJICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZwomIzQzOwkgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGUKJiM0MzsJICogcmVsZWFzZSBzdG9yZSBpbiBmb2xpb19yZWZfdW5mcmVlemUoKSBhbmQgbWFrZXMgdGhhdCBtZXRhZGF0YQomIzQzOwkgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiAKIAl3aGlsZSAobWVtY2cgJmFtcDsmYW1wOyAhY3NzX2lzX29ubGluZSgmYW1wO21lbWNnLSZndDtjc3MpKQogCQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKIAlpZiAobWVtY2cpCiAJCWlubyA9IGNncm91cF9pbm8obWVtY2ctJmd0O2Nzcy5jZ3JvdXApOwomIzQzO3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gaW5vOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIG1pZ2h0IGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBzY3J1dGluaXplIGhvdyB0aGV5IGludGVyYWN0IHdpdGggbWVtb3J5LgoKRmlyc3QsIEkgc2VlIGEgbmV3IGlubGluZSBoZWxwZXIsIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAsIGFkZGVkIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhgLiBJdCYjMzk7cyBhIHNpbXBsZSBhdG9taWMgcmVhZCwgbGlrZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBOb3RoaW5nIGluaGVyZW50bHkgY29uY2VybmluZyB0aGVyZSBvbiBpdHMgb3duLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKndoeSogaXQmIzM5O3MgYmVpbmcgdXNlZC4KClRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb24gdG8gYHBhZ2VfY2dyb3VwX2lub2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gaW50aW1hdGVseS4gVGhlIGFkZGl0aW9uIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgJiMzNDthZnRlci1zcGxpdCBmb2xpb3MmIzM0OyBhbmQgZW5zdXJpbmcgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZyBgbWVtY2dfZGF0YWAsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBhY2Nlc3NlZC4KClRoZSBrZXkgbGluZSB0aGF0IGdyYWJzIG15IGF0dGVudGlvbiBpcyBgaWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpYC4gVGhpcyBhcHBlYXJzIHRvIGJlIGEgY2hlY2sgZm9yIHRoZSBmb2xpbyYjMzk7cyByZWZlcmVuY2UgY291bnQuIE15IHN1c3BpY2lvbiBpcyB0aGF0IHRoaXMgaXMgYSByYWNlLWNvbmRpdGlvbiBtaXRpZ2F0aW9uLCBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gbWlnaHQgZXhpdCBpZiB0aGUgZm9saW8gaXNuJiMzOTt0IGluIGEgdmFsaWQgc3RhdGUuCgpUaGUgY29tbWVudCBhYm91dCB0aGUgJiMzNDthY3F1aXJlIGxvYWQmIzM0OyBhbmQgJiMzNDtyZWxlYXNlIHN0b3JlJiMzNDsgaW4gYGZvbGlvX3JlZl91bmZyZWV6ZSgpYCBzdWdnZXN0cyB0aGlzIGFjcXVpcmUgaXMgcGFydCBvZiBhIHN5bmNocm9uaXphdGlvbiBzdHJhdGVneSB0byBtYWtlIG1lbWNnLXJlbGF0ZWQgbWV0YWRhdGEgdmlzaWJsZS4gVGhlIGxvZ2ljIGZsb3cgaXMgaW1wb3J0YW50IGhlcmU6IGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXNuJiMzOTt0IGFjcXVpcmVkLCB0aGVuIGl0IGdvZXMgdG8gdW5sb2NrLCB3aGljaCBpcyBhIHJldHVybi4KClRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBsb29rIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYHBhZ2VfY2dyb3VwX2lub2AuIEhvdyBpcyBpdCBjYWxsZWQ/IFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGluIHZhcmlvdXMgc2NlbmFyaW9zPyBJJiMzOTtsbCBwcm9iYWJseSBncmFiIGBncmVwcGVyYCBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0LiBBIGRpcmVjdCBmaWxlIHJlYWQgbWF5IGFsc28gYmUgZnJ1aXRmdWwuIFVuZGVyc3RhbmRpbmcgdGhvc2UgaW50ZXJhY3Rpb25zIGlzIGNydWNpYWwgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IGR1cmluZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBtYXkgZXhpc3QgZ2l2ZW4gdGhpcyBsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2Nncm91cF9pbm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9wYWdlLmM9NjE9c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL3BhZ2UuYy05NS1cdFx0XHRjYXNlIEtQQUdFX0NHUk9VUDpcbmZzL3Byb2MvcGFnZS5jOjk2Olx0XHRcdFx0aW5mbyA9IHBhZ2VfY2dyb3VwX2lubyhwYWdlKTtcbmZzL3Byb2MvcGFnZS5jLTk3LVx0XHRcdFx0YnJlYWs7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg4OTppbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODkwLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4Njc9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3Mi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NzM6c3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODc0LXtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaD0yNzQ9VFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yODQtXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6Mjg1Olx0XHRfX2ZpZWxkKHU2NCxcdFx0cGFnZV9jZ3JvdXBfaW5vKVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMjg2LVx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdG1lbWNnX2lkKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI5OS1cdFx0cmN1X3JlYWRfbG9jaygpO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzAwOlx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXApO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzAxLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDMtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDozMDQ6XHRUUF9wcmludGsoXCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcJiMzNDssXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDUtXHRcdF9fZW50cnktXHUwMDNlbmFtZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDktXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lubyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oOjMxMDpcdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm9cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMxMS1cdClcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz02OT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl90YXNrKHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTczLVxubW0vaHdwb2lzb24taW5qZWN0LmM6NzQ6XHRpZiAocGFnZV9jZ3JvdXBfaW5vKHApICE9IGh3cG9pc29uX2ZpbHRlcl9tZW1jZylcbm1tL2h3cG9pc29uLWluamVjdC5jLTc1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDYtLyoqXG5tbS9tZW1jb250cm9sLmM6MzQ3OiAqIHBhZ2VfY2dyb3VwX2lubyAtIHJldHVybiBpbm9kZSBudW1iZXIgb2YgdGhlIG1lbWNnIGEgcGFnZSBpcyBjaGFyZ2VkIHRvXG5tbS9tZW1jb250cm9sLmMtMzQ4LSAqIEBwYWdlOiB0aGUgcGFnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTUtICogdGhlIGNncm91cCBpbm9kZSBmcm9tIGdldHRpbmcgdG9ybiBkb3duIGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlZCBhIG1vbWVudFxubW0vbWVtY29udHJvbC5jOjM1NjogKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxubW0vbWVtY29udHJvbC5jLTM1Ny0gKiBkbyBub3QgY2FyZSAoc3VjaCBhcyBwcm9jZnMgaW50ZXJmYWNlcykuXG5tbS9tZW1jb250cm9sLmMtMzU4LSAqL1xubW0vbWVtY29udHJvbC5jOjM1OTppbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1jb250cm9sLmMtMzYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzg2LX1cbm1tL21lbWNvbnRyb2wuYzozODc6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jZ3JvdXBfaW5vKTtcbm1tL21lbWNvbnRyb2wuYy0zODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzgKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogOTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEEgQ29uY3VycmVuY3kgRml4LCBOb3QgYW4gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgcGFnZV9jZ3JvdXBfaW5vYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYC9wcm9jL2twYWdlY2dyb3VwYCBhbmQgYGh3cG9pc29uX2ZpbHRlcl90YXNrYC4gVGhlIGNvcmUgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLCB3aGVyZSB0aGUgcmVmY291bnQgbWlnaHQgYmUgemVybyAoZnJvemVuKSBhbmQgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgKGBtZW1jZ19kYXRhYCkgY291bGQgYmUgdW5pbml0aWFsaXplZC4KClRoaXMgcGF0Y2ggYWRkcyBhbiBhY3F1aXJlIGxvYWQgb24gYF9yZWZjb3VudGAgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKWAuIElmIGl0JiMzOTtzIHplcm8sIHdlIHJldHVybiBgMGAgZm9yIGBpbm9gLCBlZmZlY3RpdmVseSBza2lwcGluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuIEFoYSEgSXQmIzM5O3MgKnByZXZlbnRpbmcqIHRoZSByZWFkLCBub3QgaW50cm9kdWNpbmcgaXQuIEl0JiMzOTtzIGEgc3luY2hyb25pemF0aW9uL2NvbmN1cnJlbmN5IGZpeCDigJMgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIHJlbGVhc2Ugc3RvcmUgb2YgYGZvbGlvX3JlZl91bmZyZWV6ZSgpYC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgaXRzZWxmOgoKKiAgIGB1bnNpZ25lZCBsb25nIGlubyA9IDA7YCDigJMgSW5pdGlhbGl6ZWQgdG8gemVyby4KKiAgIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtgIOKAkyBUaGlzIGdldHMgYSB2YWxpZCBmb2xpbyBwb2ludGVyLgoqICAgYGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKSBnb3RvIHVubG9jaztgIOKAkyBSZXR1cm5zIGBpbm9gICh3aGljaCBpcyAwKSBpZiB0aGUgZm9saW8gaXMgZnJvemVuLCBza2lwcGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuCiogICBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmVgIHJlYWRzIGAmYW1wO2ZvbGlvLSZndDtfcmVmY291bnRgIGF0b21pY2FsbHksIHdpdGggYWNxdWlyZSBzZW1hbnRpY3MuCgpTbywgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIGFuZCBub3RoaW5nIGlzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSXQgYXBwZWFycyB0aGF0IGBmb2xpb19tZW1jZ19jaGVjayhmb2xpbylgIGlzIG9ubHkgY2FsbGVkIGFmdGVyIHRoZSByZWZjb3VudCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlcmVmb3JlIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcuLi4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIEtNU0FOIGd1aWRlbGluZXMuIFdlIG5lZWQgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5KiBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aGVyZSB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgbGF0ZXIuIE9yLCBpZiBpdCBjaGFuZ2VzIGJvdW5kcy9sZW5ndGhzLgoKVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgYSBtZW1vcnkgb3JkZXJpbmcgZml4LCB1c2luZyBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWAgdG8gZW5zdXJlIGEgZm9saW8gaXNuJiMzOTt0IGZyb3plbiBiZWZvcmUgYWNjZXNzaW5nIGl0cyBtZXRhZGF0YS4gQWxsIHZhcmlhYmxlcyBhcmUgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIG9yIHNraXBwZWQgaWYgbm90IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHZlcnkgc3RyYWlnaHRmb3J3YXJkLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHF1aWNrbHk6IGBpbm9gIGlzIHplcm87IGBmb2xpb2AgaXMgaW5pdGlhbGl6ZWQgYnkgYHBhZ2VfZm9saW8ocGFnZSlgOyBpZiBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pYCBpcyAwLCB3ZSBqdW1wIHRvIHVubG9jay4gSWYgbm90LCBpdCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYC4gRXZlcnl0aGluZyBpcyBjbGVhbiwgYW5kIHRoZSBpbnRlbnQgaXMgY2xlYXIuCgpBbHJpZ2h0LCB0aW1lIHRvIHJ1biB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBiYXJyaWVyL3N5bmNocm9uaXphdGlvbiBjaGVjayAoYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgKSBpbiBgcGFnZV9jZ3JvdXBfaW5vKClgIHRvIGVuc3VyZSBtZXRhZGF0YSBpcyB2aXNpYmxlIGFmdGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcHJldmVudCByYWN5IGFjY2VzcyB3aGVuIGZvbGlvcyBhcmUgZnJvemVuLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaW5vID0gMGAsIGBmb2xpb2AsIGBtZW1jZ2ApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MTkuNDM4MzIwMzk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NDIzMDAxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9jZ3JvdXBfaW5vXCIsXG4gICAgXCJrcGFnZWNncm91cF9yZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2VfY2dyb3VwX2lubygpIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbWNvbnRyb2wuYykgdG8gYWRkIGFjcXVpcmUgbWVtb3J5IG9yZGVyaW5nIChmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpKSB3aGVuIGNoZWNraW5nIGZvbGlvIHJlZmNvdW50cywgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZvbGlvIHNwbGl0cyB3aGVuIGFjY2Vzc2luZyBtZW1jZyBtZXRhZGF0YS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9rcGFnZWNncm91cCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MTkuNDM4MzI3Nzg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NDk0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTY6Mzg6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oIGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oXFxuaW5kZXggOWY1Yzc1ZDA2Zjc2OC4uNDAxMzMwMzA3YmM1ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcXG5AQCAtMTA3LDYgKzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIHBhZ2VfcmVmX2NvdW50KFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VfcmVmY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjI5NzFlNWUwZWNlMWYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTM1OCwxNyArMzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKi9cXG4gaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0dW5zaWduZWQgbG9uZyBpbm8gPSAwO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHQvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqL1xcbi1cXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKHBhZ2VfZm9saW8ocGFnZSkpO1xcbitcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdC8qXFxuK1xcdCAqIEFmdGVyLXNwbGl0IGZvbGlvcyByZW1haW4gZnJvemVuIHVudGlsIHRoZWlyIG1ldGFkYXRhLCBpbmNsdWRpbmdcXG4rXFx0ICogbWVtY2dfZGF0YSwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGUgYWNxdWlyZSBsb2FkIHBhaXJzIHdpdGggdGhlXFxuK1xcdCAqIHJlbGVhc2Ugc3RvcmUgaW4gZm9saW9fcmVmX3VuZnJlZXplKCkgYW5kIG1ha2VzIHRoYXQgbWV0YWRhdGFcXG4rXFx0ICogdmlzaWJsZSB0byB0aGlzIGNhbGxlci5cXG4rXFx0ICovXFxuK1xcdGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xcbiBcXG4gXFx0d2hpbGUgKG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfb25saW5lKFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSlcXG4gXFx0XFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuIFxcdGlmIChtZW1jZylcXG4gXFx0XFx0aW5vID0gY2dyb3VwX2lubyhtZW1jZy1cXHUwMDNlY3NzLmNncm91cCk7XFxuK3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBpbm87XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MjAuMDA1ODc2NzM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozOTI2MDM3MzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX2Nncm91cF9pbm9cIixcbiAgICBcImtwYWdlY2dyb3VwX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDNkODlmODgzNTRlYmU5NzdlZTUzZjVhZjRkOWI2YzM1MDEyYWEzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTY6Mzg6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbmluZGV4IDlmNWM3NWQwNmY3NjguLjQwMTMzMDMwN2JjNWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuQEAgLTEwNyw2ICsxMDcsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gcGFnZV9yZWZfY291bnQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2Zm9saW8tXHUwMDNlX3JlZmNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZm9saW9fcmVmX2NvdW50KHBhZ2VfZm9saW8ocGFnZSkpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzU4LDE3ICszNTgsMjkgQEAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICovXG4gaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHR1bnNpZ25lZCBsb25nIGlubyA9IDA7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqL1xuLVx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhwYWdlX2ZvbGlvKHBhZ2UpKTtcbitcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdC8qXG4rXHQgKiBBZnRlci1zcGxpdCBmb2xpb3MgcmVtYWluIGZyb3plbiB1bnRpbCB0aGVpciBtZXRhZGF0YSwgaW5jbHVkaW5nXG4rXHQgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGVcbitcdCAqIHJlbGVhc2Ugc3RvcmUgaW4gZm9saW9fcmVmX3VuZnJlZXplKCkgYW5kIG1ha2VzIHRoYXQgbWV0YWRhdGFcbitcdCAqIHZpc2libGUgdG8gdGhpcyBjYWxsZXIuXG4rXHQgKi9cbitcdGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuIFxuIFx0d2hpbGUgKG1lbWNnIFx1MDAyNlx1MDAyNiAhY3NzX2lzX29ubGluZShcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpKVxuIFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiBcdGlmIChtZW1jZylcbiBcdFx0aW5vID0gY2dyb3VwX2lubyhtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwKTtcbit1bmxvY2s6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBpbm87XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MjAuMDA1ODc3OTk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE5ODA0Mjg4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRGV0YWlsZWQgQnJlYWtkb3duKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZW0sIHNvIEknbGwgc3RhcnQgd2l0aCB0aGUgZGlmZiBpdHNlbGYuIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oYCDigJMgdGhhdCdzIHRoZSBhZGRpdGlvbiBvZiBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWAuIEludGVyZXN0aW5nLCBsaWtlbHkgc29tZSByZWZjb3VudGluZyBtYW5pcHVsYXRpb24gdG8gcHJldmVudCByYWNlcywgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZW4sIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcGFnZV9jZ3JvdXBfaW5vKClgIGZ1bmN0aW9uLlxuXG5UaGUgcGF0Y2ggYWx0ZXJzIGhvdyBgcGFnZV9jZ3JvdXBfaW5vKClgIHdvcmtzLiBJdCdzIG5vdyBjYWxsaW5nIGBmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7YCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBpbnRyb2R1Y2luZyBhIGNhbGwgdG8gYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKWAuIFRoaXMgaXMgY2xlYXJseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGl0J3MgdHJ5aW5nIHRvIHNvbHZlLiBJZiB0aGF0IGFjcXVpc2l0aW9uIGZhaWxzLCBpdCBqdW1wcyB0byBgdW5sb2NrYCwgYXZvaWRpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGBmb2xpb19tZW1jZ19jaGVjayhmb2xpbylgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoaXMgaXMgYWltZWQgYXQgbWl0aWdhdGluZyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBmb2xpbyBzcGxpdHMsIHByb2JhYmx5IHdoZW4gdGhlIG1ldGFkYXRhLCBzcGVjaWZpY2FsbHkgYG1lbWNnX2RhdGFgLCBpcyBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQncyBwcm90ZWN0aW5nIGFnYWluc3QgYW4gaW52YWxpZCBhY2Nlc3MgdG8gYG1lbWNnX2RhdGFgIGR1cmluZyBmb2xpbyBzcGxpdC9tZXJnZSBvcGVyYXRpb24uXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gc2VlIHdoZXJlIGBwYWdlX2Nncm91cF9pbm9gIGlzIHVzZWQuIEknbGwgcmVhY2ggZm9yIGBncmVwcGVyYCBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhlbHAgbWUgY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MzEuOTg2MzA5MDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTY5ODk5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jZ3JvdXBfaW5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy05NS1cXHRcXHRcXHRjYXNlIEtQQUdFX0NHUk9VUDpcXG5mcy9wcm9jL3BhZ2UuYzo5NjpcXHRcXHRcXHRcXHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTk3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4ODk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3Mi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODczOnN0YXRpYyBpbmxpbmUgaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NzQte1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg9Mjc0PVRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yODQtXFx0XFx0X19maWVsZCh1NjQsXFx0XFx0Y2dyb3VwX2lubylcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDoyODU6XFx0XFx0X19maWVsZCh1NjQsXFx0XFx0cGFnZV9jZ3JvdXBfaW5vKVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI4Ni1cXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcXHRtZW1jZ19pZClcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI5OS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzAwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVxcdTAwM2Vjc3MuY2dyb3VwKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDEtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDMtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzA0OlxcdFRQX3ByaW50ayhcXFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcXFwiLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMwNS1cXHRcXHRfX2VudHJ5LVxcdTAwM2VuYW1lLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA5LVxcdFxcdF9fZW50cnktXFx1MDAzZWNncm91cF9pbm8sXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzEwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lub1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMxMS1cXHQpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz02OT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl90YXNrKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzMtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6NzQ6XFx0aWYgKHBhZ2VfY2dyb3VwX2lubyhwKSAhPSBod3BvaXNvbl9maWx0ZXJfbWVtY2cpXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0Ni0vKipcXG5tbS9tZW1jb250cm9sLmM6MzQ3OiAqIHBhZ2VfY2dyb3VwX2lubyAtIHJldHVybiBpbm9kZSBudW1iZXIgb2YgdGhlIG1lbWNnIGEgcGFnZSBpcyBjaGFyZ2VkIHRvXFxubW0vbWVtY29udHJvbC5jLTM0OC0gKiBAcGFnZTogdGhlIHBhZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTUtICogdGhlIGNncm91cCBpbm9kZSBmcm9tIGdldHRpbmcgdG9ybiBkb3duIGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlZCBhIG1vbWVudFxcbm1tL21lbWNvbnRyb2wuYzozNTY6ICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXRcXG5tbS9tZW1jb250cm9sLmMtMzU3LSAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cXG5tbS9tZW1jb250cm9sLmMtMzU4LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbWNvbnRyb2wuYy0zNjAte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTM4Ni19XFxubW0vbWVtY29udHJvbC5jOjM4NzpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xcbm1tL21lbWNvbnRyb2wuYy0zODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjM0LjA0MzMwNTI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NDMxNzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKlRyYWNpbmcgdGhlIGBwYWdlX2Nncm91cF9pbm9gIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHBhZ2VfY2dyb3VwX2lub2AgaXMgYmVpbmcgaW52b2tlZC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBmcy9wcm9jL3BhZ2UuY2AgZmlsZSBzaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcHJvYyBlbnRyeS4gTXkgY3VycmVudCB0YXNrIGlzIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgc28gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBhdCBgZnMvcHJvYy9wYWdlLmM6OTZgLiBMb29rcyBsaWtlIGl0J3Mgd2l0aGluIGBrcGFnZV9yZWFkYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgYEtQQUdFX0NHUk9VUGAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGVudHJ5LiBFc3NlbnRpYWxseSwgSSdtIHJlYWRpbmcgYGZzL3Byb2MvcGFnZS5jYCB3aXRoIHRoZSBzcGVjaWZpYyBwdXJwb3NlIG9mIHRyYWNraW5nIGRvd24gaG93IGFuZCB3aGVyZSB0aGlzIGBwYWdlX2Nncm91cF9pbm9gIGNhbGwgaXMgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODozNi4xMTc2MjU3MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3BhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc20uaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tem9uZS5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX2ZzLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VxX2ZpbGUuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gIDIwOlxcdFxcbiAgMjE6XFx0I2RlZmluZSBLUE1TSVpFIHNpemVvZih1NjQpXFxuICAyMjpcXHQjZGVmaW5lIEtQTU1BU0sgKEtQTVNJWkUgLSAxKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRlbnVtIGtwYWdlX29wZXJhdGlvbiB7XFxuICAyNTpcXHRcXHRLUEFHRV9GTEFHUyxcXG4gIDI2OlxcdFxcdEtQQUdFX0NPVU5ULFxcbiAgMjc6XFx0XFx0S1BBR0VfQ0dST1VQLFxcbiAgMjg6XFx0fTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tYXhfZHVtcF9wZm4odm9pZClcXG4gIDMxOlxcdHtcXG4gIDMyOlxcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXFxuICAzMzpcXHRcXHQvKlxcbiAgMzQ6XFx0XFx0ICogVGhlIG1lbW1hcCBvZiBlYXJseSBzZWN0aW9ucyBpcyBjb21wbGV0ZWx5IHBvcHVsYXRlZCBhbmQgbWFya2VkXFxuICAzNTpcXHRcXHQgKiBvbmxpbmUgZXZlbiBpZiBtYXhfcGZuIGRvZXMgbm90IGZhbGwgb24gYSBzZWN0aW9uIGJvdW5kYXJ5IC1cXG4gIDM2OlxcdFxcdCAqIHBmbl90b19vbmxpbmVfcGFnZSgpIHdpbGwgc3VjY2VlZCBvbiBhbGwgcGFnZXMuIEFsbG93IGluc3BlY3RpbmdcXG4gIDM3OlxcdFxcdCAqIHRoZXNlIG1lbW1hcHMuXFxuICAzODpcXHRcXHQgKi9cXG4gIDM5OlxcdFxcdHJldHVybiByb3VuZF91cChtYXhfcGZuLCBQQUdFU19QRVJfU0VDVElPTik7XFxuICA0MDpcXHQjZWxzZVxcbiAgNDE6XFx0XFx0cmV0dXJuIG1heF9wZm47XFxuICA0MjpcXHQjZW5kaWZcXG4gIDQzOlxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIHU2NCBnZXRfa3BhZ2VfY291bnQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuICA0NjpcXHR7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgcGFnZV9zbmFwc2hvdCBwcztcXG4gIDQ4OlxcdFxcdHU2NCByZXQ7XFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdHNuYXBzaG90X3BhZ2UoXFx1MDAyNnBzLCBwYWdlKTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxcbiAgNTM6XFx0XFx0XFx0cmV0ID0gZm9saW9fcHJlY2lzZV9wYWdlX21hcGNvdW50KFxcdTAwMjZwcy5mb2xpb19zbmFwc2hvdCxcXG4gIDU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBzLnBhZ2Vfc25hcHNob3QpO1xcbiAgNTU6XFx0XFx0ZWxzZVxcbiAgNTY6XFx0XFx0XFx0cmV0ID0gZm9saW9fYXZlcmFnZV9wYWdlX21hcGNvdW50KFxcdTAwMjZwcy5mb2xpb19zbmFwc2hvdCk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHJldHVybiByZXQ7XFxuICA1OTpcXHR9XFxuICA2MDpcXHRcXG4gIDYxOlxcdHN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuICA2MjpcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyxcXG4gIDYzOlxcdFxcdFxcdGVudW0ga3BhZ2Vfb3BlcmF0aW9uIG9wKVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBtYXhfZHVtcF9wZm4gPSBnZXRfbWF4X2R1bXBfcGZuKCk7XFxuICA2NjpcXHRcXHR1NjQgX191c2VyICpvdXQgPSAodTY0IF9fdXNlciAqKWJ1ZjtcXG4gIDY3OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAgNjg6XFx0XFx0dW5zaWduZWQgbG9uZyBzcmMgPSAqcHBvcztcXG4gIDY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbiAgNzA6XFx0XFx0c3NpemVfdCByZXQgPSAwO1xcbiAgNzE6XFx0XFx0dTY0IGluZm87XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdHBmbiA9IHNyYyAvIEtQTVNJWkU7XFxuICA3NDpcXHRcXHRpZiAoc3JjIFxcdTAwMjYgS1BNTUFTSyB8fCBjb3VudCBcXHUwMDI2IEtQTU1BU0spXFxuICA3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDc2OlxcdFxcdGlmIChzcmMgXFx1MDAzZT0gbWF4X2R1bXBfcGZuICogS1BNU0laRSlcXG4gIDc3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgNzg6XFx0XFx0Y291bnQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgKG1heF9kdW1wX3BmbiAqIEtQTVNJWkUpIC0gc3JjKTtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwM2UgMCkge1xcbiAgODE6XFx0XFx0XFx0LypcXG4gIDgyOlxcdFxcdFxcdCAqIFRPRE86IFpPTkVfREVWSUNFIHN1cHBvcnQgcmVxdWlyZXMgdG8gaWRlbnRpZnlcXG4gIDgzOlxcdFxcdFxcdCAqIG1lbW1hcHMgdGhhdCB3ZXJlIGFjdHVhbGx5IGluaXRpYWxpemVkLlxcbiAgODQ6XFx0XFx0XFx0ICovXFxuICA4NTpcXHRcXHRcXHRwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdFxcdGlmIChwYWdlKSB7XFxuICA4ODpcXHRcXHRcXHRcXHRzd2l0Y2ggKG9wKSB7XFxuICA4OTpcXHRcXHRcXHRcXHRjYXNlIEtQQUdFX0ZMQUdTOlxcbiAgOTA6XFx0XFx0XFx0XFx0XFx0aW5mbyA9IHN0YWJsZV9wYWdlX2ZsYWdzKHBhZ2UpO1xcbiAgOTE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5MjpcXHRcXHRcXHRcXHRjYXNlIEtQQUdFX0NPVU5UOlxcbiAgOTM6XFx0XFx0XFx0XFx0XFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgOTU6XFx0XFx0XFx0XFx0Y2FzZSBLUEFHRV9DR1JPVVA6XFxuICA5NjpcXHRcXHRcXHRcXHRcXHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5ODpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiAgOTk6XFx0XFx0XFx0XFx0XFx0aW5mbyA9IDA7XFxuIDEwMDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MzYuMTE3NzEzNDYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MTQ5NDc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGAvcHJvYy9rcGFnZWNncm91cGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbiBvZiBgL3Byb2Mva3BhZ2VjZ3JvdXBgLiBJIGtub3cgdGhhdCBgZnMvcHJvYy9wYWdlLmNgIGlzIGludm9sdmVkLCB0aGF0IHNlZW1zIGxvZ2ljYWwsIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgY3JlYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgb2YgYC9wcm9jL2twYWdlY2dyb3VwYC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIG9idmlvdXMgcGxhY2VzLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgd2l0aGluIHRoZSBgZnMvcHJvYy9gIGRpcmVjdG9yeSBpdHNlbGY7IHNwZWNpZmljYWxseSwgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCBJIG5lZWQsIHRoZSBjb25maWcgb3B0aW9uIHRoYXQgdHVybnMgdGhpcyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MzguNDk5MjEwNDg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDg5MTIxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3BhZ2VjZ3JvdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0PTUxPXdvcmtsb2FkIG9uZSBzaG91bGQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3QtNTUtICAgIGBgL3Byb2MvcGlkL3BhZ2VtYXBgYCBpZiB0aGUgd29ya2xvYWQgaXMgcmVwcmVzZW50ZWQgYnkgYSBwcm9jZXNzLCBvciBieVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdDo1NjogICAgZmlsdGVyaW5nIG91dCBhbGllbiBwYWdlcyB1c2luZyBgYC9wcm9jL2twYWdlY2dyb3VwYGAgaW4gY2FzZSB0aGUgd29ya2xvYWRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3QtNTctICAgIGlzIHBsYWNlZCBpbiBhIG1lbW9yeSBjZ3JvdXAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3Q9NzE9U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3Q6NzI6YGAvcHJvYy9waWQvcGFnZW1hcGBgLCBgYC9wcm9jL2twYWdlZmxhZ3NgYCwgYW5kIGBgL3Byb2Mva3BhZ2VjZ3JvdXBgYC5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3QtNzMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0PTY4PW51bWJlciBvZiB0aW1lcyBhIHBhZ2UgaXMgbWFwcGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDItXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdDoxMDM6ICogYGAvcHJvYy9rcGFnZWNncm91cGBgLiAgVGhpcyBmaWxlIGNvbnRhaW5zIGEgNjQtYml0IGlub2RlIG51bWJlciBvZiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0LTEwNC0gICBtZW1vcnkgY2dyb3VwIGVhY2ggcGFnZSBpcyBjaGFyZ2VkIHRvLCBpbmRleGVkIGJ5IFBGTi4gT25seSBhdmFpbGFibGUgd2hlblxcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VmbGFnc19wcm9jX29wcyA9IHtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTI2Ny0jaWZkZWYgQ09ORklHX01FTUNHXFxuZnMvcHJvYy9wYWdlLmM6MjY4OnN0YXRpYyBzc2l6ZV90IGtwYWdlY2dyb3VwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZnMvcHJvYy9wYWdlLmMtMjY5LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMjcyLX1cXG5mcy9wcm9jL3BhZ2UuYzoyNzM6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBrcGFnZWNncm91cF9wcm9jX29wcyA9IHtcXG5mcy9wcm9jL3BhZ2UuYy0yNzQtXFx0LnByb2NfZmxhZ3NcXHQ9IFBST0NfRU5UUllfUEVSTUFORU5ULFxcbmZzL3Byb2MvcGFnZS5jLTI3NS1cXHQucHJvY19sc2Vla1xcdD0gbWVtX2xzZWVrLFxcbmZzL3Byb2MvcGFnZS5jOjI3NjpcXHQucHJvY19yZWFkXFx0PSBrcGFnZWNncm91cF9yZWFkLFxcbmZzL3Byb2MvcGFnZS5jLTI3Ny19O1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjgwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yODQtI2lmZGVmIENPTkZJR19NRU1DR1xcbmZzL3Byb2MvcGFnZS5jOjI4NTpcXHRwcm9jX2NyZWF0ZShcXFwia3BhZ2VjZ3JvdXBcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2VjZ3JvdXBfcHJvY19vcHMpO1xcbmZzL3Byb2MvcGFnZS5jLTI4Ni0jZW5kaWZcXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02Ny0jZGVmaW5lIFBST0NfS1BBR0VDT1VOVFxcdFxcdFxcXCIvcHJvYy9rcGFnZWNvdW50XFxcIlxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2ODojZGVmaW5lIFBST0NfS1BBR0VDR1JPVVBcXHRcXFwiL3Byb2Mva3BhZ2VjZ3JvdXBcXFwiXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY5LVxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTE4Nj1zdGF0aWMgaW50XFx0XFx0a3BhZ2Vjb3VudF9mZCA9IC0xO1xcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxODc6c3RhdGljIGludFxcdFxcdGtwYWdlY2dyb3VwX2ZkID0gLTE7XFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTE4OC1zdGF0aWMgaW50XFx0XFx0cGFnZV9pZGxlX2ZkID0gLTE7XFxuLS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM9Mjc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGtwYWdlZmxhZ3NfcmVhZCh1aW50NjRfdCAqYnVmLFxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTI4MS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM6MjgyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGtwYWdlY2dyb3VwX3JlYWQodWludDY0X3QgKmJ1ZixcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjgzLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsXFxuLS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg1LXtcXG50b29scy9tbS9wYWdlLXR5cGVzLmM6Mjg2OlxcdGlmIChrcGFnZWNncm91cF9mZCBcXHUwMDNjIDApXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTI4Ny1cXHRcXHRyZXR1cm4gcGFnZXM7XFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTI4OC1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM6Mjg5OlxcdHJldHVybiBkb191NjRfcmVhZChrcGFnZWNncm91cF9mZCwgb3B0X2twYWdlZmxhZ3MsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTtcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjkwLX1cXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYz02NjU9c3RhdGljIHZvaWQgd2Fsa19wZm4odW5zaWduZWQgbG9uZyB2b2Zmc2V0LFxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY3Ny1cXHQvKlxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2Nzg6XFx0ICoga3BhZ2VjZ3JvdXBfcmVhZCgpIHJlYWRzIG9ubHkgaWYga3BhZ2VjZ3JvdXAgd2VyZSBvcGVuZWQsIGJ1dFxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2Nzk6XFx0ICogL3Byb2Mva3BhZ2VjZ3JvdXAgbWlnaHQgZXZlbiBub3QgZXhpc3QsIHNvIGl0J3MgYmV0dGVyIHRvIGZpbGxcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtNjgwLVxcdCAqIHRoZW0gd2l0aCB6ZXJvcyBoZXJlLlxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY5Mi1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM6NjkzOlxcdFxcdGlmIChrcGFnZWNncm91cF9yZWFkKGNnaSwgaW5kZXgsIHBhZ2VzKSAhPSBwYWdlcylcXG50b29scy9tbS9wYWdlLXR5cGVzLmM6Njk0OlxcdFxcdFxcdGZhdGFsKFxcXCJrcGFnZWNncm91cCByZXR1cm5lZCBmZXdlciBwYWdlcyB0aGFuIGV4cGVjdGVkXFxcIik7XFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY5NS1cXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYz05NzI9c3RhdGljIHZvaWQgd2Fsa19maWxlX3JhbmdlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCxcXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0xMDMxLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMDMyOlxcdFxcdFxcdGlmICgha3BhZ2VjZ3JvdXBfcmVhZChcXHUwMDI2Y2dyb3VwLCBwZm4sIDEpKVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMDMzOlxcdFxcdFxcdFxcdGZhdGFsKFxcXCJrcGFnZWNncm91cF9yZWFkIGZhaWxlZFxcXCIpO1xcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0xMDM0LVxcdFxcdFxcdGlmICgha3BhZ2Vjb3VudF9yZWFkKFxcdTAwMjZtYXBjbnQsIHBmbiwgMSkpXFxuLS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM9MTI2OT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTEzNDEtXFx0aWYgKG9wdF9jZ3JvdXAgfHwgb3B0X2xpc3RfY2dyb3VwKVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMzQyOlxcdFxcdGtwYWdlY2dyb3VwX2ZkID0gY2hlY2tlZF9vcGVuKFBST0NfS1BBR0VDR1JPVVAsIE9fUkRPTkxZKTtcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTM0My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYz0xNjg9c3RhdGljIGludCB0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24oY29uc3QgY2hhciAqcm9vdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTQtLypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM6MjE1OiAqIFRoZSB0ZXN0IHJlYWRzIHRoZSBlbnRpcmUgL3Byb2Mva3BhZ2VjZ3JvdXAuIElmIHRoZSBvcGVyYXRpb24gd2VudFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTYtICogc3VjY2Vzc2Z1bGx5IChhbmQgdGhlIGtlcm5lbCBkaWRuJ3QgcGFuaWMpLCB0aGUgdGVzdCBpcyB0cmVhdGVkIGFzIHBhc3NlZC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjE3LSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYzoyMTg6c3RhdGljIGludCB0ZXN0X2ttZW1fcHJvY19rcGFnZWNncm91cChjb25zdCBjaGFyICpyb290KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTkte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIyNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM6MjI1OlxcdGZkID0gb3BlbihcXFwiL3Byb2Mva3BhZ2VjZ3JvdXBcXFwiLCBPX1JET05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIyNi1cXHRpZiAoZmQgXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jPTQxMD1zdHJ1Y3Qga21lbV90ZXN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy00MTUtXFx0VCh0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24pLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYzo0MTY6XFx0VCh0ZXN0X2ttZW1fcHJvY19rcGFnZWNncm91cCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTQxNy1cXHRUKHRlc3Rfa21lbV9rZXJuZWxfc3RhY2tzKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDAuNDA4MTI4OTYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1NTAwMTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIChtbS9tZW1jb250cm9sLmMpKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBtZW1vcnkgY29udHJvbCwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGZpbGUgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgYXJvdW5kIGBwYWdlX2Nncm91cF9pbm9gLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIGluIHRoaXMgYXJlYSBoYW5kbGVzIHRoZSBhc3NvY2lhdGlvbiBvZiBwYWdlcyB3aXRoIGNncm91cHMsIGFuZCBsaWtlbHksIGhvdyBpbm9kZXMgcGxheSBhIHJvbGUgaW4gdGhhdCBtYW5hZ2VtZW50LiBJJ20gZ3Vlc3NpbmcgYHBhZ2VfY2dyb3VwX2lub2AgcmVwcmVzZW50cyB0aGUgaW5vZGUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2dyb3VwIHRoYXQgb3ducyBhIHNwZWNpZmljIHBhZ2UuIFRoaXMgbGlrZWx5IG1lYW5zIEknbGwgYmUgZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIHRyYWNrcyBtZW1vcnkgdXNhZ2UgYXQgYSBjZ3JvdXAgbGV2ZWwsIGFuZCBob3cgdGhhdCBpcyBsaW5rZWQgYmFjayB0byBwaHlzaWNhbCBwYWdlcyBpbiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IGNncm91cHMsIHRoZWlyIGhpZXJhcmNoaWVzLCBhbmQgdGhlIG1lbW9yeSBhY2NvdW50aW5nIG1lY2hhbmlzbXMuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGludGVyYWN0IHdpdGggY2dyb3VwIG1lbWJlcnNoaXAuIFNwZWNpZmljYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGNvbnRlbnRpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBwYXJ0aWN1bGFyIHZhcmlhYmxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDIuOTYzMTMzODk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcbiAzNDY6XFx0LyoqXFxuIDM0NzpcXHQgKiBwYWdlX2Nncm91cF9pbm8gLSByZXR1cm4gaW5vZGUgbnVtYmVyIG9mIHRoZSBtZW1jZyBhIHBhZ2UgaXMgY2hhcmdlZCB0b1xcbiAzNDg6XFx0ICogQHBhZ2U6IHRoZSBwYWdlXFxuIDM0OTpcXHQgKlxcbiAzNTA6XFx0ICogTG9vayB1cCB0aGUgY2xvc2VzdCBvbmxpbmUgYW5jZXN0b3Igb2YgdGhlIG1lbW9yeSBjZ3JvdXAgQHBhZ2UgaXMgY2hhcmdlZCB0b1xcbiAzNTE6XFx0ICogYW5kIHJldHVybiBpdHMgaW5vZGUgbnVtYmVyIG9yIDAgaWYgQHBhZ2UgaXMgbm90IGNoYXJnZWQgdG8gYW55IGNncm91cC4gSXRcXG4gMzUyOlxcdCAqIGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBAcGFnZS5cXG4gMzUzOlxcdCAqXFxuIDM1NDpcXHQgKiBOb3RlLCB0aGlzIGZ1bmN0aW9uIGlzIGluaGVyZW50bHkgcmFjeSwgYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIHRvIHByZXZlbnRcXG4gMzU1OlxcdCAqIHRoZSBjZ3JvdXAgaW5vZGUgZnJvbSBnZXR0aW5nIHRvcm4gZG93biBhbmQgcG90ZW50aWFsbHkgcmVhbGxvY2F0ZWQgYSBtb21lbnRcXG4gMzU2OlxcdCAqIGFmdGVyIHBhZ2VfY2dyb3VwX2lubygpIHJldHVybnMsIHNvIGl0IG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgY2FsbGVycyB0aGF0XFxuIDM1NzpcXHQgKiBkbyBub3QgY2FyZSAoc3VjaCBhcyBwcm9jZnMgaW50ZXJmYWNlcykuXFxuIDM1ODpcXHQgKi9cXG4gMzU5OlxcdGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gMzYwOlxcdHtcXG4gMzYxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDM2MjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIDM2MzpcXHRcXHR1bnNpZ25lZCBsb25nIGlubyA9IDA7XFxuIDM2NDpcXHRcXG4gMzY1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzY2OlxcdFxcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXFxuIDM2NzpcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIDM2ODpcXHRcXHQvKlxcbiAzNjk6XFx0XFx0ICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZ1xcbiAzNzA6XFx0XFx0ICogbWVtY2dfZGF0YSwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGUgYWNxdWlyZSBsb2FkIHBhaXJzIHdpdGggdGhlXFxuIDM3MTpcXHRcXHQgKiByZWxlYXNlIHN0b3JlIGluIGZvbGlvX3JlZl91bmZyZWV6ZSgpIGFuZCBtYWtlcyB0aGF0IG1ldGFkYXRhXFxuIDM3MjpcXHRcXHQgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLlxcbiAzNzM6XFx0XFx0ICovXFxuIDM3NDpcXHRcXHRpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSlcXG4gMzc1OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0d2hpbGUgKG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfb25saW5lKFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSlcXG4gMzgwOlxcdFxcdFxcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbiAzODE6XFx0XFx0aWYgKG1lbWNnKVxcbiAzODI6XFx0XFx0XFx0aW5vID0gY2dyb3VwX2lubyhtZW1jZy1cXHUwMDNlY3NzLmNncm91cCk7XFxuIDM4MzpcXHR1bmxvY2s6XFxuIDM4NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzg1OlxcdFxcdHJldHVybiBpbm87XFxuIDM4NjpcXHR9XFxuIDM4NzpcXHRFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xcbiAzODg6XFx0XFxuIDM4OTpcXHQvKiBTdWJzZXQgb2Ygbm9kZV9zdGF0X2l0ZW0gZm9yIG1lbWNnIHN0YXRzICovXFxuIDM5MDpcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbiAzOTE6XFx0XFx0TlJfSU5BQ1RJVkVfQU5PTixcXG4gMzkyOlxcdFxcdE5SX0FDVElWRV9BTk9OLFxcbiAzOTM6XFx0XFx0TlJfSU5BQ1RJVkVfRklMRSxcXG4gMzk0OlxcdFxcdE5SX0FDVElWRV9GSUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo0Mi45NjMzNTYxMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2MDc3NDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHJlYWNoYWJpbGl0eS4gVGhlIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBidXJpZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgcGFnZV9jZ3JvdXBfaW5vYCwgZ2V0cyBjYWxsZWQgZGlyZWN0bHkgd2hlbiByZWFkaW5nIGAvcHJvYy9rcGFnZWNncm91cGAgdmlhIHByb2Nmcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFBsdXMsIGl0J3MgYWxzbyB1c2VkIGluIGBod3BvaXNvbi1pbmplY3QuY2AuIFRoYXQgZ2l2ZXMgaXQgc29tZSBzb2xpZCBwcmVzZW5jZS4gU28sIHllcywgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTmV4dCwgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgTU0gbG9naWMsIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgYW5kIG1lbWNnIG1ldGFkYXRhIHJlYWRzLiBXZSdyZSB0YWxraW5nIGFib3V0IFJDVSByZWFkIGxvY2tzLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCB1bmZyZWV6ZSBvcGVyYXRpb25zLiBUaGlzIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBmaW5kaW5nIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuIEdpdmVuIHRoYXQsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aHkgb2Ygc29tZSBmdXp6aW5nIGVmZm9ydHMuXG5cbkZpbmFsbHksIHdoYXQgY29uZmlndXJhdGlvbnMgZG8gd2UgbmVlZCB0byB0cmlnZ2VyIHRoaXM/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIGBNRU1DR2AgaXMgZW5hYmxlZCwgYW5kIHRoYXQncyB1c3VhbGx5IGRvbmUgaW4gYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBXZSdsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYC9wcm9jL2twYWdlY2dyb3VwYCBpcyBlbmFibGVkLiBJdCdzIHRpbWUgdG8gY2hlY2sgd2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgYE1FTUNHYCBhbmQgYC9wcm9jL2twYWdlY2dyb3VwYCBpbiB0aG9zZSBmaWxlcyB0byBlc3RhYmxpc2ggdGhlIG5lZWRlZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjQ1LjcyNDEzMzA4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjM1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo0NS43NzE1MDQ5NDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNDI4OTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgL3Byb2MvcGFnZS5jYCBmaWxlIGlzIGNvbmZpZ3VyZWQuIFRvIGRvIHRoaXMgcHJvcGVybHksIEknbGwgbmVlZCB0byBrbm93IHdoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbiBhbmQgcGFyYW1ldGVycy5cblxuRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGl0J3MgZ290IGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGBmcy9wcm9jYCBkaXJlY3RvcnkgaXRzZWxmLiBTbywgSSdsbCBleGFtaW5lIHRoZSBgZnMvcHJvYy9LY29uZmlnYCBmaWxlIG9yIGBmcy9wcm9jL01ha2VmaWxlYCDigJMgZGVwZW5kaW5nIG9uIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgaXQg4oCTIGZvciBhbnkgY2x1ZXMgcmVnYXJkaW5nIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDguMDk1Nzk2NTA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA4NjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvTWFrZWZpbGU9MzY9cHJvYy0kKENPTkZJR19QUklOVEspXFx0Kz0ga21zZy5vXFxuZnMvcHJvYy9NYWtlZmlsZTozNzpwcm9jLSQoQ09ORklHX1BST0NfUEFHRV9NT05JVE9SKVxcdCs9IHBhZ2Uub1xcbmZzL3Byb2MvTWFrZWZpbGUtMzgtcHJvYy0kKENPTkZJR19CT09UX0NPTkZJRylcXHQrPSBib290Y29uZmlnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDguMTQzODg4NjkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjI2NzU0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1lbW9yeSBDb250cm9sIEdyb3VwIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgY29udHJvbCBncm91cHMgYW5kIHBhZ2UgbW9uaXRvcmluZy4gRmlyc3QsIEknbSBub3RpbmcgdGhlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzIEkgc2hvdWxkIGZvY3VzIG9uLiBUaGF0IHRyaWdnZXJzIGEgbWVudGFsIG5vdGUgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAsIHBhcnRpY3VsYXJseSBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLCByaWdodCB3aXRoaW4gdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgZmVhdHVyZSB3b3VsZCBiZSB0aGUgcmlnaHQgbG9jYXRpb24gdG8gc3RhcnQgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTExNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjUwLjEwNjU2Njg5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODY4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfUEFHRV9NT05JVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgU1lTQ1RMXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTAwLVxcbmZzL3Byb2MvS2NvbmZpZzoxMDE6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXFxuZnMvcHJvYy9LY29uZmlnLTEwMi0gXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjUwLjE1MTc2MDk0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzY1MTYyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBrcGFnZWNncm91cF9yZWFkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBrcGFnZWNncm91cF9yZWFkYCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGBwYWdlX2Nncm91cF9pbm9gLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggYGtwYWdlX3JlYWRgIGFzIGl0IHNlZW1zIHJlbGF0ZWQuIEknbGwgbWFrZSBzdXJlIHRvIHZlcmlmeSB0aGV5IGFyZSBub3QgYmVpbmcgaW5saW5lZC5cblxuT2theSwgSSd2ZSBjb25maXJtZWQgdGhhdCBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmVgIGlzIGlubGluZWQsIHNvIEkgY2FuIHNhZmVseSBuYXJyb3cgbXkgZm9jdXMgZG93biB0byBgcGFnZV9jZ3JvdXBfaW5vYCBhbmQgYGtwYWdlY2dyb3VwX3JlYWRgLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgcGFnZV9jZ3JvdXBfaW5vYC5cblxuUmlnaHQsIGxldCdzIGV4YW1pbmUgd2hlcmUgYHBhZ2VfY2dyb3VwX2lub2AgaXMgYWN0dWFsbHkgY2FsbGVkLiBJdCBhcHBlYXJzIGluIGBmcy9wcm9jL3BhZ2UuY2AgdmlhIGBrcGFnZV9yZWFkYCBhbmQgYGtwYWdlY2dyb3VwX3JlYWRgLCBhbmQgaW50ZXJlc3RpbmdseSwgYG1tL2h3cG9pc29uLWluamVjdC5jYCBhbHNvIGNhbGxzIGl0LCB3aGljaCBpcyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2ZzIGluamVjdGlvbiBtZWNoYW5pc20uIFRoYXQncyBhIGdvb2QgaGVhZHMgdXA7IEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblNvLCBoZXJlJ3MgdGhlIHN1bW1hcnk6IGBwYWdlX2Nncm91cF9pbm9gIGlzIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gYGtwYWdlY2dyb3VwX3JlYWRgIGluIGBmcy9wcm9jL3BhZ2UuY2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gcHJvY2ZzIHRoYXQgdWx0aW1hdGVseSBjYWxscyBga3BhZ2VfcmVhZGAsIHdoaWNoIHRoZW4gY2FsbHMgYHBhZ2VfY2dyb3VwX2lub2AuXG5cbk5vdyBsZXQncyB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSB3b3JraW5nIGFzc3VtcHRpb24gaXMgdGhhdCBJJ2xsIG5lZWQgYE1FTUNHYCwgYW5kIHRoZW4gSSBuZWVkIHRvIGNoZWNrIGBQUk9DX1BBR0VfTU9OSVRPUmAsIGFuZCBwb3NzaWJseSBgUFJPQ19GU2AsIGJ1dCBgUFJPQ19QQUdFX01PTklUT1JgIHR5cGljYWxseSBkZXBlbmRzIG9uIGBQUk9DX0ZTYCBhbmQgYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYC4gSSBuZWVkIHRvIGxvb2sgaW50byBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgYW55IHN1cnJvdW5kaW5nIGNvbnRleHQuIEknbGwgY2hlY2sgYXJvdW5kIGBjb25maWcgTUVNQ0dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo1My45MTY5MjczMjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NTMuOTE3MDcwOTk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzE2Mzc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gYGZzL3Byb2MvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgMTAwLiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcnVjaWFsIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgcHJvYyBmaWxlc3lzdGVtIGlzIGNvbmZpZ3VyZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGltcG9ydGFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIG9yIG1heWJlIGV2ZW4gYW4gb3B0aW9uIEkndmUgb3Zlcmxvb2tlZC4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24ga25vYnMgYXJlIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU1Ljk4ODcxMTM4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0ICBvcHRpb24gd2lsbCBlbmxhcmdlIHRoZSBrZXJuZWwgYnkgYXQgbGVhc3QgOCBLQi5cXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0ICBBcyBpdCBpcyBnZW5lcmFsbHkgYSBnb29kIHRoaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgdW5sZXNzXFxuICA5ODpcXHRcXHQgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5XFxuICA5OTpcXHRcXHQgIGxpbWl0ZWQgaW4gbWVtb3J5LlxcbiAxMDA6XFx0XFxuIDEwMTpcXHRjb25maWcgUFJPQ19QQUdFX01PTklUT1JcXG4gMTAyOlxcdCBcXHRkZWZhdWx0IHlcXG4gMTAzOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gMTA0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmdcXFwiIGlmIEVYUEVSVFxcbiAxMDU6XFx0IFxcdGhlbHBcXG4gMTA2OlxcdFxcdCAgVmFyaW91cyAvcHJvYyBmaWxlcyBleGlzdCB0byBtb25pdG9yIHByb2Nlc3MgbWVtb3J5IHV0aWxpemF0aW9uOlxcbiAxMDc6XFx0XFx0ICAvcHJvYy9waWQvc21hcHMsIC9wcm9jL3BpZC9jbGVhcl9yZWZzLCAvcHJvYy9waWQvcGFnZW1hcCxcXG4gMTA4OlxcdFxcdCAgL3Byb2Mva3BhZ2Vjb3VudCwgYW5kIC9wcm9jL2twYWdlZmxhZ3MuIERpc2FibGluZyB0aGVzZVxcbiAxMDk6XFx0XFx0ICBpbnRlcmZhY2VzIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgYXBwcm94aW1hdGVseSA0a2IuXFxuIDExMDpcXHRcXG4gMTExOlxcdGNvbmZpZyBQUk9DX0NISUxEUkVOXFxuIDExMjpcXHRcXHRib29sIFxcXCJJbmNsdWRlIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3Rhc2svXFx1MDAzY3RpZFxcdTAwM2UvY2hpbGRyZW4gZmlsZVxcXCJcXG4gMTEzOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAxMTQ6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU1Ljk4ODc4MjQ5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjAyMjE4MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIEkndmUgZ290IHRoaXMuIFRoZSBzaXR1YXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBXb3J0aEZ1enppbmcgaXMgc2V0IHRvIHRydWUsIGFuZCBJIGNvbmN1ci4gVGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBgcGFnZV9jZ3JvdXBfaW5vKClgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSXQncyBpbXBsZW1lbnRpbmcgYW4gYGFjcXVpcmVgIG1lbW9yeSBvcmRlcmluZyBkdXJpbmcgYSByZWFkIG9mIHRoZSBmb2xpbyByZWZjb3VudCwgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgLiBUaGlzIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIG1ldGFkYXRhIHZpc2liaWxpdHksIHNwZWNpZmljYWxseSB0aGluZ3MgbGlrZSBgbWVtY2dfZGF0YWAsIGR1cmluZyB0aGUgZm9saW8gc3BsaXR0aW5nIHByb2Nlc3MuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaGVyZSBpcyB0aGF0IHRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzICpyZWFjaGFibGUqIHZpYSBgL3Byb2Mva3BhZ2VjZ3JvdXBgLiBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGlzIGtub3duIHRvIGV4cG9zZSBrZXJuZWwgaW50ZXJuYWxzLiBUaGF0IGFjY2VzcyByb3V0ZSBpcyB0aGUgcGVyZmVjdCB2ZWN0b3IgZm9yIGV4cG9zaW5nIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLCB3aGljaCBhcmUgdGhlIGV4YWN0IGtpbmQgb2YgYnVncyBmdXp6aW5nIGlzIGRlc2lnbmVkIHRvIGZpbmQuXG5cbldlJ3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBNRU1DRyBhbmQgUFJPQ19QQUdFX01PTklUT1IuIFRoYXQncyBlc3NlbnRpYWwgZm9yIGdldHRpbmcgdGhpcyBjb2RlIHBhdGggdG8gZXZlbiBleGVjdXRlLiBBbHNvLCBmb2N1c2luZyBvbiBgcGFnZV9jZ3JvdXBfaW5vYCBhbmQgYGtwYWdlY2dyb3VwX3JlYWRgIGlzIHNwb3Qtb24uIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDU4LCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU5LjE5MTAwMzA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNDM3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VfY2dyb3VwX2lub1wiLFxuICAgIFwia3BhZ2VjZ3JvdXBfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2VfY2dyb3VwX2lubygpIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbWNvbnRyb2wuYykgdG8gYWRkIGFjcXVpcmUgbWVtb3J5IG9yZGVyaW5nIChmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpKSB3aGVuIGNoZWNraW5nIGZvbGlvIHJlZmNvdW50cywgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZvbGlvIHNwbGl0cyB3aGVuIGFjY2Vzc2luZyBtZW1jZyBtZXRhZGF0YS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9rcGFnZWNncm91cCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX2Nncm91cF9pbm9cIixcbiAgICBcImtwYWdlY2dyb3VwX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU5LjI2NjI1MzQxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMTQzNTc5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo1OS4yNjY3NzkzMjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzExMzgyNzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBiYXJyaWVyL3N5bmNocm9uaXphdGlvbiBjaGVjayAoYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgKSBpbiBgcGFnZV9jZ3JvdXBfaW5vKClgIHRvIGVuc3VyZSBtZXRhZGF0YSBpcyB2aXNpYmxlIGFmdGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcHJldmVudCByYWN5IGFjY2VzcyB3aGVuIGZvbGlvcyBhcmUgZnJvemVuLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaW5vID0gMGAsIGBmb2xpb2AsIGBtZW1jZ2ApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuaW5kZXggOWY1Yzc1ZDA2Zjc2OC4uNDAxMzMwMzA3YmM1ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oXG5AQCAtMTA3LDYgKzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBwYWdlX3JlZl9jb3VudChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZmb2xpby1cdTAwM2VfcmVmY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4yOTcxZTVlMGVjZTFmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNTgsMTcgKzM1OCwyOSBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKi9cbiBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXG4tXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKHBhZ2VfZm9saW8ocGFnZSkpO1xuK1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1x0LypcbitcdCAqIEFmdGVyLXNwbGl0IGZvbGlvcyByZW1haW4gZnJvemVuIHVudGlsIHRoZWlyIG1ldGFkYXRhLCBpbmNsdWRpbmdcbitcdCAqIG1lbWNnX2RhdGEsIGhhcyBiZWVuIGluaXRpYWxpemVkLiAgVGhlIGFjcXVpcmUgbG9hZCBwYWlycyB3aXRoIHRoZVxuK1x0ICogcmVsZWFzZSBzdG9yZSBpbiBmb2xpb19yZWZfdW5mcmVlemUoKSBhbmQgbWFrZXMgdGhhdCBtZXRhZGF0YVxuK1x0ICogdmlzaWJsZSB0byB0aGlzIGNhbGxlci5cbitcdCAqL1xuK1x0aWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4gXG4gXHR3aGlsZSAobWVtY2cgXHUwMDI2XHUwMDI2ICFjc3NfaXNfb25saW5lKFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpXG4gXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuIFx0aWYgKG1lbWNnKVxuIFx0XHRpbm8gPSBjZ3JvdXBfaW5vKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXApO1xuK3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlubztcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo1OS4yNjY3ODAzMTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxNjMyMTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBtaWdodCBmbGFnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB0aGUgY2hhbmdlcyBhbmQgc2NydXRpbml6ZSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG1lbW9yeS5cblxuRmlyc3QsIEkgc2VlIGEgbmV3IGlubGluZSBoZWxwZXIsIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAsIGFkZGVkIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhgLiBJdCdzIGEgc2ltcGxlIGF0b21pYyByZWFkLCBsaWtlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIE5vdGhpbmcgaW5oZXJlbnRseSBjb25jZXJuaW5nIHRoZXJlIG9uIGl0cyBvd24sIGJ1dCBpdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kICp3aGVyZSogYW5kICp3aHkqIGl0J3MgYmVpbmcgdXNlZC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGlzIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbiB0byBgcGFnZV9jZ3JvdXBfaW5vYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBpbnRpbWF0ZWx5LiBUaGUgYWRkaXRpb24gc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBoYW5kbGluZyBcImFmdGVyLXNwbGl0IGZvbGlvc1wiIGFuZCBlbnN1cmluZyB0aGVpciBtZXRhZGF0YSwgaW5jbHVkaW5nIGBtZW1jZ19kYXRhYCwgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGFjY2Vzc2VkLlxuXG5UaGUga2V5IGxpbmUgdGhhdCBncmFicyBteSBhdHRlbnRpb24gaXMgYGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKWAuIFRoaXMgYXBwZWFycyB0byBiZSBhIGNoZWNrIGZvciB0aGUgZm9saW8ncyByZWZlcmVuY2UgY291bnQuIE15IHN1c3BpY2lvbiBpcyB0aGF0IHRoaXMgaXMgYSByYWNlLWNvbmRpdGlvbiBtaXRpZ2F0aW9uLCBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gbWlnaHQgZXhpdCBpZiB0aGUgZm9saW8gaXNuJ3QgaW4gYSB2YWxpZCBzdGF0ZS5cblxuVGhlIGNvbW1lbnQgYWJvdXQgdGhlIFwiYWNxdWlyZSBsb2FkXCIgYW5kIFwicmVsZWFzZSBzdG9yZVwiIGluIGBmb2xpb19yZWZfdW5mcmVlemUoKWAgc3VnZ2VzdHMgdGhpcyBhY3F1aXJlIGlzIHBhcnQgb2YgYSBzeW5jaHJvbml6YXRpb24gc3RyYXRlZ3kgdG8gbWFrZSBtZW1jZy1yZWxhdGVkIG1ldGFkYXRhIHZpc2libGUuIFRoZSBsb2dpYyBmbG93IGlzIGltcG9ydGFudCBoZXJlOiBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzbid0IGFjcXVpcmVkLCB0aGVuIGl0IGdvZXMgdG8gdW5sb2NrLCB3aGljaCBpcyBhIHJldHVybi5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBgcGFnZV9jZ3JvdXBfaW5vYC4gSG93IGlzIGl0IGNhbGxlZD8gV2hhdCBhcmUgaXRzIGlucHV0cz8gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdmFyaW91cyBzY2VuYXJpb3M/IEknbGwgcHJvYmFibHkgZ3JhYiBgZ3JlcHBlcmAgYW5kIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBvdGhlciBmdW5jdGlvbnMgY2FsbCBpdC4gQSBkaXJlY3QgZmlsZSByZWFkIG1heSBhbHNvIGJlIGZydWl0ZnVsLiBVbmRlcnN0YW5kaW5nIHRob3NlIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IGR1cmluZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBtYXkgZXhpc3QgZ2l2ZW4gdGhpcyBsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzk6MDQuMTgzMTA0MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTk0NzIxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jZ3JvdXBfaW5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy05NS1cXHRcXHRcXHRjYXNlIEtQQUdFX0NHUk9VUDpcXG5mcy9wcm9jL3BhZ2UuYzo5NjpcXHRcXHRcXHRcXHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTk3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4ODk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3Mi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODczOnN0YXRpYyBpbmxpbmUgaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NzQte1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg9Mjc0PVRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yODQtXFx0XFx0X19maWVsZCh1NjQsXFx0XFx0Y2dyb3VwX2lubylcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDoyODU6XFx0XFx0X19maWVsZCh1NjQsXFx0XFx0cGFnZV9jZ3JvdXBfaW5vKVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI4Ni1cXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcXHRtZW1jZ19pZClcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI5OS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzAwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVxcdTAwM2Vjc3MuY2dyb3VwKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDEtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDMtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzA0OlxcdFRQX3ByaW50ayhcXFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcXFwiLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMwNS1cXHRcXHRfX2VudHJ5LVxcdTAwM2VuYW1lLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA5LVxcdFxcdF9fZW50cnktXFx1MDAzZWNncm91cF9pbm8sXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzEwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lub1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMxMS1cXHQpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz02OT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl90YXNrKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzMtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6NzQ6XFx0aWYgKHBhZ2VfY2dyb3VwX2lubyhwKSAhPSBod3BvaXNvbl9maWx0ZXJfbWVtY2cpXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0Ni0vKipcXG5tbS9tZW1jb250cm9sLmM6MzQ3OiAqIHBhZ2VfY2dyb3VwX2lubyAtIHJldHVybiBpbm9kZSBudW1iZXIgb2YgdGhlIG1lbWNnIGEgcGFnZSBpcyBjaGFyZ2VkIHRvXFxubW0vbWVtY29udHJvbC5jLTM0OC0gKiBAcGFnZTogdGhlIHBhZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTUtICogdGhlIGNncm91cCBpbm9kZSBmcm9tIGdldHRpbmcgdG9ybiBkb3duIGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlZCBhIG1vbWVudFxcbm1tL21lbWNvbnRyb2wuYzozNTY6ICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXRcXG5tbS9tZW1jb250cm9sLmMtMzU3LSAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cXG5tbS9tZW1jb250cm9sLmMtMzU4LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbWNvbnRyb2wuYy0zNjAte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTM4Ni19XFxubW0vbWVtY29udHJvbC5jOjM4NzpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xcbm1tL21lbWNvbnRyb2wuYy0zODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM5OjA2LjAwMjU4Mjg1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzc4MDAxMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEEgQ29uY3VycmVuY3kgRml4LCBOb3QgYW4gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgcGFnZV9jZ3JvdXBfaW5vYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYC9wcm9jL2twYWdlY2dyb3VwYCBhbmQgYGh3cG9pc29uX2ZpbHRlcl90YXNrYC4gVGhlIGNvcmUgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLCB3aGVyZSB0aGUgcmVmY291bnQgbWlnaHQgYmUgemVybyAoZnJvemVuKSBhbmQgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgKGBtZW1jZ19kYXRhYCkgY291bGQgYmUgdW5pbml0aWFsaXplZC5cblxuVGhpcyBwYXRjaCBhZGRzIGFuIGFjcXVpcmUgbG9hZCBvbiBgX3JlZmNvdW50YCB1c2luZyBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pYC4gSWYgaXQncyB6ZXJvLCB3ZSByZXR1cm4gYDBgIGZvciBgaW5vYCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHJlYWQgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBBaGEhIEl0J3MgKnByZXZlbnRpbmcqIHRoZSByZWFkLCBub3QgaW50cm9kdWNpbmcgaXQuIEl0J3MgYSBzeW5jaHJvbml6YXRpb24vY29uY3VycmVuY3kgZml4IOKAkyB1c2luZyBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWAgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgcmVsZWFzZSBzdG9yZSBvZiBgZm9saW9fcmVmX3VuZnJlZXplKClgLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTj8gTGV0J3MgY2hlY2sgdGhlIGNvZGUgaXRzZWxmOlxuXG4qICAgYHVuc2lnbmVkIGxvbmcgaW5vID0gMDtgIOKAkyBJbml0aWFsaXplZCB0byB6ZXJvLlxuKiAgIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtgIOKAkyBUaGlzIGdldHMgYSB2YWxpZCBmb2xpbyBwb2ludGVyLlxuKiAgIGBpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSkgZ290byB1bmxvY2s7YCDigJMgUmV0dXJucyBgaW5vYCAod2hpY2ggaXMgMCkgaWYgdGhlIGZvbGlvIGlzIGZyb3plbiwgc2tpcHBpbmcgZnVydGhlciBwcm9jZXNzaW5nLlxuKiAgIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAgcmVhZHMgYFx1MDAyNmZvbGlvLVx1MDAzZV9yZWZjb3VudGAgYXRvbWljYWxseSwgd2l0aCBhY3F1aXJlIHNlbWFudGljcy5cblxuU28sIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBhbmQgbm90aGluZyBpcyBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0IGFwcGVhcnMgdGhhdCBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYCBpcyBvbmx5IGNhbGxlZCBhZnRlciB0aGUgcmVmY291bnQgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZXJlZm9yZSBpbml0aWFsaXplZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLi4uXG5cbk9rYXksIGxldCdzIHJldmlldyB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gV2UgbmVlZCB0byBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgKm9ubHkqIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdoZXJlIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBsYXRlci4gT3IsIGlmIGl0IGNoYW5nZXMgYm91bmRzL2xlbmd0aHMuXG5cblRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIGEgbWVtb3J5IG9yZGVyaW5nIGZpeCwgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgIHRvIGVuc3VyZSBhIGZvbGlvIGlzbid0IGZyb3plbiBiZWZvcmUgYWNjZXNzaW5nIGl0cyBtZXRhZGF0YS4gQWxsIHZhcmlhYmxlcyBhcmUgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIG9yIHNraXBwZWQgaWYgbm90IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHZlcnkgc3RyYWlnaHRmb3J3YXJkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHF1aWNrbHk6IGBpbm9gIGlzIHplcm87IGBmb2xpb2AgaXMgaW5pdGlhbGl6ZWQgYnkgYHBhZ2VfZm9saW8ocGFnZSlgOyBpZiBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pYCBpcyAwLCB3ZSBqdW1wIHRvIHVubG9jay4gSWYgbm90LCBpdCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYC4gRXZlcnl0aGluZyBpcyBjbGVhbiwgYW5kIHRoZSBpbnRlbnQgaXMgY2xlYXIuXG5cbkFscmlnaHQsIHRpbWUgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzgsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM5OjEyLjM4MDU4NzQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBiYXJyaWVyL3N5bmNocm9uaXphdGlvbiBjaGVjayAoYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgKSBpbiBgcGFnZV9jZ3JvdXBfaW5vKClgIHRvIGVuc3VyZSBtZXRhZGF0YSBpcyB2aXNpYmxlIGFmdGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcHJldmVudCByYWN5IGFjY2VzcyB3aGVuIGZvbGlvcyBhcmUgZnJvemVuLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaW5vID0gMGAsIGBmb2xpb2AsIGBtZW1jZ2ApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsc58q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 16:17:42 +0000 UTC FinishedAt: 2026-09-07 16:39:14 +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": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "PROC_PAGE_MONITOR" ], "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": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "PROC_PAGE_MONITOR" ], "series_id": "cf5c8781-e260-4fcb-a085-690be1e78947" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_cgroup_ino", "kpagecgroup_read" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9jZ3JvdXBfaW5vJiMzNDssCiAgICAmIzM0O2twYWdlY2dyb3VwX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbmluZGV4IDlmNWM3NWQwNmY3NjguLjQwMTMzMDMwN2JjNWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuQEAgLTEwNyw2ICYjNDM7MTA3LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHBhZ2VfcmVmX2NvdW50KFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNmZvbGlvLVx1MDAzZV9yZWZjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZm9saW9fcmVmX2NvdW50KHBhZ2VfZm9saW8ocGFnZSkpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzU4LDE3ICYjNDM7MzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqL1xuIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXG4tXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKHBhZ2VfZm9saW8ocGFnZSkpO1xuJiM0MztcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFmdGVyLXNwbGl0IGZvbGlvcyByZW1haW4gZnJvemVuIHVudGlsIHRoZWlyIG1ldGFkYXRhLCBpbmNsdWRpbmdcbiYjNDM7XHQgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGVcbiYjNDM7XHQgKiByZWxlYXNlIHN0b3JlIGluIGZvbGlvX3JlZl91bmZyZWV6ZSgpIGFuZCBtYWtlcyB0aGF0IG1ldGFkYXRhXG4mIzQzO1x0ICogdmlzaWJsZSB0byB0aGlzIGNhbGxlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbiBcbiBcdHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIWNzc19pc19vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbiBcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gXHRpZiAobWVtY2cpXG4gXHRcdGlubyA9IGNncm91cF9pbm8obWVtY2ctXHUwMDNlY3NzLmNncm91cCk7XG4mIzQzO3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlubztcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX2Nncm91cF9pbm8mIzM0OywKICAgICYjMzQ7a3BhZ2VjZ3JvdXBfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaAppbmRleCA5ZjVjNzVkMDZmNzY4Li40MDEzMzAzMDdiYzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oCkBAIC0xMDcsNiAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gcGFnZV9yZWZfY291bnQoJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnRfYWNxdWlyZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoJmFtcDtmb2xpby0mZ3Q7X3JlZmNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzU4LDE3ICYjNDM7MzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICovCiBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAkvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqLwotCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2socGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJLyoKJiM0MzsJICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZwomIzQzOwkgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGUKJiM0MzsJICogcmVsZWFzZSBzdG9yZSBpbiBmb2xpb19yZWZfdW5mcmVlemUoKSBhbmQgbWFrZXMgdGhhdCBtZXRhZGF0YQomIzQzOwkgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiAKIAl3aGlsZSAobWVtY2cgJmFtcDsmYW1wOyAhY3NzX2lzX29ubGluZSgmYW1wO21lbWNnLSZndDtjc3MpKQogCQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKIAlpZiAobWVtY2cpCiAJCWlubyA9IGNncm91cF9pbm8obWVtY2ctJmd0O2Nzcy5jZ3JvdXApOwomIzQzO3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gaW5vOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERldGFpbGVkIEJyZWFrZG93bioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZW0sIHNvIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGRpZmYgaXRzZWxmLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYGluY2x1ZGUvbGludXgvcGFnZV9yZWYuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpYC4gSW50ZXJlc3RpbmcsIGxpa2VseSBzb21lIHJlZmNvdW50aW5nIG1hbmlwdWxhdGlvbiB0byBwcmV2ZW50IHJhY2VzLCBnaXZlbiB0aGUgY29udGV4dC4gVGhlbiwgSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWdlX2Nncm91cF9pbm8oKWAgZnVuY3Rpb24uCgpUaGUgcGF0Y2ggYWx0ZXJzIGhvdyBgcGFnZV9jZ3JvdXBfaW5vKClgIHdvcmtzLiBJdCYjMzk7cyBub3cgY2FsbGluZyBgZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO2AgYW5kIHRoZW4sIGNydWNpYWxseSwgaW50cm9kdWNpbmcgYSBjYWxsIHRvIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbylgLiBUaGlzIGlzIGNsZWFybHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByYWNlIGNvbmRpdGlvbiBpdCYjMzk7cyB0cnlpbmcgdG8gc29sdmUuIElmIHRoYXQgYWNxdWlzaXRpb24gZmFpbHMsIGl0IGp1bXBzIHRvIGB1bmxvY2tgLCBhdm9pZGluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKWAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhpcyBpcyBhaW1lZCBhdCBtaXRpZ2F0aW5nIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGZvbGlvIHNwbGl0cywgcHJvYmFibHkgd2hlbiB0aGUgbWV0YWRhdGEsIHNwZWNpZmljYWxseSBgbWVtY2dfZGF0YWAsIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBwcm90ZWN0aW5nIGFnYWluc3QgYW4gaW52YWxpZCBhY2Nlc3MgdG8gYG1lbWNnX2RhdGFgIGR1cmluZyBmb2xpbyBzcGxpdC9tZXJnZSBvcGVyYXRpb24uCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGltcGFjdCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgcGFnZV9jZ3JvdXBfaW5vYCBpcyB1c2VkLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZSBhbmQgaGVscCBtZSBjb25maXJtIHRoYXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9jZ3JvdXBfaW5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9wYWdlLmMtOTUtXHRcdFx0Y2FzZSBLUEFHRV9DR1JPVVA6XG5mcy9wcm9jL3BhZ2UuYzo5NjpcdFx0XHRcdGluZm8gPSBwYWdlX2Nncm91cF9pbm8ocGFnZSk7XG5mcy9wcm9jL3BhZ2UuYy05Ny1cdFx0XHRcdGJyZWFrO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg4OD1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4ODk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5MC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NzItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODczOnN0YXRpYyBpbmxpbmUgaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3NC17XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg9Mjc0PVRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMjg0LVx0XHRfX2ZpZWxkKHU2NCxcdFx0Y2dyb3VwX2lubylcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oOjI4NTpcdFx0X19maWVsZCh1NjQsXHRcdHBhZ2VfY2dyb3VwX2lubylcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI4Ni1cdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRtZW1jZ19pZClcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yOTktXHRcdHJjdV9yZWFkX2xvY2soKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oOjMwMDpcdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm8gPSBjZ3JvdXBfaW5vKGZvbGlvX21lbWNnKGZvbGlvKS1cdTAwM2Vjc3MuY2dyb3VwKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMwMS1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzAzLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzA0Olx0VFBfcHJpbnRrKFwmIzM0O2JkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1XCYjMzQ7LFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA1LVx0XHRfX2VudHJ5LVx1MDAzZW5hbWUsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA5LVx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm8sXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDozMTA6XHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMTEtXHQpXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9Njk9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfdGFzayhzdHJ1Y3QgcGFnZSAqcClcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYy03My1cbm1tL2h3cG9pc29uLWluamVjdC5jOjc0Olx0aWYgKHBhZ2VfY2dyb3VwX2lubyhwKSAhPSBod3BvaXNvbl9maWx0ZXJfbWVtY2cpXG5tbS9od3BvaXNvbi1pbmplY3QuYy03NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vbWVtY29udHJvbC5jPTMzND1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzQ2LS8qKlxubW0vbWVtY29udHJvbC5jOjM0NzogKiBwYWdlX2Nncm91cF9pbm8gLSByZXR1cm4gaW5vZGUgbnVtYmVyIG9mIHRoZSBtZW1jZyBhIHBhZ2UgaXMgY2hhcmdlZCB0b1xubW0vbWVtY29udHJvbC5jLTM0OC0gKiBAcGFnZTogdGhlIHBhZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzU1LSAqIHRoZSBjZ3JvdXAgaW5vZGUgZnJvbSBnZXR0aW5nIHRvcm4gZG93biBhbmQgcG90ZW50aWFsbHkgcmVhbGxvY2F0ZWQgYSBtb21lbnRcbm1tL21lbWNvbnRyb2wuYzozNTY6ICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXRcbm1tL21lbWNvbnRyb2wuYy0zNTctICogZG8gbm90IGNhcmUgKHN1Y2ggYXMgcHJvY2ZzIGludGVyZmFjZXMpLlxubW0vbWVtY29udHJvbC5jLTM1OC0gKi9cbm1tL21lbWNvbnRyb2wuYzozNTk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtY29udHJvbC5jLTM2MC17XG4tLVxubW0vbWVtY29udHJvbC5jLTM4Ni19XG5tbS9tZW1jb250cm9sLmM6Mzg3OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2dyb3VwX2lubyk7XG5tbS9tZW1jb250cm9sLmMtMzg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipUcmFjaW5nIHRoZSBgcGFnZV9jZ3JvdXBfaW5vYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHBhZ2VfY2dyb3VwX2lub2AgaXMgYmVpbmcgaW52b2tlZC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBmcy9wcm9jL3BhZ2UuY2AgZmlsZSBzaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcHJvYyBlbnRyeS4gTXkgY3VycmVudCB0YXNrIGlzIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IGBmcy9wcm9jL3BhZ2UuYzo5NmAuIExvb2tzIGxpa2UgaXQmIzM5O3Mgd2l0aGluIGBrcGFnZV9yZWFkYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgYEtQQUdFX0NHUk9VUGAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGVudHJ5LiBFc3NlbnRpYWxseSwgSSYjMzk7bSByZWFkaW5nIGBmcy9wcm9jL3BhZ2UuY2Agd2l0aCB0aGUgc3BlY2lmaWMgcHVycG9zZSBvZiB0cmFja2luZyBkb3duIGhvdyBhbmQgd2hlcmUgdGhpcyBgcGFnZV9jZ3JvdXBfaW5vYCBjYWxsIGlzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9wYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXpvbmUuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gIDIwOlx0XG4gIDIxOlx0I2RlZmluZSBLUE1TSVpFIHNpemVvZih1NjQpXG4gIDIyOlx0I2RlZmluZSBLUE1NQVNLIChLUE1TSVpFIC0gMSlcbiAgMjM6XHRcbiAgMjQ6XHRlbnVtIGtwYWdlX29wZXJhdGlvbiB7XG4gIDI1Olx0XHRLUEFHRV9GTEFHUyxcbiAgMjY6XHRcdEtQQUdFX0NPVU5ULFxuICAyNzpcdFx0S1BBR0VfQ0dST1VQLFxuICAyODpcdH07XG4gIDI5Olx0XG4gIDMwOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tYXhfZHVtcF9wZm4odm9pZClcbiAgMzE6XHR7XG4gIDMyOlx0I2lmZGVmIENPTkZJR19TUEFSU0VNRU1cbiAgMzM6XHRcdC8qXG4gIDM0Olx0XHQgKiBUaGUgbWVtbWFwIG9mIGVhcmx5IHNlY3Rpb25zIGlzIGNvbXBsZXRlbHkgcG9wdWxhdGVkIGFuZCBtYXJrZWRcbiAgMzU6XHRcdCAqIG9ubGluZSBldmVuIGlmIG1heF9wZm4gZG9lcyBub3QgZmFsbCBvbiBhIHNlY3Rpb24gYm91bmRhcnkgLVxuICAzNjpcdFx0ICogcGZuX3RvX29ubGluZV9wYWdlKCkgd2lsbCBzdWNjZWVkIG9uIGFsbCBwYWdlcy4gQWxsb3cgaW5zcGVjdGluZ1xuICAzNzpcdFx0ICogdGhlc2UgbWVtbWFwcy5cbiAgMzg6XHRcdCAqL1xuICAzOTpcdFx0cmV0dXJuIHJvdW5kX3VwKG1heF9wZm4sIFBBR0VTX1BFUl9TRUNUSU9OKTtcbiAgNDA6XHQjZWxzZVxuICA0MTpcdFx0cmV0dXJuIG1heF9wZm47XG4gIDQyOlx0I2VuZGlmXG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0YXRpYyB1NjQgZ2V0X2twYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuICA0NjpcdHtcbiAgNDc6XHRcdHN0cnVjdCBwYWdlX3NuYXBzaG90IHBzO1xuICA0ODpcdFx0dTY0IHJldDtcbiAgNDk6XHRcbiAgNTA6XHRcdHNuYXBzaG90X3BhZ2UoXHUwMDI2cHMsIHBhZ2UpO1xuICA1MTpcdFxuICA1MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxuICA1MzpcdFx0XHRyZXQgPSBmb2xpb19wcmVjaXNlX3BhZ2VfbWFwY291bnQoXHUwMDI2cHMuZm9saW9fc25hcHNob3QsXG4gIDU0Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZwcy5wYWdlX3NuYXBzaG90KTtcbiAgNTU6XHRcdGVsc2VcbiAgNTY6XHRcdFx0cmV0ID0gZm9saW9fYXZlcmFnZV9wYWdlX21hcGNvdW50KFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90KTtcbiAgNTc6XHRcbiAgNTg6XHRcdHJldHVybiByZXQ7XG4gIDU5Olx0fVxuICA2MDpcdFxuICA2MTpcdHN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gIDYyOlx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLFxuICA2MzpcdFx0XHRlbnVtIGtwYWdlX29wZXJhdGlvbiBvcClcbiAgNjQ6XHR7XG4gIDY1Olx0XHRjb25zdCB1bnNpZ25lZCBsb25nIG1heF9kdW1wX3BmbiA9IGdldF9tYXhfZHVtcF9wZm4oKTtcbiAgNjY6XHRcdHU2NCBfX3VzZXIgKm91dCA9ICh1NjQgX191c2VyICopYnVmO1xuICA2NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDY4Olx0XHR1bnNpZ25lZCBsb25nIHNyYyA9ICpwcG9zO1xuICA2OTpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gIDcwOlx0XHRzc2l6ZV90IHJldCA9IDA7XG4gIDcxOlx0XHR1NjQgaW5mbztcbiAgNzI6XHRcbiAgNzM6XHRcdHBmbiA9IHNyYyAvIEtQTVNJWkU7XG4gIDc0Olx0XHRpZiAoc3JjIFx1MDAyNiBLUE1NQVNLIHx8IGNvdW50IFx1MDAyNiBLUE1NQVNLKVxuICA3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNzY6XHRcdGlmIChzcmMgXHUwMDNlPSBtYXhfZHVtcF9wZm4gKiBLUE1TSVpFKVxuICA3NzpcdFx0XHRyZXR1cm4gMDtcbiAgNzg6XHRcdGNvdW50ID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIChtYXhfZHVtcF9wZm4gKiBLUE1TSVpFKSAtIHNyYyk7XG4gIDc5Olx0XG4gIDgwOlx0XHR3aGlsZSAoY291bnQgXHUwMDNlIDApIHtcbiAgODE6XHRcdFx0LypcbiAgODI6XHRcdFx0ICogVE9ETzogWk9ORV9ERVZJQ0Ugc3VwcG9ydCByZXF1aXJlcyB0byBpZGVudGlmeVxuICA4MzpcdFx0XHQgKiBtZW1tYXBzIHRoYXQgd2VyZSBhY3R1YWxseSBpbml0aWFsaXplZC5cbiAgODQ6XHRcdFx0ICovXG4gIDg1Olx0XHRcdHBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbiAgODY6XHRcbiAgODc6XHRcdFx0aWYgKHBhZ2UpIHtcbiAgODg6XHRcdFx0XHRzd2l0Y2ggKG9wKSB7XG4gIDg5Olx0XHRcdFx0Y2FzZSBLUEFHRV9GTEFHUzpcbiAgOTA6XHRcdFx0XHRcdGluZm8gPSBzdGFibGVfcGFnZV9mbGFncyhwYWdlKTtcbiAgOTE6XHRcdFx0XHRcdGJyZWFrO1xuICA5MjpcdFx0XHRcdGNhc2UgS1BBR0VfQ09VTlQ6XG4gIDkzOlx0XHRcdFx0XHRpbmZvID0gZ2V0X2twYWdlX2NvdW50KHBhZ2UpO1xuICA5NDpcdFx0XHRcdFx0YnJlYWs7XG4gIDk1Olx0XHRcdFx0Y2FzZSBLUEFHRV9DR1JPVVA6XG4gIDk2Olx0XHRcdFx0XHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xuICA5NzpcdFx0XHRcdFx0YnJlYWs7XG4gIDk4Olx0XHRcdFx0ZGVmYXVsdDpcbiAgOTk6XHRcdFx0XHRcdGluZm8gPSAwO1xuIDEwMDpcdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgL3Byb2Mva3BhZ2VjZ3JvdXBgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgYC9wcm9jL2twYWdlY2dyb3VwYC4gSSBrbm93IHRoYXQgYGZzL3Byb2MvcGFnZS5jYCBpcyBpbnZvbHZlZCwgdGhhdCBzZWVtcyBsb2dpY2FsLCBidXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgdGhlIGNyZWF0aW9uIGFuZCBmdW5jdGlvbmFsaXR5IG9mIGAvcHJvYy9rcGFnZWNncm91cGAuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBvYnZpb3VzIHBsYWNlcy4gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayB3aXRoaW4gdGhlIGBmcy9wcm9jL2AgZGlyZWN0b3J5IGl0c2VsZjsgc3BlY2lmaWNhbGx5LCB0aGUgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgZGVmaW5lZCBhbmQgY29uZmlndXJlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmaW5kIHdoYXQgSSBuZWVkLCB0aGUgY29uZmlnIG9wdGlvbiB0aGF0IHR1cm5zIHRoaXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3BhZ2VjZ3JvdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0PTUxPXdvcmtsb2FkIG9uZSBzaG91bGQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0LTU1LSAgICBgYC9wcm9jL3BpZC9wYWdlbWFwYGAgaWYgdGhlIHdvcmtsb2FkIGlzIHJlcHJlc2VudGVkIGJ5IGEgcHJvY2Vzcywgb3IgYnlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdDo1NjogICAgZmlsdGVyaW5nIG91dCBhbGllbiBwYWdlcyB1c2luZyBgYC9wcm9jL2twYWdlY2dyb3VwYGAgaW4gY2FzZSB0aGUgd29ya2xvYWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdC01Ny0gICAgaXMgcGxhY2VkIGluIGEgbWVtb3J5IGNncm91cC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3Q9NzE9U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdDo3MjpgYC9wcm9jL3BpZC9wYWdlbWFwYGAsIGBgL3Byb2Mva3BhZ2VmbGFnc2BgLCBhbmQgYGAvcHJvYy9rcGFnZWNncm91cGBgLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0LTczLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3Q9Njg9bnVtYmVyIG9mIHRpbWVzIGEgcGFnZSBpcyBtYXBwZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDItXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0OjEwMzogKiBgYC9wcm9jL2twYWdlY2dyb3VwYGAuICBUaGlzIGZpbGUgY29udGFpbnMgYSA2NC1iaXQgaW5vZGUgbnVtYmVyIG9mIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDQtICAgbWVtb3J5IGNncm91cCBlYWNoIHBhZ2UgaXMgY2hhcmdlZCB0bywgaW5kZXhlZCBieSBQRk4uIE9ubHkgYXZhaWxhYmxlIHdoZW5cbi0tXG5mcy9wcm9jL3BhZ2UuYz0yNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBrcGFnZWZsYWdzX3Byb2Nfb3BzID0ge1xuLS1cbmZzL3Byb2MvcGFnZS5jLTI2Ny0jaWZkZWYgQ09ORklHX01FTUNHXG5mcy9wcm9jL3BhZ2UuYzoyNjg6c3RhdGljIHNzaXplX3Qga3BhZ2VjZ3JvdXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmZzL3Byb2MvcGFnZS5jLTI2OS1cdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMjcyLX1cbmZzL3Byb2MvcGFnZS5jOjI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlY2dyb3VwX3Byb2Nfb3BzID0ge1xuZnMvcHJvYy9wYWdlLmMtMjc0LVx0LnByb2NfZmxhZ3NcdD0gUFJPQ19FTlRSWV9QRVJNQU5FTlQsXG5mcy9wcm9jL3BhZ2UuYy0yNzUtXHQucHJvY19sc2Vla1x0PSBtZW1fbHNlZWssXG5mcy9wcm9jL3BhZ2UuYzoyNzY6XHQucHJvY19yZWFkXHQ9IGtwYWdlY2dyb3VwX3JlYWQsXG5mcy9wcm9jL3BhZ2UuYy0yNzctfTtcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yODA9c3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZClcbi0tXG5mcy9wcm9jL3BhZ2UuYy0yODQtI2lmZGVmIENPTkZJR19NRU1DR1xuZnMvcHJvYy9wYWdlLmM6Mjg1Olx0cHJvY19jcmVhdGUoXCYjMzQ7a3BhZ2VjZ3JvdXBcJiMzNDssIFNfSVJVU1IsIE5VTEwsIFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcbmZzL3Byb2MvcGFnZS5jLTI4Ni0jZW5kaWZcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtNjctI2RlZmluZSBQUk9DX0tQQUdFQ09VTlRcdFx0XCYjMzQ7L3Byb2Mva3BhZ2Vjb3VudFwmIzM0O1xudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY4OiNkZWZpbmUgUFJPQ19LUEFHRUNHUk9VUFx0XCYjMzQ7L3Byb2Mva3BhZ2VjZ3JvdXBcJiMzNDtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02OS1cbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmM9MTg2PXN0YXRpYyBpbnRcdFx0a3BhZ2Vjb3VudF9mZCA9IC0xO1xudG9vbHMvbW0vcGFnZS10eXBlcy5jOjE4NzpzdGF0aWMgaW50XHRcdGtwYWdlY2dyb3VwX2ZkID0gLTE7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTg4LXN0YXRpYyBpbnRcdFx0cGFnZV9pZGxlX2ZkID0gLTE7XG4tLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTI3NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBrcGFnZWZsYWdzX3JlYWQodWludDY0X3QgKmJ1Zixcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjgxLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjI4MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrcGFnZWNncm91cF9yZWFkKHVpbnQ2NF90ICpidWYsXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjgzLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg1LXtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoyODY6XHRpZiAoa3BhZ2VjZ3JvdXBfZmQgXHUwMDNjIDApXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg3LVx0XHRyZXR1cm4gcGFnZXM7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg4LVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjI4OTpcdHJldHVybiBkb191NjRfcmVhZChrcGFnZWNncm91cF9mZCwgb3B0X2twYWdlZmxhZ3MsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0yOTAtfVxuLS1cbnRvb2xzL21tL3BhZ2UtdHlwZXMuYz02NjU9c3RhdGljIHZvaWQgd2Fsa19wZm4odW5zaWduZWQgbG9uZyB2b2Zmc2V0LFxuLS1cbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02NzctXHQvKlxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY3ODpcdCAqIGtwYWdlY2dyb3VwX3JlYWQoKSByZWFkcyBvbmx5IGlmIGtwYWdlY2dyb3VwIHdlcmUgb3BlbmVkLCBidXRcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2Nzk6XHQgKiAvcHJvYy9rcGFnZWNncm91cCBtaWdodCBldmVuIG5vdCBleGlzdCwgc28gaXQmIzM5O3MgYmV0dGVyIHRvIGZpbGxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02ODAtXHQgKiB0aGVtIHdpdGggemVyb3MgaGVyZS5cbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtNjkyLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY5MzpcdFx0aWYgKGtwYWdlY2dyb3VwX3JlYWQoY2dpLCBpbmRleCwgcGFnZXMpICE9IHBhZ2VzKVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjY5NDpcdFx0XHRmYXRhbChcJiMzNDtrcGFnZWNncm91cCByZXR1cm5lZCBmZXdlciBwYWdlcyB0aGFuIGV4cGVjdGVkXCYjMzQ7KTtcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02OTUtXG4tLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTk3Mj1zdGF0aWMgdm9pZCB3YWxrX2ZpbGVfcmFuZ2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLFxuLS1cbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0xMDMxLVx0XHRcdFx0Y29udGludWU7XG50b29scy9tbS9wYWdlLXR5cGVzLmM6MTAzMjpcdFx0XHRpZiAoIWtwYWdlY2dyb3VwX3JlYWQoXHUwMDI2Y2dyb3VwLCBwZm4sIDEpKVxudG9vbHMvbW0vcGFnZS10eXBlcy5jOjEwMzM6XHRcdFx0XHRmYXRhbChcJiMzNDtrcGFnZWNncm91cF9yZWFkIGZhaWxlZFwmIzM0Oyk7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTAzNC1cdFx0XHRpZiAoIWtwYWdlY291bnRfcmVhZChcdTAwMjZtYXBjbnQsIHBmbiwgMSkpXG4tLVxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTEyNjk9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTM0MS1cdGlmIChvcHRfY2dyb3VwIHx8IG9wdF9saXN0X2Nncm91cClcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMzQyOlx0XHRrcGFnZWNncm91cF9mZCA9IGNoZWNrZWRfb3BlbihQUk9DX0tQQUdFQ0dST1VQLCBPX1JET05MWSk7XG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTM0My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM9MTY4PXN0YXRpYyBpbnQgdGVzdF9rbWVtX21lbWNnX2RlbGV0aW9uKGNvbnN0IGNoYXIgKnJvb3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIxNC0vKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jOjIxNTogKiBUaGUgdGVzdCByZWFkcyB0aGUgZW50aXJlIC9wcm9jL2twYWdlY2dyb3VwLiBJZiB0aGUgb3BlcmF0aW9uIHdlbnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTYtICogc3VjY2Vzc2Z1bGx5IChhbmQgdGhlIGtlcm5lbCBkaWRuJiMzOTt0IHBhbmljKSwgdGhlIHRlc3QgaXMgdHJlYXRlZCBhcyBwYXNzZWQuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjE3LSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jOjIxODpzdGF0aWMgaW50IHRlc3Rfa21lbV9wcm9jX2twYWdlY2dyb3VwKGNvbnN0IGNoYXIgKnJvb3QpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjE5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjI0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jOjIyNTpcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9rcGFnZWNncm91cFwmIzM0OywgT19SRE9OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIyNi1cdGlmIChmZCBcdTAwM2MgMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM9NDEwPXN0cnVjdCBrbWVtX3Rlc3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy00MTUtXHRUKHRlc3Rfa21lbV9tZW1jZ19kZWxldGlvbiksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM6NDE2Olx0VCh0ZXN0X2ttZW1fcHJvY19rcGFnZWNncm91cCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtNDE3LVx0VCh0ZXN0X2ttZW1fa2VybmVsX3N0YWNrcyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAobW0vbWVtY29udHJvbC5jKSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBtZW1vcnkgY29udHJvbCwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGZpbGUgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gVGhlIGZvY3VzIHNlZW1zIHRvIGJlIGFyb3VuZCBgcGFnZV9jZ3JvdXBfaW5vYC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIGluIHRoaXMgYXJlYSBoYW5kbGVzIHRoZSBhc3NvY2lhdGlvbiBvZiBwYWdlcyB3aXRoIGNncm91cHMsIGFuZCBsaWtlbHksIGhvdyBpbm9kZXMgcGxheSBhIHJvbGUgaW4gdGhhdCBtYW5hZ2VtZW50LiBJJiMzOTttIGd1ZXNzaW5nIGBwYWdlX2Nncm91cF9pbm9gIHJlcHJlc2VudHMgdGhlIGlub2RlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIGNncm91cCB0aGF0IG93bnMgYSBzcGVjaWZpYyBwYWdlLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTtsbCBiZSBkaWdnaW5nIGludG8gaG93IHRoZSBrZXJuZWwgdHJhY2tzIG1lbW9yeSB1c2FnZSBhdCBhIGNncm91cCBsZXZlbCwgYW5kIGhvdyB0aGF0IGlzIGxpbmtlZCBiYWNrIHRvIHBoeXNpY2FsIHBhZ2VzIGluIHRoZSBzeXN0ZW0uIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byByZXByZXNlbnQgY2dyb3VwcywgdGhlaXIgaGllcmFyY2hpZXMsIGFuZCB0aGUgbWVtb3J5IGFjY291bnRpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGludGVyYWN0IHdpdGggY2dyb3VwIG1lbWJlcnNoaXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBjb250ZW50aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBwYXJ0aWN1bGFyIHZhcmlhYmxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ1Olx0XG4gMzQ2Olx0LyoqXG4gMzQ3Olx0ICogcGFnZV9jZ3JvdXBfaW5vIC0gcmV0dXJuIGlub2RlIG51bWJlciBvZiB0aGUgbWVtY2cgYSBwYWdlIGlzIGNoYXJnZWQgdG9cbiAzNDg6XHQgKiBAcGFnZTogdGhlIHBhZ2VcbiAzNDk6XHQgKlxuIDM1MDpcdCAqIExvb2sgdXAgdGhlIGNsb3Nlc3Qgb25saW5lIGFuY2VzdG9yIG9mIHRoZSBtZW1vcnkgY2dyb3VwIEBwYWdlIGlzIGNoYXJnZWQgdG9cbiAzNTE6XHQgKiBhbmQgcmV0dXJuIGl0cyBpbm9kZSBudW1iZXIgb3IgMCBpZiBAcGFnZSBpcyBub3QgY2hhcmdlZCB0byBhbnkgY2dyb3VwLiBJdFxuIDM1MjpcdCAqIGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBAcGFnZS5cbiAzNTM6XHQgKlxuIDM1NDpcdCAqIE5vdGUsIHRoaXMgZnVuY3Rpb24gaXMgaW5oZXJlbnRseSByYWN5LCBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcHJldmVudFxuIDM1NTpcdCAqIHRoZSBjZ3JvdXAgaW5vZGUgZnJvbSBnZXR0aW5nIHRvcm4gZG93biBhbmQgcG90ZW50aWFsbHkgcmVhbGxvY2F0ZWQgYSBtb21lbnRcbiAzNTY6XHQgKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxuIDM1NzpcdCAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cbiAzNTg6XHQgKi9cbiAzNTk6XHRpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4gMzYwOlx0e1xuIDM2MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiAzNjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiAzNjM6XHRcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcbiAzNjQ6XHRcbiAzNjU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzNjY6XHRcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXG4gMzY3Olx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gMzY4Olx0XHQvKlxuIDM2OTpcdFx0ICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZ1xuIDM3MDpcdFx0ICogbWVtY2dfZGF0YSwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGUgYWNxdWlyZSBsb2FkIHBhaXJzIHdpdGggdGhlXG4gMzcxOlx0XHQgKiByZWxlYXNlIHN0b3JlIGluIGZvbGlvX3JlZl91bmZyZWV6ZSgpIGFuZCBtYWtlcyB0aGF0IG1ldGFkYXRhXG4gMzcyOlx0XHQgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLlxuIDM3MzpcdFx0ICovXG4gMzc0Olx0XHRpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSlcbiAzNzU6XHRcdFx0Z290byB1bmxvY2s7XG4gMzc2Olx0XG4gMzc3Olx0XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbiAzNzg6XHRcbiAzNzk6XHRcdHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIWNzc19pc19vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbiAzODA6XHRcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gMzgxOlx0XHRpZiAobWVtY2cpXG4gMzgyOlx0XHRcdGlubyA9IGNncm91cF9pbm8obWVtY2ctXHUwMDNlY3NzLmNncm91cCk7XG4gMzgzOlx0dW5sb2NrOlxuIDM4NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzg1Olx0XHRyZXR1cm4gaW5vO1xuIDM4NjpcdH1cbiAzODc6XHRFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xuIDM4ODpcdFxuIDM4OTpcdC8qIFN1YnNldCBvZiBub2RlX3N0YXRfaXRlbSBmb3IgbWVtY2cgc3RhdHMgKi9cbiAzOTA6XHRzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuIDM5MTpcdFx0TlJfSU5BQ1RJVkVfQU5PTixcbiAzOTI6XHRcdE5SX0FDVElWRV9BTk9OLFxuIDM5MzpcdFx0TlJfSU5BQ1RJVkVfRklMRSxcbiAzOTQ6XHRcdE5SX0FDVElWRV9GSUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBUaGUgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBidXJpZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHBhZ2VfY2dyb3VwX2lub2AsIGdldHMgY2FsbGVkIGRpcmVjdGx5IHdoZW4gcmVhZGluZyBgL3Byb2Mva3BhZ2VjZ3JvdXBgIHZpYSBwcm9jZnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBQbHVzLCBpdCYjMzk7cyBhbHNvIHVzZWQgaW4gYGh3cG9pc29uLWluamVjdC5jYC4gVGhhdCBnaXZlcyBpdCBzb21lIHNvbGlkIHByZXNlbmNlLiBTbywgeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCk5leHQsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIE1NIGxvZ2ljLCBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgYW5kIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZm9saW8gc3BsaXRzIGFuZCBtZW1jZyBtZXRhZGF0YSByZWFkcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgUkNVIHJlYWQgbG9ja3MsIG1lbW9yeSBvcmRlcmluZywgYW5kIHVuZnJlZXplIG9wZXJhdGlvbnMuIFRoaXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZpbmRpbmcgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5LXJlbGF0ZWQgYnVncy4gR2l2ZW4gdGhhdCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoeSBvZiBzb21lIGZ1enppbmcgZWZmb3J0cy4KCkZpbmFsbHksIHdoYXQgY29uZmlndXJhdGlvbnMgZG8gd2UgbmVlZCB0byB0cmlnZ2VyIHRoaXM/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIGBNRU1DR2AgaXMgZW5hYmxlZCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBkb25lIGluIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYC4gV2UmIzM5O2xsIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgYE1FTUNHYCBhbmQgYC9wcm9jL2twYWdlY2dyb3VwYCBpbiB0aG9zZSBmaWxlcyB0byBlc3RhYmxpc2ggdGhlIG5lZWRlZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYC9wcm9jL3BhZ2UuY2AgZmlsZSBpcyBjb25maWd1cmVkLiBUbyBkbyB0aGlzIHByb3Blcmx5LCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uIGFuZCBwYXJhbWV0ZXJzLgoKRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGl0JiMzOTtzIGdvdCBpdHMgb3duIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBgZnMvcHJvY2AgZGlyZWN0b3J5IGl0c2VsZi4gU28sIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUgb3IgYGZzL3Byb2MvTWFrZWZpbGVgIOKAkyBkZXBlbmRpbmcgb24gaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBpdCDigJMgZm9yIGFueSBjbHVlcyByZWdhcmRpbmcgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9MzY9cHJvYy0kKENPTkZJR19QUklOVEspXHQmIzQzOz0ga21zZy5vXG5mcy9wcm9jL01ha2VmaWxlOjM3OnByb2MtJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpXHQmIzQzOz0gcGFnZS5vXG5mcy9wcm9jL01ha2VmaWxlLTM4LXByb2MtJChDT05GSUdfQk9PVF9DT05GSUcpXHQmIzQzOz0gYm9vdGNvbmZpZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgcGFnZSBtb25pdG9yaW5nLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzIEkgc2hvdWxkIGZvY3VzIG9uLiBUaGF0IHRyaWdnZXJzIGEgbWVudGFsIG5vdGUgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAsIHBhcnRpY3VsYXJseSBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLCByaWdodCB3aXRoaW4gdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGZlYXR1cmUgd291bGQgYmUgdGhlIHJpZ2h0IGxvY2F0aW9uIHRvIHN0YXJ0IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnPTgzPWNvbmZpZyBTWVNDVExcbi0tXG5mcy9wcm9jL0tjb25maWctMTAwLVxuZnMvcHJvYy9LY29uZmlnOjEwMTpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvS2NvbmZpZy0xMDItIFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBrcGFnZWNncm91cF9yZWFkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGtwYWdlY2dyb3VwX3JlYWRgIGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgYHBhZ2VfY2dyb3VwX2lub2AuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCBga3BhZ2VfcmVhZGAgYXMgaXQgc2VlbXMgcmVsYXRlZC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIHZlcmlmeSB0aGV5IGFyZSBub3QgYmVpbmcgaW5saW5lZC4KCk9rYXksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAgaXMgaW5saW5lZCwgc28gSSBjYW4gc2FmZWx5IG5hcnJvdyBteSBmb2N1cyBkb3duIHRvIGBwYWdlX2Nncm91cF9pbm9gIGFuZCBga3BhZ2VjZ3JvdXBfcmVhZGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgcGFnZV9jZ3JvdXBfaW5vYC4KClJpZ2h0LCBsZXQmIzM5O3MgZXhhbWluZSB3aGVyZSBgcGFnZV9jZ3JvdXBfaW5vYCBpcyBhY3R1YWxseSBjYWxsZWQuIEl0IGFwcGVhcnMgaW4gYGZzL3Byb2MvcGFnZS5jYCB2aWEgYGtwYWdlX3JlYWRgIGFuZCBga3BhZ2VjZ3JvdXBfcmVhZGAsIGFuZCBpbnRlcmVzdGluZ2x5LCBgbW0vaHdwb2lzb24taW5qZWN0LmNgIGFsc28gY2FsbHMgaXQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZnMgaW5qZWN0aW9uIG1lY2hhbmlzbS4gVGhhdCYjMzk7cyBhIGdvb2QgaGVhZHMgdXA7IEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKU28sIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnk6IGBwYWdlX2Nncm91cF9pbm9gIGlzIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gYGtwYWdlY2dyb3VwX3JlYWRgIGluIGBmcy9wcm9jL3BhZ2UuY2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gcHJvY2ZzIHRoYXQgdWx0aW1hdGVseSBjYWxscyBga3BhZ2VfcmVhZGAsIHdoaWNoIHRoZW4gY2FsbHMgYHBhZ2VfY2dyb3VwX2lub2AuCgpOb3cgbGV0JiMzOTtzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IHdvcmtpbmcgYXNzdW1wdGlvbiBpcyB0aGF0IEkmIzM5O2xsIG5lZWQgYE1FTUNHYCwgYW5kIHRoZW4gSSBuZWVkIHRvIGNoZWNrIGBQUk9DX1BBR0VfTU9OSVRPUmAsIGFuZCBwb3NzaWJseSBgUFJPQ19GU2AsIGJ1dCBgUFJPQ19QQUdFX01PTklUT1JgIHR5cGljYWxseSBkZXBlbmRzIG9uIGBQUk9DX0ZTYCBhbmQgYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYC4gSSBuZWVkIHRvIGxvb2sgaW50byBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgYW55IHN1cnJvdW5kaW5nIGNvbnRleHQuIEkmIzM5O2xsIGNoZWNrIGFyb3VuZCBgY29uZmlnIE1FTUNHYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBpbnRvIGBmcy9wcm9jL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBhcm91bmQgbGluZSAxMDAuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBwcm9jIGZpbGVzeXN0ZW0gaXMgY29uZmlndXJlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGltcG9ydGFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIG9yIG1heWJlIGV2ZW4gYW4gb3B0aW9uIEkmIzM5O3ZlIG92ZXJsb29rZWQuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBjb25maWd1cmF0aW9uIGtub2JzIGFyZSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFx0ICBvcHRpb24gd2lsbCBlbmxhcmdlIHRoZSBrZXJuZWwgYnkgYXQgbGVhc3QgOCBLQi5cbiAgOTY6XHRcbiAgOTc6XHRcdCAgQXMgaXQgaXMgZ2VuZXJhbGx5IGEgZ29vZCB0aGluZywgeW91IHNob3VsZCBzYXkgWSBoZXJlIHVubGVzc1xuICA5ODpcdFx0ICBidWlsZGluZyBhIGtlcm5lbCBmb3IgaW5zdGFsbC9yZXNjdWUgZGlza3Mgb3IgeW91ciBzeXN0ZW0gaXMgdmVyeVxuICA5OTpcdFx0ICBsaW1pdGVkIGluIG1lbW9yeS5cbiAxMDA6XHRcbiAxMDE6XHRjb25maWcgUFJPQ19QQUdFX01PTklUT1JcbiAxMDI6XHQgXHRkZWZhdWx0IHlcbiAxMDM6XHRcdGRlcGVuZHMgb24gUFJPQ19GUyBcdTAwMjZcdTAwMjYgTU1VXG4gMTA0Olx0XHRib29sIFwmIzM0O0VuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmdcJiMzNDsgaWYgRVhQRVJUXG4gMTA1Olx0IFx0aGVscFxuIDEwNjpcdFx0ICBWYXJpb3VzIC9wcm9jIGZpbGVzIGV4aXN0IHRvIG1vbml0b3IgcHJvY2VzcyBtZW1vcnkgdXRpbGl6YXRpb246XG4gMTA3Olx0XHQgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLFxuIDEwODpcdFx0ICAvcHJvYy9rcGFnZWNvdW50LCBhbmQgL3Byb2Mva3BhZ2VmbGFncy4gRGlzYWJsaW5nIHRoZXNlXG4gMTA5Olx0XHQgIGludGVyZmFjZXMgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBhcHByb3hpbWF0ZWx5IDRrYi5cbiAxMTA6XHRcbiAxMTE6XHRjb25maWcgUFJPQ19DSElMRFJFTlxuIDExMjpcdFx0Ym9vbCBcJiMzNDtJbmNsdWRlIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS90YXNrL1x1MDAzY3RpZFx1MDAzZS9jaGlsZHJlbiBmaWxlXCYjMzQ7XG4gMTEzOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAxMTQ6XHRcdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1OAoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBJJiMzOTt2ZSBnb3QgdGhpcy4gVGhlIHNpdHVhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQuIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gdHJ1ZSwgYW5kIEkgY29uY3VyLiBUaGlzIHBhdGNoIHRhcmdldHMgdGhlIGBwYWdlX2Nncm91cF9pbm8oKWAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCYjMzk7cyBpbXBsZW1lbnRpbmcgYW4gYGFjcXVpcmVgIG1lbW9yeSBvcmRlcmluZyBkdXJpbmcgYSByZWFkIG9mIHRoZSBmb2xpbyByZWZjb3VudCwgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgLiBUaGlzIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIG1ldGFkYXRhIHZpc2liaWxpdHksIHNwZWNpZmljYWxseSB0aGluZ3MgbGlrZSBgbWVtY2dfZGF0YWAsIGR1cmluZyB0aGUgZm9saW8gc3BsaXR0aW5nIHByb2Nlc3MuCgpUaGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyAqcmVhY2hhYmxlKiB2aWEgYC9wcm9jL2twYWdlY2dyb3VwYC4gYC9wcm9jL2twYWdlY2dyb3VwYCBpcyBrbm93biB0byBleHBvc2Uga2VybmVsIGludGVybmFscy4gVGhhdCBhY2Nlc3Mgcm91dGUgaXMgdGhlIHBlcmZlY3QgdmVjdG9yIGZvciBleHBvc2luZyBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgd2hpY2ggYXJlIHRoZSBleGFjdCBraW5kIG9mIGJ1Z3MgZnV6emluZyBpcyBkZXNpZ25lZCB0byBmaW5kLgoKV2UmIzM5O3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBNRU1DRyBhbmQgUFJPQ19QQUdFX01PTklUT1IuIFRoYXQmIzM5O3MgZXNzZW50aWFsIGZvciBnZXR0aW5nIHRoaXMgY29kZSBwYXRoIHRvIGV2ZW4gZXhlY3V0ZS4gQWxzbywgZm9jdXNpbmcgb24gYHBhZ2VfY2dyb3VwX2lub2AgYW5kIGBrcGFnZWNncm91cF9yZWFkYCBpcyBzcG90LW9uLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuIFRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9jZ3JvdXBfaW5vJiMzNDssCiAgICAmIzM0O2twYWdlY2dyb3VwX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZV9jZ3JvdXBfaW5vKCkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobW0vbWVtY29udHJvbC5jKSB0byBhZGQgYWNxdWlyZSBtZW1vcnkgb3JkZXJpbmcgKGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKCkpIHdoZW4gY2hlY2tpbmcgZm9saW8gcmVmY291bnRzLCBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZm9saW8gc3BsaXRzIHdoZW4gYWNjZXNzaW5nIG1lbWNnIG1ldGFkYXRhLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL2twYWdlY2dyb3VwIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VfY2dyb3VwX2lubyYjMzQ7LAogICAgJiMzNDtrcGFnZWNncm91cF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2VfY2dyb3VwX2lubygpIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbWNvbnRyb2wuYykgdG8gYWRkIGFjcXVpcmUgbWVtb3J5IG9yZGVyaW5nIChmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpKSB3aGVuIGNoZWNraW5nIGZvbGlvIHJlZmNvdW50cywgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZvbGlvIHNwbGl0cyB3aGVuIGFjY2Vzc2luZyBtZW1jZyBtZXRhZGF0YS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9rcGFnZWNncm91cCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgYmFycmllci9zeW5jaHJvbml6YXRpb24gY2hlY2sgKGBmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpYCkgaW4gYHBhZ2VfY2dyb3VwX2lubygpYCB0byBlbnN1cmUgbWV0YWRhdGEgaXMgdmlzaWJsZSBhZnRlciBmb2xpbyBzcGxpdHRpbmcgYW5kIHByZXZlbnQgcmFjeSBhY2Nlc3Mgd2hlbiBmb2xpb3MgYXJlIGZyb3plbi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlubyA9IDBgLCBgZm9saW9gLCBgbWVtY2dgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBvcGVyYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaAppbmRleCA5ZjVjNzVkMDZmNzY4Li40MDEzMzAzMDdiYzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oCkBAIC0xMDcsNiAmIzQzOzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gcGFnZV9yZWZfY291bnQoJmFtcDtmb2xpby0mZ3Q7cGFnZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnRfYWNxdWlyZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoJmFtcDtmb2xpby0mZ3Q7X3JlZmNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzU4LDE3ICYjNDM7MzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICovCiBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAkvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqLwotCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2socGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJLyoKJiM0MzsJICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZwomIzQzOwkgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGUKJiM0MzsJICogcmVsZWFzZSBzdG9yZSBpbiBmb2xpb19yZWZfdW5mcmVlemUoKSBhbmQgbWFrZXMgdGhhdCBtZXRhZGF0YQomIzQzOwkgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiAKIAl3aGlsZSAobWVtY2cgJmFtcDsmYW1wOyAhY3NzX2lzX29ubGluZSgmYW1wO21lbWNnLSZndDtjc3MpKQogCQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKIAlpZiAobWVtY2cpCiAJCWlubyA9IGNncm91cF9pbm8obWVtY2ctJmd0O2Nzcy5jZ3JvdXApOwomIzQzO3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gaW5vOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIG1pZ2h0IGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBzY3J1dGluaXplIGhvdyB0aGV5IGludGVyYWN0IHdpdGggbWVtb3J5LgoKRmlyc3QsIEkgc2VlIGEgbmV3IGlubGluZSBoZWxwZXIsIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAsIGFkZGVkIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhgLiBJdCYjMzk7cyBhIHNpbXBsZSBhdG9taWMgcmVhZCwgbGlrZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBOb3RoaW5nIGluaGVyZW50bHkgY29uY2VybmluZyB0aGVyZSBvbiBpdHMgb3duLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKndoeSogaXQmIzM5O3MgYmVpbmcgdXNlZC4KClRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb24gdG8gYHBhZ2VfY2dyb3VwX2lub2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gaW50aW1hdGVseS4gVGhlIGFkZGl0aW9uIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgJiMzNDthZnRlci1zcGxpdCBmb2xpb3MmIzM0OyBhbmQgZW5zdXJpbmcgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZyBgbWVtY2dfZGF0YWAsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBhY2Nlc3NlZC4KClRoZSBrZXkgbGluZSB0aGF0IGdyYWJzIG15IGF0dGVudGlvbiBpcyBgaWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpYC4gVGhpcyBhcHBlYXJzIHRvIGJlIGEgY2hlY2sgZm9yIHRoZSBmb2xpbyYjMzk7cyByZWZlcmVuY2UgY291bnQuIE15IHN1c3BpY2lvbiBpcyB0aGF0IHRoaXMgaXMgYSByYWNlLWNvbmRpdGlvbiBtaXRpZ2F0aW9uLCBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gbWlnaHQgZXhpdCBpZiB0aGUgZm9saW8gaXNuJiMzOTt0IGluIGEgdmFsaWQgc3RhdGUuCgpUaGUgY29tbWVudCBhYm91dCB0aGUgJiMzNDthY3F1aXJlIGxvYWQmIzM0OyBhbmQgJiMzNDtyZWxlYXNlIHN0b3JlJiMzNDsgaW4gYGZvbGlvX3JlZl91bmZyZWV6ZSgpYCBzdWdnZXN0cyB0aGlzIGFjcXVpcmUgaXMgcGFydCBvZiBhIHN5bmNocm9uaXphdGlvbiBzdHJhdGVneSB0byBtYWtlIG1lbWNnLXJlbGF0ZWQgbWV0YWRhdGEgdmlzaWJsZS4gVGhlIGxvZ2ljIGZsb3cgaXMgaW1wb3J0YW50IGhlcmU6IGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXNuJiMzOTt0IGFjcXVpcmVkLCB0aGVuIGl0IGdvZXMgdG8gdW5sb2NrLCB3aGljaCBpcyBhIHJldHVybi4KClRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBsb29rIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYHBhZ2VfY2dyb3VwX2lub2AuIEhvdyBpcyBpdCBjYWxsZWQ/IFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGluIHZhcmlvdXMgc2NlbmFyaW9zPyBJJiMzOTtsbCBwcm9iYWJseSBncmFiIGBncmVwcGVyYCBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0LiBBIGRpcmVjdCBmaWxlIHJlYWQgbWF5IGFsc28gYmUgZnJ1aXRmdWwuIFVuZGVyc3RhbmRpbmcgdGhvc2UgaW50ZXJhY3Rpb25zIGlzIGNydWNpYWwgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IGR1cmluZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBtYXkgZXhpc3QgZ2l2ZW4gdGhpcyBsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2Nncm91cF9pbm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9wYWdlLmM9NjE9c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL3BhZ2UuYy05NS1cdFx0XHRjYXNlIEtQQUdFX0NHUk9VUDpcbmZzL3Byb2MvcGFnZS5jOjk2Olx0XHRcdFx0aW5mbyA9IHBhZ2VfY2dyb3VwX2lubyhwYWdlKTtcbmZzL3Byb2MvcGFnZS5jLTk3LVx0XHRcdFx0YnJlYWs7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg4OTppbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODkwLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4Njc9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3Mi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NzM6c3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODc0LXtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaD0yNzQ9VFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yODQtXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6Mjg1Olx0XHRfX2ZpZWxkKHU2NCxcdFx0cGFnZV9jZ3JvdXBfaW5vKVxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMjg2LVx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdG1lbWNnX2lkKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI5OS1cdFx0cmN1X3JlYWRfbG9jaygpO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzAwOlx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXApO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzAxLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDMtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDozMDQ6XHRUUF9wcmludGsoXCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcJiMzNDssXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDUtXHRcdF9fZW50cnktXHUwMDNlbmFtZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDktXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lubyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oOjMxMDpcdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm9cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMxMS1cdClcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz02OT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl90YXNrKHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTczLVxubW0vaHdwb2lzb24taW5qZWN0LmM6NzQ6XHRpZiAocGFnZV9jZ3JvdXBfaW5vKHApICE9IGh3cG9pc29uX2ZpbHRlcl9tZW1jZylcbm1tL2h3cG9pc29uLWluamVjdC5jLTc1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDYtLyoqXG5tbS9tZW1jb250cm9sLmM6MzQ3OiAqIHBhZ2VfY2dyb3VwX2lubyAtIHJldHVybiBpbm9kZSBudW1iZXIgb2YgdGhlIG1lbWNnIGEgcGFnZSBpcyBjaGFyZ2VkIHRvXG5tbS9tZW1jb250cm9sLmMtMzQ4LSAqIEBwYWdlOiB0aGUgcGFnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTUtICogdGhlIGNncm91cCBpbm9kZSBmcm9tIGdldHRpbmcgdG9ybiBkb3duIGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlZCBhIG1vbWVudFxubW0vbWVtY29udHJvbC5jOjM1NjogKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxubW0vbWVtY29udHJvbC5jLTM1Ny0gKiBkbyBub3QgY2FyZSAoc3VjaCBhcyBwcm9jZnMgaW50ZXJmYWNlcykuXG5tbS9tZW1jb250cm9sLmMtMzU4LSAqL1xubW0vbWVtY29udHJvbC5jOjM1OTppbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS9tZW1jb250cm9sLmMtMzYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzg2LX1cbm1tL21lbWNvbnRyb2wuYzozODc6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jZ3JvdXBfaW5vKTtcbm1tL21lbWNvbnRyb2wuYy0zODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzgKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogOTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEEgQ29uY3VycmVuY3kgRml4LCBOb3QgYW4gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgcGFnZV9jZ3JvdXBfaW5vYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYC9wcm9jL2twYWdlY2dyb3VwYCBhbmQgYGh3cG9pc29uX2ZpbHRlcl90YXNrYC4gVGhlIGNvcmUgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLCB3aGVyZSB0aGUgcmVmY291bnQgbWlnaHQgYmUgemVybyAoZnJvemVuKSBhbmQgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgKGBtZW1jZ19kYXRhYCkgY291bGQgYmUgdW5pbml0aWFsaXplZC4KClRoaXMgcGF0Y2ggYWRkcyBhbiBhY3F1aXJlIGxvYWQgb24gYF9yZWZjb3VudGAgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKWAuIElmIGl0JiMzOTtzIHplcm8sIHdlIHJldHVybiBgMGAgZm9yIGBpbm9gLCBlZmZlY3RpdmVseSBza2lwcGluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuIEFoYSEgSXQmIzM5O3MgKnByZXZlbnRpbmcqIHRoZSByZWFkLCBub3QgaW50cm9kdWNpbmcgaXQuIEl0JiMzOTtzIGEgc3luY2hyb25pemF0aW9uL2NvbmN1cnJlbmN5IGZpeCDigJMgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIHJlbGVhc2Ugc3RvcmUgb2YgYGZvbGlvX3JlZl91bmZyZWV6ZSgpYC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgaXRzZWxmOgoKKiAgIGB1bnNpZ25lZCBsb25nIGlubyA9IDA7YCDigJMgSW5pdGlhbGl6ZWQgdG8gemVyby4KKiAgIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtgIOKAkyBUaGlzIGdldHMgYSB2YWxpZCBmb2xpbyBwb2ludGVyLgoqICAgYGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKSBnb3RvIHVubG9jaztgIOKAkyBSZXR1cm5zIGBpbm9gICh3aGljaCBpcyAwKSBpZiB0aGUgZm9saW8gaXMgZnJvemVuLCBza2lwcGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuCiogICBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmVgIHJlYWRzIGAmYW1wO2ZvbGlvLSZndDtfcmVmY291bnRgIGF0b21pY2FsbHksIHdpdGggYWNxdWlyZSBzZW1hbnRpY3MuCgpTbywgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIGFuZCBub3RoaW5nIGlzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSXQgYXBwZWFycyB0aGF0IGBmb2xpb19tZW1jZ19jaGVjayhmb2xpbylgIGlzIG9ubHkgY2FsbGVkIGFmdGVyIHRoZSByZWZjb3VudCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlcmVmb3JlIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcuLi4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIEtNU0FOIGd1aWRlbGluZXMuIFdlIG5lZWQgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5KiBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aGVyZSB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgbGF0ZXIuIE9yLCBpZiBpdCBjaGFuZ2VzIGJvdW5kcy9sZW5ndGhzLgoKVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgYSBtZW1vcnkgb3JkZXJpbmcgZml4LCB1c2luZyBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWAgdG8gZW5zdXJlIGEgZm9saW8gaXNuJiMzOTt0IGZyb3plbiBiZWZvcmUgYWNjZXNzaW5nIGl0cyBtZXRhZGF0YS4gQWxsIHZhcmlhYmxlcyBhcmUgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIG9yIHNraXBwZWQgaWYgbm90IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHZlcnkgc3RyYWlnaHRmb3J3YXJkLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHF1aWNrbHk6IGBpbm9gIGlzIHplcm87IGBmb2xpb2AgaXMgaW5pdGlhbGl6ZWQgYnkgYHBhZ2VfZm9saW8ocGFnZSlgOyBpZiBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pYCBpcyAwLCB3ZSBqdW1wIHRvIHVubG9jay4gSWYgbm90LCBpdCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYC4gRXZlcnl0aGluZyBpcyBjbGVhbiwgYW5kIHRoZSBpbnRlbnQgaXMgY2xlYXIuCgpBbHJpZ2h0LCB0aW1lIHRvIHJ1biB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBiYXJyaWVyL3N5bmNocm9uaXphdGlvbiBjaGVjayAoYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgKSBpbiBgcGFnZV9jZ3JvdXBfaW5vKClgIHRvIGVuc3VyZSBtZXRhZGF0YSBpcyB2aXNpYmxlIGFmdGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcHJldmVudCByYWN5IGFjY2VzcyB3aGVuIGZvbGlvcyBhcmUgZnJvemVuLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaW5vID0gMGAsIGBmb2xpb2AsIGBtZW1jZ2ApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MTkuNDM4MzIwMzk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NDIzMDAxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9jZ3JvdXBfaW5vXCIsXG4gICAgXCJrcGFnZWNncm91cF9yZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2VfY2dyb3VwX2lubygpIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbWNvbnRyb2wuYykgdG8gYWRkIGFjcXVpcmUgbWVtb3J5IG9yZGVyaW5nIChmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpKSB3aGVuIGNoZWNraW5nIGZvbGlvIHJlZmNvdW50cywgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZvbGlvIHNwbGl0cyB3aGVuIGFjY2Vzc2luZyBtZW1jZyBtZXRhZGF0YS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9rcGFnZWNncm91cCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MTkuNDM4MzI3Nzg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NDk0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTY6Mzg6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oIGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oXFxuaW5kZXggOWY1Yzc1ZDA2Zjc2OC4uNDAxMzMwMzA3YmM1ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcXG5AQCAtMTA3LDYgKzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIHBhZ2VfcmVmX2NvdW50KFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VfcmVmY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjI5NzFlNWUwZWNlMWYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTM1OCwxNyArMzU4LDI5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKi9cXG4gaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0dW5zaWduZWQgbG9uZyBpbm8gPSAwO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHQvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqL1xcbi1cXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKHBhZ2VfZm9saW8ocGFnZSkpO1xcbitcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdC8qXFxuK1xcdCAqIEFmdGVyLXNwbGl0IGZvbGlvcyByZW1haW4gZnJvemVuIHVudGlsIHRoZWlyIG1ldGFkYXRhLCBpbmNsdWRpbmdcXG4rXFx0ICogbWVtY2dfZGF0YSwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGUgYWNxdWlyZSBsb2FkIHBhaXJzIHdpdGggdGhlXFxuK1xcdCAqIHJlbGVhc2Ugc3RvcmUgaW4gZm9saW9fcmVmX3VuZnJlZXplKCkgYW5kIG1ha2VzIHRoYXQgbWV0YWRhdGFcXG4rXFx0ICogdmlzaWJsZSB0byB0aGlzIGNhbGxlci5cXG4rXFx0ICovXFxuK1xcdGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xcbiBcXG4gXFx0d2hpbGUgKG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfb25saW5lKFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSlcXG4gXFx0XFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuIFxcdGlmIChtZW1jZylcXG4gXFx0XFx0aW5vID0gY2dyb3VwX2lubyhtZW1jZy1cXHUwMDNlY3NzLmNncm91cCk7XFxuK3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBpbm87XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MjAuMDA1ODc2NzM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozOTI2MDM3MzAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX2Nncm91cF9pbm9cIixcbiAgICBcImtwYWdlY2dyb3VwX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDNkODlmODgzNTRlYmU5NzdlZTUzZjVhZjRkOWI2YzM1MDEyYWEzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTY6Mzg6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbmluZGV4IDlmNWM3NWQwNmY3NjguLjQwMTMzMDMwN2JjNWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuQEAgLTEwNyw2ICsxMDcsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gcGFnZV9yZWZfY291bnQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2Zm9saW8tXHUwMDNlX3JlZmNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZm9saW9fcmVmX2NvdW50KHBhZ2VfZm9saW8ocGFnZSkpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMjk3MWU1ZTBlY2UxZiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzU4LDE3ICszNTgsMjkgQEAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICovXG4gaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHR1bnNpZ25lZCBsb25nIGlubyA9IDA7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBwYWdlX2ZvbGlvKCkgaXMgcmFjeSBoZXJlLCBidXQgdGhlIGVudGlyZSBmdW5jdGlvbiBpcyByYWN5IGFueXdheSAqL1xuLVx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhwYWdlX2ZvbGlvKHBhZ2UpKTtcbitcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdC8qXG4rXHQgKiBBZnRlci1zcGxpdCBmb2xpb3MgcmVtYWluIGZyb3plbiB1bnRpbCB0aGVpciBtZXRhZGF0YSwgaW5jbHVkaW5nXG4rXHQgKiBtZW1jZ19kYXRhLCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoZSBhY3F1aXJlIGxvYWQgcGFpcnMgd2l0aCB0aGVcbitcdCAqIHJlbGVhc2Ugc3RvcmUgaW4gZm9saW9fcmVmX3VuZnJlZXplKCkgYW5kIG1ha2VzIHRoYXQgbWV0YWRhdGFcbitcdCAqIHZpc2libGUgdG8gdGhpcyBjYWxsZXIuXG4rXHQgKi9cbitcdGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuIFxuIFx0d2hpbGUgKG1lbWNnIFx1MDAyNlx1MDAyNiAhY3NzX2lzX29ubGluZShcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpKVxuIFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiBcdGlmIChtZW1jZylcbiBcdFx0aW5vID0gY2dyb3VwX2lubyhtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwKTtcbit1bmxvY2s6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBpbm87XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MjAuMDA1ODc3OTk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE5ODA0Mjg4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRGV0YWlsZWQgQnJlYWtkb3duKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZW0sIHNvIEknbGwgc3RhcnQgd2l0aCB0aGUgZGlmZiBpdHNlbGYuIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oYCDigJMgdGhhdCdzIHRoZSBhZGRpdGlvbiBvZiBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWAuIEludGVyZXN0aW5nLCBsaWtlbHkgc29tZSByZWZjb3VudGluZyBtYW5pcHVsYXRpb24gdG8gcHJldmVudCByYWNlcywgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZW4sIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcGFnZV9jZ3JvdXBfaW5vKClgIGZ1bmN0aW9uLlxuXG5UaGUgcGF0Y2ggYWx0ZXJzIGhvdyBgcGFnZV9jZ3JvdXBfaW5vKClgIHdvcmtzLiBJdCdzIG5vdyBjYWxsaW5nIGBmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7YCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBpbnRyb2R1Y2luZyBhIGNhbGwgdG8gYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKWAuIFRoaXMgaXMgY2xlYXJseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGl0J3MgdHJ5aW5nIHRvIHNvbHZlLiBJZiB0aGF0IGFjcXVpc2l0aW9uIGZhaWxzLCBpdCBqdW1wcyB0byBgdW5sb2NrYCwgYXZvaWRpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGBmb2xpb19tZW1jZ19jaGVjayhmb2xpbylgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoaXMgaXMgYWltZWQgYXQgbWl0aWdhdGluZyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBmb2xpbyBzcGxpdHMsIHByb2JhYmx5IHdoZW4gdGhlIG1ldGFkYXRhLCBzcGVjaWZpY2FsbHkgYG1lbWNnX2RhdGFgLCBpcyBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQncyBwcm90ZWN0aW5nIGFnYWluc3QgYW4gaW52YWxpZCBhY2Nlc3MgdG8gYG1lbWNnX2RhdGFgIGR1cmluZyBmb2xpbyBzcGxpdC9tZXJnZSBvcGVyYXRpb24uXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gc2VlIHdoZXJlIGBwYWdlX2Nncm91cF9pbm9gIGlzIHVzZWQuIEknbGwgcmVhY2ggZm9yIGBncmVwcGVyYCBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhlbHAgbWUgY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MzEuOTg2MzA5MDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTY5ODk5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jZ3JvdXBfaW5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy05NS1cXHRcXHRcXHRjYXNlIEtQQUdFX0NHUk9VUDpcXG5mcy9wcm9jL3BhZ2UuYzo5NjpcXHRcXHRcXHRcXHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTk3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4ODk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3Mi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODczOnN0YXRpYyBpbmxpbmUgaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NzQte1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg9Mjc0PVRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yODQtXFx0XFx0X19maWVsZCh1NjQsXFx0XFx0Y2dyb3VwX2lubylcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDoyODU6XFx0XFx0X19maWVsZCh1NjQsXFx0XFx0cGFnZV9jZ3JvdXBfaW5vKVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI4Ni1cXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcXHRtZW1jZ19pZClcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI5OS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzAwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVxcdTAwM2Vjc3MuY2dyb3VwKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDEtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDMtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzA0OlxcdFRQX3ByaW50ayhcXFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcXFwiLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMwNS1cXHRcXHRfX2VudHJ5LVxcdTAwM2VuYW1lLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA5LVxcdFxcdF9fZW50cnktXFx1MDAzZWNncm91cF9pbm8sXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzEwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lub1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMxMS1cXHQpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz02OT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl90YXNrKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzMtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6NzQ6XFx0aWYgKHBhZ2VfY2dyb3VwX2lubyhwKSAhPSBod3BvaXNvbl9maWx0ZXJfbWVtY2cpXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0Ni0vKipcXG5tbS9tZW1jb250cm9sLmM6MzQ3OiAqIHBhZ2VfY2dyb3VwX2lubyAtIHJldHVybiBpbm9kZSBudW1iZXIgb2YgdGhlIG1lbWNnIGEgcGFnZSBpcyBjaGFyZ2VkIHRvXFxubW0vbWVtY29udHJvbC5jLTM0OC0gKiBAcGFnZTogdGhlIHBhZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTUtICogdGhlIGNncm91cCBpbm9kZSBmcm9tIGdldHRpbmcgdG9ybiBkb3duIGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlZCBhIG1vbWVudFxcbm1tL21lbWNvbnRyb2wuYzozNTY6ICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXRcXG5tbS9tZW1jb250cm9sLmMtMzU3LSAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cXG5tbS9tZW1jb250cm9sLmMtMzU4LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbWNvbnRyb2wuYy0zNjAte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTM4Ni19XFxubW0vbWVtY29udHJvbC5jOjM4NzpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xcbm1tL21lbWNvbnRyb2wuYy0zODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjM0LjA0MzMwNTI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NDMxNzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKlRyYWNpbmcgdGhlIGBwYWdlX2Nncm91cF9pbm9gIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHBhZ2VfY2dyb3VwX2lub2AgaXMgYmVpbmcgaW52b2tlZC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBmcy9wcm9jL3BhZ2UuY2AgZmlsZSBzaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcHJvYyBlbnRyeS4gTXkgY3VycmVudCB0YXNrIGlzIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgc28gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBhdCBgZnMvcHJvYy9wYWdlLmM6OTZgLiBMb29rcyBsaWtlIGl0J3Mgd2l0aGluIGBrcGFnZV9yZWFkYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgYEtQQUdFX0NHUk9VUGAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGVudHJ5LiBFc3NlbnRpYWxseSwgSSdtIHJlYWRpbmcgYGZzL3Byb2MvcGFnZS5jYCB3aXRoIHRoZSBzcGVjaWZpYyBwdXJwb3NlIG9mIHRyYWNraW5nIGRvd24gaG93IGFuZCB3aGVyZSB0aGlzIGBwYWdlX2Nncm91cF9pbm9gIGNhbGwgaXMgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODozNi4xMTc2MjU3MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3BhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc20uaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tem9uZS5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX2ZzLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VxX2ZpbGUuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gIDIwOlxcdFxcbiAgMjE6XFx0I2RlZmluZSBLUE1TSVpFIHNpemVvZih1NjQpXFxuICAyMjpcXHQjZGVmaW5lIEtQTU1BU0sgKEtQTVNJWkUgLSAxKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRlbnVtIGtwYWdlX29wZXJhdGlvbiB7XFxuICAyNTpcXHRcXHRLUEFHRV9GTEFHUyxcXG4gIDI2OlxcdFxcdEtQQUdFX0NPVU5ULFxcbiAgMjc6XFx0XFx0S1BBR0VfQ0dST1VQLFxcbiAgMjg6XFx0fTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tYXhfZHVtcF9wZm4odm9pZClcXG4gIDMxOlxcdHtcXG4gIDMyOlxcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXFxuICAzMzpcXHRcXHQvKlxcbiAgMzQ6XFx0XFx0ICogVGhlIG1lbW1hcCBvZiBlYXJseSBzZWN0aW9ucyBpcyBjb21wbGV0ZWx5IHBvcHVsYXRlZCBhbmQgbWFya2VkXFxuICAzNTpcXHRcXHQgKiBvbmxpbmUgZXZlbiBpZiBtYXhfcGZuIGRvZXMgbm90IGZhbGwgb24gYSBzZWN0aW9uIGJvdW5kYXJ5IC1cXG4gIDM2OlxcdFxcdCAqIHBmbl90b19vbmxpbmVfcGFnZSgpIHdpbGwgc3VjY2VlZCBvbiBhbGwgcGFnZXMuIEFsbG93IGluc3BlY3RpbmdcXG4gIDM3OlxcdFxcdCAqIHRoZXNlIG1lbW1hcHMuXFxuICAzODpcXHRcXHQgKi9cXG4gIDM5OlxcdFxcdHJldHVybiByb3VuZF91cChtYXhfcGZuLCBQQUdFU19QRVJfU0VDVElPTik7XFxuICA0MDpcXHQjZWxzZVxcbiAgNDE6XFx0XFx0cmV0dXJuIG1heF9wZm47XFxuICA0MjpcXHQjZW5kaWZcXG4gIDQzOlxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIHU2NCBnZXRfa3BhZ2VfY291bnQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuICA0NjpcXHR7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgcGFnZV9zbmFwc2hvdCBwcztcXG4gIDQ4OlxcdFxcdHU2NCByZXQ7XFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdHNuYXBzaG90X3BhZ2UoXFx1MDAyNnBzLCBwYWdlKTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxcbiAgNTM6XFx0XFx0XFx0cmV0ID0gZm9saW9fcHJlY2lzZV9wYWdlX21hcGNvdW50KFxcdTAwMjZwcy5mb2xpb19zbmFwc2hvdCxcXG4gIDU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBzLnBhZ2Vfc25hcHNob3QpO1xcbiAgNTU6XFx0XFx0ZWxzZVxcbiAgNTY6XFx0XFx0XFx0cmV0ID0gZm9saW9fYXZlcmFnZV9wYWdlX21hcGNvdW50KFxcdTAwMjZwcy5mb2xpb19zbmFwc2hvdCk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHJldHVybiByZXQ7XFxuICA1OTpcXHR9XFxuICA2MDpcXHRcXG4gIDYxOlxcdHN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuICA2MjpcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyxcXG4gIDYzOlxcdFxcdFxcdGVudW0ga3BhZ2Vfb3BlcmF0aW9uIG9wKVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBtYXhfZHVtcF9wZm4gPSBnZXRfbWF4X2R1bXBfcGZuKCk7XFxuICA2NjpcXHRcXHR1NjQgX191c2VyICpvdXQgPSAodTY0IF9fdXNlciAqKWJ1ZjtcXG4gIDY3OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAgNjg6XFx0XFx0dW5zaWduZWQgbG9uZyBzcmMgPSAqcHBvcztcXG4gIDY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbiAgNzA6XFx0XFx0c3NpemVfdCByZXQgPSAwO1xcbiAgNzE6XFx0XFx0dTY0IGluZm87XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdHBmbiA9IHNyYyAvIEtQTVNJWkU7XFxuICA3NDpcXHRcXHRpZiAoc3JjIFxcdTAwMjYgS1BNTUFTSyB8fCBjb3VudCBcXHUwMDI2IEtQTU1BU0spXFxuICA3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDc2OlxcdFxcdGlmIChzcmMgXFx1MDAzZT0gbWF4X2R1bXBfcGZuICogS1BNU0laRSlcXG4gIDc3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgNzg6XFx0XFx0Y291bnQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgKG1heF9kdW1wX3BmbiAqIEtQTVNJWkUpIC0gc3JjKTtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwM2UgMCkge1xcbiAgODE6XFx0XFx0XFx0LypcXG4gIDgyOlxcdFxcdFxcdCAqIFRPRE86IFpPTkVfREVWSUNFIHN1cHBvcnQgcmVxdWlyZXMgdG8gaWRlbnRpZnlcXG4gIDgzOlxcdFxcdFxcdCAqIG1lbW1hcHMgdGhhdCB3ZXJlIGFjdHVhbGx5IGluaXRpYWxpemVkLlxcbiAgODQ6XFx0XFx0XFx0ICovXFxuICA4NTpcXHRcXHRcXHRwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdFxcdGlmIChwYWdlKSB7XFxuICA4ODpcXHRcXHRcXHRcXHRzd2l0Y2ggKG9wKSB7XFxuICA4OTpcXHRcXHRcXHRcXHRjYXNlIEtQQUdFX0ZMQUdTOlxcbiAgOTA6XFx0XFx0XFx0XFx0XFx0aW5mbyA9IHN0YWJsZV9wYWdlX2ZsYWdzKHBhZ2UpO1xcbiAgOTE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5MjpcXHRcXHRcXHRcXHRjYXNlIEtQQUdFX0NPVU5UOlxcbiAgOTM6XFx0XFx0XFx0XFx0XFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgOTU6XFx0XFx0XFx0XFx0Y2FzZSBLUEFHRV9DR1JPVVA6XFxuICA5NjpcXHRcXHRcXHRcXHRcXHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5ODpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiAgOTk6XFx0XFx0XFx0XFx0XFx0aW5mbyA9IDA7XFxuIDEwMDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MzYuMTE3NzEzNDYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MTQ5NDc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGAvcHJvYy9rcGFnZWNncm91cGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbiBvZiBgL3Byb2Mva3BhZ2VjZ3JvdXBgLiBJIGtub3cgdGhhdCBgZnMvcHJvYy9wYWdlLmNgIGlzIGludm9sdmVkLCB0aGF0IHNlZW1zIGxvZ2ljYWwsIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgY3JlYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgb2YgYC9wcm9jL2twYWdlY2dyb3VwYC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIG9idmlvdXMgcGxhY2VzLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgd2l0aGluIHRoZSBgZnMvcHJvYy9gIGRpcmVjdG9yeSBpdHNlbGY7IHNwZWNpZmljYWxseSwgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCBJIG5lZWQsIHRoZSBjb25maWcgb3B0aW9uIHRoYXQgdHVybnMgdGhpcyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6MzguNDk5MjEwNDg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDg5MTIxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3BhZ2VjZ3JvdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9pZGxlX3BhZ2VfdHJhY2tpbmcucnN0PTUxPXdvcmtsb2FkIG9uZSBzaG91bGQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3QtNTUtICAgIGBgL3Byb2MvcGlkL3BhZ2VtYXBgYCBpZiB0aGUgd29ya2xvYWQgaXMgcmVwcmVzZW50ZWQgYnkgYSBwcm9jZXNzLCBvciBieVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaWRsZV9wYWdlX3RyYWNraW5nLnJzdDo1NjogICAgZmlsdGVyaW5nIG91dCBhbGllbiBwYWdlcyB1c2luZyBgYC9wcm9jL2twYWdlY2dyb3VwYGAgaW4gY2FzZSB0aGUgd29ya2xvYWRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3QtNTctICAgIGlzIHBsYWNlZCBpbiBhIG1lbW9yeSBjZ3JvdXAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3Q9NzE9U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3Q6NzI6YGAvcHJvYy9waWQvcGFnZW1hcGBgLCBgYC9wcm9jL2twYWdlZmxhZ3NgYCwgYW5kIGBgL3Byb2Mva3BhZ2VjZ3JvdXBgYC5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2lkbGVfcGFnZV90cmFja2luZy5yc3QtNzMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0PTY4PW51bWJlciBvZiB0aW1lcyBhIHBhZ2UgaXMgbWFwcGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDItXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdDoxMDM6ICogYGAvcHJvYy9rcGFnZWNncm91cGBgLiAgVGhpcyBmaWxlIGNvbnRhaW5zIGEgNjQtYml0IGlub2RlIG51bWJlciBvZiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0LTEwNC0gICBtZW1vcnkgY2dyb3VwIGVhY2ggcGFnZSBpcyBjaGFyZ2VkIHRvLCBpbmRleGVkIGJ5IFBGTi4gT25seSBhdmFpbGFibGUgd2hlblxcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VmbGFnc19wcm9jX29wcyA9IHtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTI2Ny0jaWZkZWYgQ09ORklHX01FTUNHXFxuZnMvcHJvYy9wYWdlLmM6MjY4OnN0YXRpYyBzc2l6ZV90IGtwYWdlY2dyb3VwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZnMvcHJvYy9wYWdlLmMtMjY5LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMjcyLX1cXG5mcy9wcm9jL3BhZ2UuYzoyNzM6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBrcGFnZWNncm91cF9wcm9jX29wcyA9IHtcXG5mcy9wcm9jL3BhZ2UuYy0yNzQtXFx0LnByb2NfZmxhZ3NcXHQ9IFBST0NfRU5UUllfUEVSTUFORU5ULFxcbmZzL3Byb2MvcGFnZS5jLTI3NS1cXHQucHJvY19sc2Vla1xcdD0gbWVtX2xzZWVrLFxcbmZzL3Byb2MvcGFnZS5jOjI3NjpcXHQucHJvY19yZWFkXFx0PSBrcGFnZWNncm91cF9yZWFkLFxcbmZzL3Byb2MvcGFnZS5jLTI3Ny19O1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjgwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yODQtI2lmZGVmIENPTkZJR19NRU1DR1xcbmZzL3Byb2MvcGFnZS5jOjI4NTpcXHRwcm9jX2NyZWF0ZShcXFwia3BhZ2VjZ3JvdXBcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2VjZ3JvdXBfcHJvY19vcHMpO1xcbmZzL3Byb2MvcGFnZS5jLTI4Ni0jZW5kaWZcXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy02Ny0jZGVmaW5lIFBST0NfS1BBR0VDT1VOVFxcdFxcdFxcXCIvcHJvYy9rcGFnZWNvdW50XFxcIlxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2ODojZGVmaW5lIFBST0NfS1BBR0VDR1JPVVBcXHRcXFwiL3Byb2Mva3BhZ2VjZ3JvdXBcXFwiXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY5LVxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jPTE4Nj1zdGF0aWMgaW50XFx0XFx0a3BhZ2Vjb3VudF9mZCA9IC0xO1xcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxODc6c3RhdGljIGludFxcdFxcdGtwYWdlY2dyb3VwX2ZkID0gLTE7XFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTE4OC1zdGF0aWMgaW50XFx0XFx0cGFnZV9pZGxlX2ZkID0gLTE7XFxuLS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM9Mjc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGtwYWdlZmxhZ3NfcmVhZCh1aW50NjRfdCAqYnVmLFxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTI4MS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM6MjgyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGtwYWdlY2dyb3VwX3JlYWQodWludDY0X3QgKmJ1ZixcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjgzLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsXFxuLS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjg1LXtcXG50b29scy9tbS9wYWdlLXR5cGVzLmM6Mjg2OlxcdGlmIChrcGFnZWNncm91cF9mZCBcXHUwMDNjIDApXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTI4Ny1cXHRcXHRyZXR1cm4gcGFnZXM7XFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTI4OC1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM6Mjg5OlxcdHJldHVybiBkb191NjRfcmVhZChrcGFnZWNncm91cF9mZCwgb3B0X2twYWdlZmxhZ3MsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTtcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMjkwLX1cXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYz02NjU9c3RhdGljIHZvaWQgd2Fsa19wZm4odW5zaWduZWQgbG9uZyB2b2Zmc2V0LFxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY3Ny1cXHQvKlxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2Nzg6XFx0ICoga3BhZ2VjZ3JvdXBfcmVhZCgpIHJlYWRzIG9ubHkgaWYga3BhZ2VjZ3JvdXAgd2VyZSBvcGVuZWQsIGJ1dFxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzo2Nzk6XFx0ICogL3Byb2Mva3BhZ2VjZ3JvdXAgbWlnaHQgZXZlbiBub3QgZXhpc3QsIHNvIGl0J3MgYmV0dGVyIHRvIGZpbGxcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtNjgwLVxcdCAqIHRoZW0gd2l0aCB6ZXJvcyBoZXJlLlxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY5Mi1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM6NjkzOlxcdFxcdGlmIChrcGFnZWNncm91cF9yZWFkKGNnaSwgaW5kZXgsIHBhZ2VzKSAhPSBwYWdlcylcXG50b29scy9tbS9wYWdlLXR5cGVzLmM6Njk0OlxcdFxcdFxcdGZhdGFsKFxcXCJrcGFnZWNncm91cCByZXR1cm5lZCBmZXdlciBwYWdlcyB0aGFuIGV4cGVjdGVkXFxcIik7XFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTY5NS1cXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYz05NzI9c3RhdGljIHZvaWQgd2Fsa19maWxlX3JhbmdlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCxcXG4tLVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0xMDMxLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMDMyOlxcdFxcdFxcdGlmICgha3BhZ2VjZ3JvdXBfcmVhZChcXHUwMDI2Y2dyb3VwLCBwZm4sIDEpKVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMDMzOlxcdFxcdFxcdFxcdGZhdGFsKFxcXCJrcGFnZWNncm91cF9yZWFkIGZhaWxlZFxcXCIpO1xcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYy0xMDM0LVxcdFxcdFxcdGlmICgha3BhZ2Vjb3VudF9yZWFkKFxcdTAwMjZtYXBjbnQsIHBmbiwgMSkpXFxuLS1cXG50b29scy9tbS9wYWdlLXR5cGVzLmM9MTI2OT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvbW0vcGFnZS10eXBlcy5jLTEzNDEtXFx0aWYgKG9wdF9jZ3JvdXAgfHwgb3B0X2xpc3RfY2dyb3VwKVxcbnRvb2xzL21tL3BhZ2UtdHlwZXMuYzoxMzQyOlxcdFxcdGtwYWdlY2dyb3VwX2ZkID0gY2hlY2tlZF9vcGVuKFBST0NfS1BBR0VDR1JPVVAsIE9fUkRPTkxZKTtcXG50b29scy9tbS9wYWdlLXR5cGVzLmMtMTM0My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYz0xNjg9c3RhdGljIGludCB0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24oY29uc3QgY2hhciAqcm9vdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTQtLypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM6MjE1OiAqIFRoZSB0ZXN0IHJlYWRzIHRoZSBlbnRpcmUgL3Byb2Mva3BhZ2VjZ3JvdXAuIElmIHRoZSBvcGVyYXRpb24gd2VudFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTYtICogc3VjY2Vzc2Z1bGx5IChhbmQgdGhlIGtlcm5lbCBkaWRuJ3QgcGFuaWMpLCB0aGUgdGVzdCBpcyB0cmVhdGVkIGFzIHBhc3NlZC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmMtMjE3LSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYzoyMTg6c3RhdGljIGludCB0ZXN0X2ttZW1fcHJvY19rcGFnZWNncm91cChjb25zdCBjaGFyICpyb290KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy0yMTkte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIyNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9rbWVtLmM6MjI1OlxcdGZkID0gb3BlbihcXFwiL3Byb2Mva3BhZ2VjZ3JvdXBcXFwiLCBPX1JET05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTIyNi1cXHRpZiAoZmQgXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jPTQxMD1zdHJ1Y3Qga21lbV90ZXN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYy00MTUtXFx0VCh0ZXN0X2ttZW1fbWVtY2dfZGVsZXRpb24pLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2ttZW0uYzo0MTY6XFx0VCh0ZXN0X2ttZW1fcHJvY19rcGFnZWNncm91cCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3Rfa21lbS5jLTQxNy1cXHRUKHRlc3Rfa21lbV9rZXJuZWxfc3RhY2tzKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDAuNDA4MTI4OTYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1NTAwMTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIChtbS9tZW1jb250cm9sLmMpKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBtZW1vcnkgY29udHJvbCwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGZpbGUgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgYXJvdW5kIGBwYWdlX2Nncm91cF9pbm9gLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIGluIHRoaXMgYXJlYSBoYW5kbGVzIHRoZSBhc3NvY2lhdGlvbiBvZiBwYWdlcyB3aXRoIGNncm91cHMsIGFuZCBsaWtlbHksIGhvdyBpbm9kZXMgcGxheSBhIHJvbGUgaW4gdGhhdCBtYW5hZ2VtZW50LiBJJ20gZ3Vlc3NpbmcgYHBhZ2VfY2dyb3VwX2lub2AgcmVwcmVzZW50cyB0aGUgaW5vZGUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2dyb3VwIHRoYXQgb3ducyBhIHNwZWNpZmljIHBhZ2UuIFRoaXMgbGlrZWx5IG1lYW5zIEknbGwgYmUgZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIHRyYWNrcyBtZW1vcnkgdXNhZ2UgYXQgYSBjZ3JvdXAgbGV2ZWwsIGFuZCBob3cgdGhhdCBpcyBsaW5rZWQgYmFjayB0byBwaHlzaWNhbCBwYWdlcyBpbiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IGNncm91cHMsIHRoZWlyIGhpZXJhcmNoaWVzLCBhbmQgdGhlIG1lbW9yeSBhY2NvdW50aW5nIG1lY2hhbmlzbXMuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGludGVyYWN0IHdpdGggY2dyb3VwIG1lbWJlcnNoaXAuIFNwZWNpZmljYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGNvbnRlbnRpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBwYXJ0aWN1bGFyIHZhcmlhYmxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDIuOTYzMTMzODk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcbiAzNDY6XFx0LyoqXFxuIDM0NzpcXHQgKiBwYWdlX2Nncm91cF9pbm8gLSByZXR1cm4gaW5vZGUgbnVtYmVyIG9mIHRoZSBtZW1jZyBhIHBhZ2UgaXMgY2hhcmdlZCB0b1xcbiAzNDg6XFx0ICogQHBhZ2U6IHRoZSBwYWdlXFxuIDM0OTpcXHQgKlxcbiAzNTA6XFx0ICogTG9vayB1cCB0aGUgY2xvc2VzdCBvbmxpbmUgYW5jZXN0b3Igb2YgdGhlIG1lbW9yeSBjZ3JvdXAgQHBhZ2UgaXMgY2hhcmdlZCB0b1xcbiAzNTE6XFx0ICogYW5kIHJldHVybiBpdHMgaW5vZGUgbnVtYmVyIG9yIDAgaWYgQHBhZ2UgaXMgbm90IGNoYXJnZWQgdG8gYW55IGNncm91cC4gSXRcXG4gMzUyOlxcdCAqIGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBAcGFnZS5cXG4gMzUzOlxcdCAqXFxuIDM1NDpcXHQgKiBOb3RlLCB0aGlzIGZ1bmN0aW9uIGlzIGluaGVyZW50bHkgcmFjeSwgYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIHRvIHByZXZlbnRcXG4gMzU1OlxcdCAqIHRoZSBjZ3JvdXAgaW5vZGUgZnJvbSBnZXR0aW5nIHRvcm4gZG93biBhbmQgcG90ZW50aWFsbHkgcmVhbGxvY2F0ZWQgYSBtb21lbnRcXG4gMzU2OlxcdCAqIGFmdGVyIHBhZ2VfY2dyb3VwX2lubygpIHJldHVybnMsIHNvIGl0IG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgY2FsbGVycyB0aGF0XFxuIDM1NzpcXHQgKiBkbyBub3QgY2FyZSAoc3VjaCBhcyBwcm9jZnMgaW50ZXJmYWNlcykuXFxuIDM1ODpcXHQgKi9cXG4gMzU5OlxcdGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gMzYwOlxcdHtcXG4gMzYxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDM2MjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIDM2MzpcXHRcXHR1bnNpZ25lZCBsb25nIGlubyA9IDA7XFxuIDM2NDpcXHRcXG4gMzY1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzY2OlxcdFxcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXFxuIDM2NzpcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIDM2ODpcXHRcXHQvKlxcbiAzNjk6XFx0XFx0ICogQWZ0ZXItc3BsaXQgZm9saW9zIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlaXIgbWV0YWRhdGEsIGluY2x1ZGluZ1xcbiAzNzA6XFx0XFx0ICogbWVtY2dfZGF0YSwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGUgYWNxdWlyZSBsb2FkIHBhaXJzIHdpdGggdGhlXFxuIDM3MTpcXHRcXHQgKiByZWxlYXNlIHN0b3JlIGluIGZvbGlvX3JlZl91bmZyZWV6ZSgpIGFuZCBtYWtlcyB0aGF0IG1ldGFkYXRhXFxuIDM3MjpcXHRcXHQgKiB2aXNpYmxlIHRvIHRoaXMgY2FsbGVyLlxcbiAzNzM6XFx0XFx0ICovXFxuIDM3NDpcXHRcXHRpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSlcXG4gMzc1OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0d2hpbGUgKG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfb25saW5lKFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSlcXG4gMzgwOlxcdFxcdFxcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbiAzODE6XFx0XFx0aWYgKG1lbWNnKVxcbiAzODI6XFx0XFx0XFx0aW5vID0gY2dyb3VwX2lubyhtZW1jZy1cXHUwMDNlY3NzLmNncm91cCk7XFxuIDM4MzpcXHR1bmxvY2s6XFxuIDM4NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzg1OlxcdFxcdHJldHVybiBpbm87XFxuIDM4NjpcXHR9XFxuIDM4NzpcXHRFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xcbiAzODg6XFx0XFxuIDM4OTpcXHQvKiBTdWJzZXQgb2Ygbm9kZV9zdGF0X2l0ZW0gZm9yIG1lbWNnIHN0YXRzICovXFxuIDM5MDpcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbiAzOTE6XFx0XFx0TlJfSU5BQ1RJVkVfQU5PTixcXG4gMzkyOlxcdFxcdE5SX0FDVElWRV9BTk9OLFxcbiAzOTM6XFx0XFx0TlJfSU5BQ1RJVkVfRklMRSxcXG4gMzk0OlxcdFxcdE5SX0FDVElWRV9GSUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo0Mi45NjMzNTYxMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2MDc3NDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHJlYWNoYWJpbGl0eS4gVGhlIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBidXJpZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgcGFnZV9jZ3JvdXBfaW5vYCwgZ2V0cyBjYWxsZWQgZGlyZWN0bHkgd2hlbiByZWFkaW5nIGAvcHJvYy9rcGFnZWNncm91cGAgdmlhIHByb2Nmcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFBsdXMsIGl0J3MgYWxzbyB1c2VkIGluIGBod3BvaXNvbi1pbmplY3QuY2AuIFRoYXQgZ2l2ZXMgaXQgc29tZSBzb2xpZCBwcmVzZW5jZS4gU28sIHllcywgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTmV4dCwgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgTU0gbG9naWMsIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgYW5kIG1lbWNnIG1ldGFkYXRhIHJlYWRzLiBXZSdyZSB0YWxraW5nIGFib3V0IFJDVSByZWFkIGxvY2tzLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCB1bmZyZWV6ZSBvcGVyYXRpb25zLiBUaGlzIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBmaW5kaW5nIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuIEdpdmVuIHRoYXQsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aHkgb2Ygc29tZSBmdXp6aW5nIGVmZm9ydHMuXG5cbkZpbmFsbHksIHdoYXQgY29uZmlndXJhdGlvbnMgZG8gd2UgbmVlZCB0byB0cmlnZ2VyIHRoaXM/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIGBNRU1DR2AgaXMgZW5hYmxlZCwgYW5kIHRoYXQncyB1c3VhbGx5IGRvbmUgaW4gYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBXZSdsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYC9wcm9jL2twYWdlY2dyb3VwYCBpcyBlbmFibGVkLiBJdCdzIHRpbWUgdG8gY2hlY2sgd2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgYE1FTUNHYCBhbmQgYC9wcm9jL2twYWdlY2dyb3VwYCBpbiB0aG9zZSBmaWxlcyB0byBlc3RhYmxpc2ggdGhlIG5lZWRlZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjQ1LjcyNDEzMzA4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjM1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo0NS43NzE1MDQ5NDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNDI4OTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgL3Byb2MvcGFnZS5jYCBmaWxlIGlzIGNvbmZpZ3VyZWQuIFRvIGRvIHRoaXMgcHJvcGVybHksIEknbGwgbmVlZCB0byBrbm93IHdoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbiBhbmQgcGFyYW1ldGVycy5cblxuRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGl0J3MgZ290IGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGBmcy9wcm9jYCBkaXJlY3RvcnkgaXRzZWxmLiBTbywgSSdsbCBleGFtaW5lIHRoZSBgZnMvcHJvYy9LY29uZmlnYCBmaWxlIG9yIGBmcy9wcm9jL01ha2VmaWxlYCDigJMgZGVwZW5kaW5nIG9uIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgaXQg4oCTIGZvciBhbnkgY2x1ZXMgcmVnYXJkaW5nIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDguMDk1Nzk2NTA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA4NjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvTWFrZWZpbGU9MzY9cHJvYy0kKENPTkZJR19QUklOVEspXFx0Kz0ga21zZy5vXFxuZnMvcHJvYy9NYWtlZmlsZTozNzpwcm9jLSQoQ09ORklHX1BST0NfUEFHRV9NT05JVE9SKVxcdCs9IHBhZ2Uub1xcbmZzL3Byb2MvTWFrZWZpbGUtMzgtcHJvYy0kKENPTkZJR19CT09UX0NPTkZJRylcXHQrPSBib290Y29uZmlnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NDguMTQzODg4NjkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjI2NzU0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1lbW9yeSBDb250cm9sIEdyb3VwIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgY29udHJvbCBncm91cHMgYW5kIHBhZ2UgbW9uaXRvcmluZy4gRmlyc3QsIEknbSBub3RpbmcgdGhlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzIEkgc2hvdWxkIGZvY3VzIG9uLiBUaGF0IHRyaWdnZXJzIGEgbWVudGFsIG5vdGUgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAsIHBhcnRpY3VsYXJseSBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLCByaWdodCB3aXRoaW4gdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgZmVhdHVyZSB3b3VsZCBiZSB0aGUgcmlnaHQgbG9jYXRpb24gdG8gc3RhcnQgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTExNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjUwLjEwNjU2Njg5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODY4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfUEFHRV9NT05JVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgU1lTQ1RMXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTAwLVxcbmZzL3Byb2MvS2NvbmZpZzoxMDE6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXFxuZnMvcHJvYy9LY29uZmlnLTEwMi0gXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjUwLjE1MTc2MDk0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzY1MTYyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBrcGFnZWNncm91cF9yZWFkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBrcGFnZWNncm91cF9yZWFkYCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGBwYWdlX2Nncm91cF9pbm9gLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggYGtwYWdlX3JlYWRgIGFzIGl0IHNlZW1zIHJlbGF0ZWQuIEknbGwgbWFrZSBzdXJlIHRvIHZlcmlmeSB0aGV5IGFyZSBub3QgYmVpbmcgaW5saW5lZC5cblxuT2theSwgSSd2ZSBjb25maXJtZWQgdGhhdCBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmVgIGlzIGlubGluZWQsIHNvIEkgY2FuIHNhZmVseSBuYXJyb3cgbXkgZm9jdXMgZG93biB0byBgcGFnZV9jZ3JvdXBfaW5vYCBhbmQgYGtwYWdlY2dyb3VwX3JlYWRgLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgcGFnZV9jZ3JvdXBfaW5vYC5cblxuUmlnaHQsIGxldCdzIGV4YW1pbmUgd2hlcmUgYHBhZ2VfY2dyb3VwX2lub2AgaXMgYWN0dWFsbHkgY2FsbGVkLiBJdCBhcHBlYXJzIGluIGBmcy9wcm9jL3BhZ2UuY2AgdmlhIGBrcGFnZV9yZWFkYCBhbmQgYGtwYWdlY2dyb3VwX3JlYWRgLCBhbmQgaW50ZXJlc3RpbmdseSwgYG1tL2h3cG9pc29uLWluamVjdC5jYCBhbHNvIGNhbGxzIGl0LCB3aGljaCBpcyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2ZzIGluamVjdGlvbiBtZWNoYW5pc20uIFRoYXQncyBhIGdvb2QgaGVhZHMgdXA7IEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblNvLCBoZXJlJ3MgdGhlIHN1bW1hcnk6IGBwYWdlX2Nncm91cF9pbm9gIGlzIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gYGtwYWdlY2dyb3VwX3JlYWRgIGluIGBmcy9wcm9jL3BhZ2UuY2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gcHJvY2ZzIHRoYXQgdWx0aW1hdGVseSBjYWxscyBga3BhZ2VfcmVhZGAsIHdoaWNoIHRoZW4gY2FsbHMgYHBhZ2VfY2dyb3VwX2lub2AuXG5cbk5vdyBsZXQncyB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSB3b3JraW5nIGFzc3VtcHRpb24gaXMgdGhhdCBJJ2xsIG5lZWQgYE1FTUNHYCwgYW5kIHRoZW4gSSBuZWVkIHRvIGNoZWNrIGBQUk9DX1BBR0VfTU9OSVRPUmAsIGFuZCBwb3NzaWJseSBgUFJPQ19GU2AsIGJ1dCBgUFJPQ19QQUdFX01PTklUT1JgIHR5cGljYWxseSBkZXBlbmRzIG9uIGBQUk9DX0ZTYCBhbmQgYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYC4gSSBuZWVkIHRvIGxvb2sgaW50byBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgYW55IHN1cnJvdW5kaW5nIGNvbnRleHQuIEknbGwgY2hlY2sgYXJvdW5kIGBjb25maWcgTUVNQ0dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo1My45MTY5MjczMjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzg6NTMuOTE3MDcwOTk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzE2Mzc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gYGZzL3Byb2MvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgMTAwLiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcnVjaWFsIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgcHJvYyBmaWxlc3lzdGVtIGlzIGNvbmZpZ3VyZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGltcG9ydGFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIG9yIG1heWJlIGV2ZW4gYW4gb3B0aW9uIEkndmUgb3Zlcmxvb2tlZC4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24ga25vYnMgYXJlIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU1Ljk4ODcxMTM4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0ICBvcHRpb24gd2lsbCBlbmxhcmdlIHRoZSBrZXJuZWwgYnkgYXQgbGVhc3QgOCBLQi5cXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0ICBBcyBpdCBpcyBnZW5lcmFsbHkgYSBnb29kIHRoaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgdW5sZXNzXFxuICA5ODpcXHRcXHQgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5XFxuICA5OTpcXHRcXHQgIGxpbWl0ZWQgaW4gbWVtb3J5LlxcbiAxMDA6XFx0XFxuIDEwMTpcXHRjb25maWcgUFJPQ19QQUdFX01PTklUT1JcXG4gMTAyOlxcdCBcXHRkZWZhdWx0IHlcXG4gMTAzOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gMTA0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmdcXFwiIGlmIEVYUEVSVFxcbiAxMDU6XFx0IFxcdGhlbHBcXG4gMTA2OlxcdFxcdCAgVmFyaW91cyAvcHJvYyBmaWxlcyBleGlzdCB0byBtb25pdG9yIHByb2Nlc3MgbWVtb3J5IHV0aWxpemF0aW9uOlxcbiAxMDc6XFx0XFx0ICAvcHJvYy9waWQvc21hcHMsIC9wcm9jL3BpZC9jbGVhcl9yZWZzLCAvcHJvYy9waWQvcGFnZW1hcCxcXG4gMTA4OlxcdFxcdCAgL3Byb2Mva3BhZ2Vjb3VudCwgYW5kIC9wcm9jL2twYWdlZmxhZ3MuIERpc2FibGluZyB0aGVzZVxcbiAxMDk6XFx0XFx0ICBpbnRlcmZhY2VzIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgYXBwcm94aW1hdGVseSA0a2IuXFxuIDExMDpcXHRcXG4gMTExOlxcdGNvbmZpZyBQUk9DX0NISUxEUkVOXFxuIDExMjpcXHRcXHRib29sIFxcXCJJbmNsdWRlIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3Rhc2svXFx1MDAzY3RpZFxcdTAwM2UvY2hpbGRyZW4gZmlsZVxcXCJcXG4gMTEzOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAxMTQ6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU1Ljk4ODc4MjQ5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjAyMjE4MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIEkndmUgZ290IHRoaXMuIFRoZSBzaXR1YXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBXb3J0aEZ1enppbmcgaXMgc2V0IHRvIHRydWUsIGFuZCBJIGNvbmN1ci4gVGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBgcGFnZV9jZ3JvdXBfaW5vKClgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSXQncyBpbXBsZW1lbnRpbmcgYW4gYGFjcXVpcmVgIG1lbW9yeSBvcmRlcmluZyBkdXJpbmcgYSByZWFkIG9mIHRoZSBmb2xpbyByZWZjb3VudCwgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgLiBUaGlzIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIG1ldGFkYXRhIHZpc2liaWxpdHksIHNwZWNpZmljYWxseSB0aGluZ3MgbGlrZSBgbWVtY2dfZGF0YWAsIGR1cmluZyB0aGUgZm9saW8gc3BsaXR0aW5nIHByb2Nlc3MuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaGVyZSBpcyB0aGF0IHRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzICpyZWFjaGFibGUqIHZpYSBgL3Byb2Mva3BhZ2VjZ3JvdXBgLiBgL3Byb2Mva3BhZ2VjZ3JvdXBgIGlzIGtub3duIHRvIGV4cG9zZSBrZXJuZWwgaW50ZXJuYWxzLiBUaGF0IGFjY2VzcyByb3V0ZSBpcyB0aGUgcGVyZmVjdCB2ZWN0b3IgZm9yIGV4cG9zaW5nIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLCB3aGljaCBhcmUgdGhlIGV4YWN0IGtpbmQgb2YgYnVncyBmdXp6aW5nIGlzIGRlc2lnbmVkIHRvIGZpbmQuXG5cbldlJ3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBNRU1DRyBhbmQgUFJPQ19QQUdFX01PTklUT1IuIFRoYXQncyBlc3NlbnRpYWwgZm9yIGdldHRpbmcgdGhpcyBjb2RlIHBhdGggdG8gZXZlbiBleGVjdXRlLiBBbHNvLCBmb2N1c2luZyBvbiBgcGFnZV9jZ3JvdXBfaW5vYCBhbmQgYGtwYWdlY2dyb3VwX3JlYWRgIGlzIHNwb3Qtb24uIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDU4LCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU5LjE5MTAwMzA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNDM3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VfY2dyb3VwX2lub1wiLFxuICAgIFwia3BhZ2VjZ3JvdXBfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2VfY2dyb3VwX2lubygpIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbWNvbnRyb2wuYykgdG8gYWRkIGFjcXVpcmUgbWVtb3J5IG9yZGVyaW5nIChmb2xpb19yZWZfY291bnRfYWNxdWlyZSgpKSB3aGVuIGNoZWNraW5nIGZvbGlvIHJlZmNvdW50cywgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGZvbGlvIHNwbGl0cyB3aGVuIGFjY2Vzc2luZyBtZW1jZyBtZXRhZGF0YS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9rcGFnZWNncm91cCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX2Nncm91cF9pbm9cIixcbiAgICBcImtwYWdlY2dyb3VwX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlX2Nncm91cF9pbm8oKSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1jb250cm9sLmMpIHRvIGFkZCBhY3F1aXJlIG1lbW9yeSBvcmRlcmluZyAoZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKSkgd2hlbiBjaGVja2luZyBmb2xpbyByZWZjb3VudHMsIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmb2xpbyBzcGxpdHMgd2hlbiBhY2Nlc3NpbmcgbWVtY2cgbWV0YWRhdGEuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mva3BhZ2VjZ3JvdXAgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM4OjU5LjI2NjI1MzQxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMTQzNTc5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo1OS4yNjY3NzkzMjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzExMzgyNzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBiYXJyaWVyL3N5bmNocm9uaXphdGlvbiBjaGVjayAoYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgKSBpbiBgcGFnZV9jZ3JvdXBfaW5vKClgIHRvIGVuc3VyZSBtZXRhZGF0YSBpcyB2aXNpYmxlIGFmdGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcHJldmVudCByYWN5IGFjY2VzcyB3aGVuIGZvbGlvcyBhcmUgZnJvemVuLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaW5vID0gMGAsIGBmb2xpb2AsIGBtZW1jZ2ApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkM2Q4OWY4ODM1NGViZTk3N2VlNTNmNWFmNGQ5YjZjMzUwMTJhYTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNjozODoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuaW5kZXggOWY1Yzc1ZDA2Zjc2OC4uNDAxMzMwMzA3YmM1ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9yZWYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX3JlZi5oXG5AQCAtMTA3LDYgKzEwNywxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBwYWdlX3JlZl9jb3VudChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZmb2xpby1cdTAwM2VfcmVmY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiBmb2xpb19yZWZfY291bnQocGFnZV9mb2xpbyhwYWdlKSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4yOTcxZTVlMGVjZTFmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNTgsMTcgKzM1OCwyOSBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKi9cbiBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdC8qIHBhZ2VfZm9saW8oKSBpcyByYWN5IGhlcmUsIGJ1dCB0aGUgZW50aXJlIGZ1bmN0aW9uIGlzIHJhY3kgYW55d2F5ICovXG4tXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKHBhZ2VfZm9saW8ocGFnZSkpO1xuK1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1x0LypcbitcdCAqIEFmdGVyLXNwbGl0IGZvbGlvcyByZW1haW4gZnJvemVuIHVudGlsIHRoZWlyIG1ldGFkYXRhLCBpbmNsdWRpbmdcbitcdCAqIG1lbWNnX2RhdGEsIGhhcyBiZWVuIGluaXRpYWxpemVkLiAgVGhlIGFjcXVpcmUgbG9hZCBwYWlycyB3aXRoIHRoZVxuK1x0ICogcmVsZWFzZSBzdG9yZSBpbiBmb2xpb19yZWZfdW5mcmVlemUoKSBhbmQgbWFrZXMgdGhhdCBtZXRhZGF0YVxuK1x0ICogdmlzaWJsZSB0byB0aGlzIGNhbGxlci5cbitcdCAqL1xuK1x0aWYgKCFmb2xpb19yZWZfY291bnRfYWNxdWlyZShmb2xpbykpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4gXG4gXHR3aGlsZSAobWVtY2cgXHUwMDI2XHUwMDI2ICFjc3NfaXNfb25saW5lKFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpXG4gXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuIFx0aWYgKG1lbWNnKVxuIFx0XHRpbm8gPSBjZ3JvdXBfaW5vKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXApO1xuK3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlubztcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNjozODo1OS4yNjY3ODAzMTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxNjMyMTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBtaWdodCBmbGFnLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB0aGUgY2hhbmdlcyBhbmQgc2NydXRpbml6ZSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG1lbW9yeS5cblxuRmlyc3QsIEkgc2VlIGEgbmV3IGlubGluZSBoZWxwZXIsIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAsIGFkZGVkIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VfcmVmLmhgLiBJdCdzIGEgc2ltcGxlIGF0b21pYyByZWFkLCBsaWtlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIE5vdGhpbmcgaW5oZXJlbnRseSBjb25jZXJuaW5nIHRoZXJlIG9uIGl0cyBvd24sIGJ1dCBpdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kICp3aGVyZSogYW5kICp3aHkqIGl0J3MgYmVpbmcgdXNlZC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGlzIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbiB0byBgcGFnZV9jZ3JvdXBfaW5vYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBpbnRpbWF0ZWx5LiBUaGUgYWRkaXRpb24gc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBoYW5kbGluZyBcImFmdGVyLXNwbGl0IGZvbGlvc1wiIGFuZCBlbnN1cmluZyB0aGVpciBtZXRhZGF0YSwgaW5jbHVkaW5nIGBtZW1jZ19kYXRhYCwgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGFjY2Vzc2VkLlxuXG5UaGUga2V5IGxpbmUgdGhhdCBncmFicyBteSBhdHRlbnRpb24gaXMgYGlmICghZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pKWAuIFRoaXMgYXBwZWFycyB0byBiZSBhIGNoZWNrIGZvciB0aGUgZm9saW8ncyByZWZlcmVuY2UgY291bnQuIE15IHN1c3BpY2lvbiBpcyB0aGF0IHRoaXMgaXMgYSByYWNlLWNvbmRpdGlvbiBtaXRpZ2F0aW9uLCBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gbWlnaHQgZXhpdCBpZiB0aGUgZm9saW8gaXNuJ3QgaW4gYSB2YWxpZCBzdGF0ZS5cblxuVGhlIGNvbW1lbnQgYWJvdXQgdGhlIFwiYWNxdWlyZSBsb2FkXCIgYW5kIFwicmVsZWFzZSBzdG9yZVwiIGluIGBmb2xpb19yZWZfdW5mcmVlemUoKWAgc3VnZ2VzdHMgdGhpcyBhY3F1aXJlIGlzIHBhcnQgb2YgYSBzeW5jaHJvbml6YXRpb24gc3RyYXRlZ3kgdG8gbWFrZSBtZW1jZy1yZWxhdGVkIG1ldGFkYXRhIHZpc2libGUuIFRoZSBsb2dpYyBmbG93IGlzIGltcG9ydGFudCBoZXJlOiBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzbid0IGFjcXVpcmVkLCB0aGVuIGl0IGdvZXMgdG8gdW5sb2NrLCB3aGljaCBpcyBhIHJldHVybi5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBgcGFnZV9jZ3JvdXBfaW5vYC4gSG93IGlzIGl0IGNhbGxlZD8gV2hhdCBhcmUgaXRzIGlucHV0cz8gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdmFyaW91cyBzY2VuYXJpb3M/IEknbGwgcHJvYmFibHkgZ3JhYiBgZ3JlcHBlcmAgYW5kIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBvdGhlciBmdW5jdGlvbnMgY2FsbCBpdC4gQSBkaXJlY3QgZmlsZSByZWFkIG1heSBhbHNvIGJlIGZydWl0ZnVsLiBVbmRlcnN0YW5kaW5nIHRob3NlIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IGR1cmluZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBtYXkgZXhpc3QgZ2l2ZW4gdGhpcyBsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTY6Mzk6MDQuMTgzMTA0MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTk0NzIxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jZ3JvdXBfaW5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy05NS1cXHRcXHRcXHRjYXNlIEtQQUdFX0NHUk9VUDpcXG5mcy9wcm9jL3BhZ2UuYzo5NjpcXHRcXHRcXHRcXHRpbmZvID0gcGFnZV9jZ3JvdXBfaW5vKHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTk3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4ODk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg3Mi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODczOnN0YXRpYyBpbmxpbmUgaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NzQte1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg9Mjc0PVRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0yODQtXFx0XFx0X19maWVsZCh1NjQsXFx0XFx0Y2dyb3VwX2lubylcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaDoyODU6XFx0XFx0X19maWVsZCh1NjQsXFx0XFx0cGFnZV9jZ3JvdXBfaW5vKVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI4Ni1cXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcXHRtZW1jZ19pZClcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTI5OS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzAwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVxcdTAwM2Vjc3MuY2dyb3VwKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDEtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaC0zMDMtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzA0OlxcdFRQX3ByaW50ayhcXFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcXFwiLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMwNS1cXHRcXHRfX2VudHJ5LVxcdTAwM2VuYW1lLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgtMzA5LVxcdFxcdF9fZW50cnktXFx1MDAzZWNncm91cF9pbm8sXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmg6MzEwOlxcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lub1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oLTMxMS1cXHQpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz02OT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl90YXNrKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzMtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6NzQ6XFx0aWYgKHBhZ2VfY2dyb3VwX2lubyhwKSAhPSBod3BvaXNvbl9maWx0ZXJfbWVtY2cpXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNzUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0Ni0vKipcXG5tbS9tZW1jb250cm9sLmM6MzQ3OiAqIHBhZ2VfY2dyb3VwX2lubyAtIHJldHVybiBpbm9kZSBudW1iZXIgb2YgdGhlIG1lbWNnIGEgcGFnZSBpcyBjaGFyZ2VkIHRvXFxubW0vbWVtY29udHJvbC5jLTM0OC0gKiBAcGFnZTogdGhlIHBhZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTUtICogdGhlIGNncm91cCBpbm9kZSBmcm9tIGdldHRpbmcgdG9ybiBkb3duIGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlZCBhIG1vbWVudFxcbm1tL21lbWNvbnRyb2wuYzozNTY6ICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXRcXG5tbS9tZW1jb250cm9sLmMtMzU3LSAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cXG5tbS9tZW1jb250cm9sLmMtMzU4LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTk6aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbWNvbnRyb2wuYy0zNjAte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTM4Ni19XFxubW0vbWVtY29udHJvbC5jOjM4NzpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2Nncm91cF9pbm8pO1xcbm1tL21lbWNvbnRyb2wuYy0zODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM5OjA2LjAwMjU4Mjg1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzc4MDAxMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEEgQ29uY3VycmVuY3kgRml4LCBOb3QgYW4gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgcGFnZV9jZ3JvdXBfaW5vYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYC9wcm9jL2twYWdlY2dyb3VwYCBhbmQgYGh3cG9pc29uX2ZpbHRlcl90YXNrYC4gVGhlIGNvcmUgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLCB3aGVyZSB0aGUgcmVmY291bnQgbWlnaHQgYmUgemVybyAoZnJvemVuKSBhbmQgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgKGBtZW1jZ19kYXRhYCkgY291bGQgYmUgdW5pbml0aWFsaXplZC5cblxuVGhpcyBwYXRjaCBhZGRzIGFuIGFjcXVpcmUgbG9hZCBvbiBgX3JlZmNvdW50YCB1c2luZyBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pYC4gSWYgaXQncyB6ZXJvLCB3ZSByZXR1cm4gYDBgIGZvciBgaW5vYCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHJlYWQgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBBaGEhIEl0J3MgKnByZXZlbnRpbmcqIHRoZSByZWFkLCBub3QgaW50cm9kdWNpbmcgaXQuIEl0J3MgYSBzeW5jaHJvbml6YXRpb24vY29uY3VycmVuY3kgZml4IOKAkyB1c2luZyBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWAgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgcmVsZWFzZSBzdG9yZSBvZiBgZm9saW9fcmVmX3VuZnJlZXplKClgLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTj8gTGV0J3MgY2hlY2sgdGhlIGNvZGUgaXRzZWxmOlxuXG4qICAgYHVuc2lnbmVkIGxvbmcgaW5vID0gMDtgIOKAkyBJbml0aWFsaXplZCB0byB6ZXJvLlxuKiAgIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtgIOKAkyBUaGlzIGdldHMgYSB2YWxpZCBmb2xpbyBwb2ludGVyLlxuKiAgIGBpZiAoIWZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKGZvbGlvKSkgZ290byB1bmxvY2s7YCDigJMgUmV0dXJucyBgaW5vYCAod2hpY2ggaXMgMCkgaWYgdGhlIGZvbGlvIGlzIGZyb3plbiwgc2tpcHBpbmcgZnVydGhlciBwcm9jZXNzaW5nLlxuKiAgIGBmb2xpb19yZWZfY291bnRfYWNxdWlyZWAgcmVhZHMgYFx1MDAyNmZvbGlvLVx1MDAzZV9yZWZjb3VudGAgYXRvbWljYWxseSwgd2l0aCBhY3F1aXJlIHNlbWFudGljcy5cblxuU28sIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBhbmQgbm90aGluZyBpcyBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0IGFwcGVhcnMgdGhhdCBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYCBpcyBvbmx5IGNhbGxlZCBhZnRlciB0aGUgcmVmY291bnQgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZXJlZm9yZSBpbml0aWFsaXplZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLi4uXG5cbk9rYXksIGxldCdzIHJldmlldyB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gV2UgbmVlZCB0byBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgKm9ubHkqIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdoZXJlIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBsYXRlci4gT3IsIGlmIGl0IGNoYW5nZXMgYm91bmRzL2xlbmd0aHMuXG5cblRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIGEgbWVtb3J5IG9yZGVyaW5nIGZpeCwgdXNpbmcgYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgIHRvIGVuc3VyZSBhIGZvbGlvIGlzbid0IGZyb3plbiBiZWZvcmUgYWNjZXNzaW5nIGl0cyBtZXRhZGF0YS4gQWxsIHZhcmlhYmxlcyBhcmUgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIG9yIHNraXBwZWQgaWYgbm90IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHZlcnkgc3RyYWlnaHRmb3J3YXJkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHF1aWNrbHk6IGBpbm9gIGlzIHplcm87IGBmb2xpb2AgaXMgaW5pdGlhbGl6ZWQgYnkgYHBhZ2VfZm9saW8ocGFnZSlgOyBpZiBgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoZm9saW8pYCBpcyAwLCB3ZSBqdW1wIHRvIHVubG9jay4gSWYgbm90LCBpdCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYC4gRXZlcnl0aGluZyBpcyBjbGVhbiwgYW5kIHRoZSBpbnRlbnQgaXMgY2xlYXIuXG5cbkFscmlnaHQsIHRpbWUgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzgsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE2OjM5OjEyLjM4MDU4NzQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBiYXJyaWVyL3N5bmNocm9uaXphdGlvbiBjaGVjayAoYGZvbGlvX3JlZl9jb3VudF9hY3F1aXJlKClgKSBpbiBgcGFnZV9jZ3JvdXBfaW5vKClgIHRvIGVuc3VyZSBtZXRhZGF0YSBpcyB2aXNpYmxlIGFmdGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcHJldmVudCByYWN5IGFjY2VzcyB3aGVuIGZvbGlvcyBhcmUgZnJvemVuLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaW5vID0gMGAsIGBmb2xpb2AsIGBtZW1jZ2ApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG9wZXJhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGJhcnJpZXIvc3luY2hyb25pemF0aW9uIGNoZWNrIChgZm9saW9fcmVmX2NvdW50X2FjcXVpcmUoKWApIGluIGBwYWdlX2Nncm91cF9pbm8oKWAgdG8gZW5zdXJlIG1ldGFkYXRhIGlzIHZpc2libGUgYWZ0ZXIgZm9saW8gc3BsaXR0aW5nIGFuZCBwcmV2ZW50IHJhY3kgYWNjZXNzIHdoZW4gZm9saW9zIGFyZSBmcm96ZW4uIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpbm8gPSAwYCwgYGZvbGlvYCwgYG1lbWNnYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsc58q[1] Phase: Succeeded StartedAt: 2026-09-07 16:39:23 +0000 UTC FinishedAt: 2026-09-07 16:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 16:39:23 +0000 UTC FinishedAt: 2026-09-07 16:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2] Phase: Succeeded StartedAt: 2026-09-07 16:39:23 +0000 UTC FinishedAt: 2026-09-07 20:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 16:39:23 +0000 UTC FinishedAt: 2026-09-07 20:22:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","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-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 16:39:23 +0000 UTC FinishedAt: 2026-09-07 16:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 16:39:23 +0000 UTC FinishedAt: 2026-09-07 16:39:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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-workflowsc58q/series-workflowsc58q-convert-artifact-3403562617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 16:39:44 +0000 UTC FinishedAt: 2026-09-07 16:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 16:39:44 +0000 UTC FinishedAt: 2026-09-07 16:57:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1e4decfb-0153-4649-85b1-7106d539e53a,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-workflowsc58q/series-workflowsc58q-convert-artifact-3403562617/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": "6be08b42-9303-41a8-b692-68f95c7d2ded", "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-workflowsc58q/series-workflowsc58q-build-action-1761007511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 16:39:44 +0000 UTC FinishedAt: 2026-09-07 16:57:14 +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:*1e4decfb-0153-4649-85b1-7106d539e53a,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-workflowsc58q/series-workflowsc58q-convert-artifact-3403562617/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": "6be08b42-9303-41a8-b692-68f95c7d2ded", "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-workflowsc58q/series-workflowsc58q-build-action-1761007511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 16:57:24 +0000 UTC FinishedAt: 2026-09-07 16:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 16:57:24 +0000 UTC FinishedAt: 2026-09-07 16:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 16:57:24 +0000 UTC FinishedAt: 2026-09-07 16:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 16:57:24 +0000 UTC FinishedAt: 2026-09-07 16:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","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-workflowsc58q/series-workflowsc58q-convert-artifact-1042925388/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 16:57:34 +0000 UTC FinishedAt: 2026-09-07 16:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 16:57:34 +0000 UTC FinishedAt: 2026-09-07 16:59:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6be08b42-9303-41a8-b692-68f95c7d2ded,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-workflowsc58q/series-workflowsc58q-build-action-1761007511/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-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 16:59:36 +0000 UTC FinishedAt: 2026-09-07 16:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 16:59:36 +0000 UTC FinishedAt: 2026-09-07 16:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 16:59:36 +0000 UTC FinishedAt: 2026-09-07 17:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 16:59:36 +0000 UTC FinishedAt: 2026-09-07 17:17:48 +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:*1e4decfb-0153-4649-85b1-7106d539e53a,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-workflowsc58q/series-workflowsc58q-convert-artifact-1042925388/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": "38fd23b2-86fa-42a5-8888-d2bce5e06d3b", "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-workflowsc58q/series-workflowsc58q-build-action-545527144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 16:59:36 +0000 UTC FinishedAt: 2026-09-07 17:17:38 +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:*1e4decfb-0153-4649-85b1-7106d539e53a,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-workflowsc58q/series-workflowsc58q-convert-artifact-1042925388/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": "38fd23b2-86fa-42a5-8888-d2bce5e06d3b", "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-workflowsc58q/series-workflowsc58q-build-action-545527144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 17:17:48 +0000 UTC FinishedAt: 2026-09-07 17:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 17:17:48 +0000 UTC FinishedAt: 2026-09-07 17:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 17:17:48 +0000 UTC FinishedAt: 2026-09-07 17:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 17:17:48 +0000 UTC FinishedAt: 2026-09-07 17:19:33 +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:*38fd23b2-86fa-42a5-8888-d2bce5e06d3b,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-workflowsc58q/series-workflowsc58q-build-action-545527144/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-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 20:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 20:22:35 +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":["page_cgroup_ino","kpagecgroup_read"],"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:*6be08b42-9303-41a8-b692-68f95c7d2ded,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38fd23b2-86fa-42a5-8888-d2bce5e06d3b,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-workflowsc58q/series-workflowsc58q-build-action-1761007511/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-workflowsc58q/series-workflowsc58q-build-action-545527144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 17:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 17:19:48 +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":["page_cgroup_ino","kpagecgroup_read"],"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-workflowsc58q/series-workflowsc58q-convert-artifact-1529420981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 17:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 17:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 17:19:43 +0000 UTC FinishedAt: 2026-09-07 17:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 17:19:53 +0000 UTC FinishedAt: 2026-09-07 20:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc58q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"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":["page_cgroup_ino","kpagecgroup_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","PROC_PAGE_MONITOR"],"series_id":"cf5c8781-e260-4fcb-a085-690be1e78947","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 17:19:53 +0000 UTC FinishedAt: 2026-09-07 20:22:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6be08b42-9303-41a8-b692-68f95c7d2ded,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38fd23b2-86fa-42a5-8888-d2bce5e06d3b,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-workflowsc58q/series-workflowsc58q-build-action-1761007511/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-workflowsc58q/series-workflowsc58q-build-action-545527144/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-workflowsc58q/series-workflowsc58q-convert-artifact-1529420981/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,}