Name: series-workflowdsjk8 Phase: Succeeded StartedAt: 2026-07-05 16:10:20 +0000 UTC FinishedAt: 2026-07-05 20:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[0] Phase: Succeeded StartedAt: 2026-07-05 16:10:20 +0000 UTC FinishedAt: 2026-07-05 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[0].run-triage Phase: Succeeded StartedAt: 2026-07-05 16:10:20 +0000 UTC FinishedAt: 2026-07-05 16:24:32 +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": "4494b1f25c06ac74bb46166f19bb13ec21d08bbd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_VADDR", "DAMON_PADDR" ], "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": "4494b1f25c06ac74bb46166f19bb13ec21d08bbd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "ba8ee1e1-e4e9-4169-88e3-73372068e035" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_commit_ctx", "damon_start", "damon_sysfs_commit_input", "damon_sysfs_set_regions", "damon_lru_sort_apply_parameters", "damon_reclaim_apply_parameters" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBjb250ZXh0IGNvbW1pdCBsb2dpYyB0byB1c2UgYSB0ZXN0IGNvbnRleHQgdG8gdmFsaWRhdGUgY2hhbmdlcyBiZWZvcmUgYXBwbHlpbmcgdGhlbS4gSXQgYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSB2YXJpb3VzIGNhbGxlcnMgYW5kIHJlbGllcyBvbiB0aGUgY29yZSB2YWxpZGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYjVhNGQ4NDI0YjMzM2RjM2JlMDE5ZDMwMzk5NzRkZmExOWZkMmEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxNjoyMzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDYxNmJkZjA5NTRiNTJhLi4yNjYxMjMxYzBhZTgyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtNDksNyAmIzQzOzQ5LDggQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBhZ2U6XHRcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cbiAgKlxuLSAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS5cbiYjNDM7ICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxuJiM0MzsgKiBkb2VzIHRoZSB2YWxpZGF0aW9uLlxuICAqXG4gICogQG5yX2FjY2Vzc2VzIGlzIHJlc2V0IHRvIHplcm8gZm9yIGV2ZXJ5IFx1MDAyNmRhbW9uX2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwgYW5kIGJlXG4gICogaW5jcmVhc2VkIGZvciBldmVyeSBcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgaWYgYW4gYWNjZXNzIHRvIHRoZSByZWdpb25cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDg3MWM2ZjUyNTdjOWU0Li4zYzVhNDZlMWMwNzlhMyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTY2NCwyMCAmIzQzOzE2NjQsNyBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyoqXG4tICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG4tICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cbi0gKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZnJvbSBAc3JjIHRvIEBkc3QgYW5kIHVwZGF0ZVxuLSAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb25cbi0gKiBmb3IgY29udGV4dC1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nIGNvbnRleHQsIGluc3RlYWQgb2YgbWFudWFsXG4tICogaW4tcGxhY2UgdXBkYXRlcy5cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxuLSAqIGRhbW9uX2NhbGwoKS5cbi0gKi9cbi1pbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiYjNDM7c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuQEAgLTE3MzIsNiAmIzQzOzE3MTksNTIgQEAgaW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4mIzQzO1x0aWYgKCF0ZXN0X2N0eClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRlc3RfY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG4mIzQzOyAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9OIGNvbnRleHQuXG4mIzQzOyAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcbiYjNDM7ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuJiM0MzsgKiBmb3IgY29udGV4dC1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nIGNvbnRleHQsIGluc3RlYWQgb2YgbWFudWFsXG4mIzQzOyAqIGluLXBsYWNlIHVwZGF0ZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxuJiM0MzsgKiBkYW1vbl9jYWxsKCkuXG4mIzQzOyAqL1xuJiM0MztpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XG4mIzQzO1x0aWYgKCF0ZXN0X2N0eClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcbiYjNDM7b3V0OlxuJiM0MztcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGRhbW9uX25yX3J1bm5pbmdfY3R4cygpIC0gUmV0dXJuIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0cy5cbiAgKi9cbkBAIC0xODMyLDYgJiM0MzsxODY1LDggQEAgc3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4mIzQzO1xuIC8qKlxuICAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLlxuICAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG5AQCAtMTg1Myw4ICYjNDM7MTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFpc19wb3dlcl9vZl8yKGN0eHNbaV0tXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbiYjNDM7XG4mIzQzO1x0XHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcbiYjNDM7XHRcdGlmICghdGVzdF9jdHgpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgY3R4c1tpXSk7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9sb2NrKTtcbkBAIC0zODAzLDkgJiM0MzszODQ2LDYgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIHtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gXG4tXHRpZiAoKnN0YXJ0IFx1MDAzZSAqZW5kKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdGlmICghKnN0YXJ0IFx1MDAyNlx1MDAyNiAhKmVuZCBcdTAwMjZcdTAwMjZcbiBcdFx0IWRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2Uoc3RhcnQsIGVuZCwgYWRkcl91bml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbmluZGV4IDMyZjQxNDkxYjcyNmIyLi4yZGQwY2QwZDI2MjczMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0yODQsMTEgJiM0MzsyODQsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbiBcdHBhcmFtX2N0eC1cdTAwM2VhZGRyX3VuaXQgPSBhZGRyX3VuaXQ7XG4gXHRwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcbiBcbi1cdGlmICghaXNfcG93ZXJfb2ZfMihwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRpZiAoIWRhbW9uX2xydV9zb3J0X21vbl9hdHRycy5zYW1wbGVfaW50ZXJ2YWwpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5pbmRleCAxMWI3MGQwYTlhNmYwYS4uNjQ2OWIyNWNjMzRmOTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuQEAgLTIwOCwxMSAmIzQzOzIwOCw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gXG4tXHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTk4Nyw5ICYjNDM7MTk4Nyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiAqc3lzX3JlZ2lvbiA9XG4gXHRcdFx0c3lzZnNfcmVnaW9ucy1cdTAwM2VyZWdpb25zX2FycltpXTtcbiBcbi1cdFx0aWYgKHN5c19yZWdpb24tXHUwMDNlYXIuc3RhcnQgXHUwMDNlIHN5c19yZWdpb24tXHUwMDNlYXIuZW5kKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVxuIFx0XHRyYW5nZXNbaV0uc3RhcnQgPSBzeXNfcmVnaW9uLVx1MDAzZWFyLnN0YXJ0O1xuIFx0XHRyYW5nZXNbaV0uZW5kID0gc3lzX3JlZ2lvbi1cdTAwM2Vhci5lbmQ7XG4gXHRcdGlmIChpID09IDApXG5AQCAtMjA5OCwyNiAmIzQzOzIwOTUsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbiBcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpO1xuIFxuLS8qXG4tICogUmV0dXJuIGEgbmV3IGRhbW9uX2N0eCBmb3IgdGVzdGluZyBuZXcgcGFyYW1ldGVycyB0byBjb21taXQuXG4tICovXG4tc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcbi1cdFx0c3RydWN0IGRhbW9uX2N0eCAqcnVubmluZ19jdHgpXG4te1xuLVx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XG4tXHRpbnQgZXJyO1xuLVxuLVx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4tXHRpZiAoIXRlc3RfY3R4KVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHJ1bm5pbmdfY3R4KTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cdHJldHVybiB0ZXN0X2N0eDtcbi19XG4tXG4gLypcbiAgKiBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQoKSAtIENvbW1pdCB1c2VyIGlucHV0cyB0byBhIHJ1bm5pbmcga2RhbW9uZC5cbiAgKiBAa2RhbW9uZDpcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXG5AQCAtMjEyNyw3ICYjNDM7MjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4tXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXG5AQCAtMjEzOSwxNyAmIzQzOzIxMTYsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKVxuIFx0cGFyYW1fY3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbiBcdGlmIChJU19FUlIocGFyYW1fY3R4KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1fY3R4KTtcbi1cdHRlc3RfY3R4ID0gZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbi1cdGlmICghdGVzdF9jdHgpIHtcbi1cdFx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBwYXJhbV9jdHgpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4gXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4LCBwYXJhbV9jdHgpO1xuLW91dDpcbi1cdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbiBcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19jb21taXRfaW5wdXQmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gY29udGV4dCBjb21taXQgbG9naWMgdG8gdXNlIGEgdGVzdCBjb250ZXh0IHRvIHZhbGlkYXRlIGNoYW5nZXMgYmVmb3JlIGFwcGx5aW5nIHRoZW0uIEl0IGFsc28gcmVtb3ZlcyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gdmFyaW91cyBjYWxsZXJzIGFuZCByZWxpZXMgb24gdGhlIGNvcmUgdmFsaWRhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYjVhNGQ4NDI0YjMzM2RjM2JlMDE5ZDMwMzk5NzRkZmExOWZkMmEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgNSAxNjoyMzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaAppbmRleCA2MTZiZGYwOTU0YjUyYS4uMjY2MTIzMWMwYWU4MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTQ5LDcgJiM0Mzs0OSw4IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHsKICAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqIEBhZ2U6CQlBZ2Ugb2YgdGhpcyByZWdpb24uCiAgKgotICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLgomIzQzOyAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKCkKJiM0MzsgKiBkb2VzIHRoZSB2YWxpZGF0aW9uLgogICoKICAqIEBucl9hY2Nlc3NlcyBpcyByZXNldCB0byB6ZXJvIGZvciBldmVyeSAmYW1wO2RhbW9uX2F0dHJzLSZndDthZ2dyX2ludGVydmFsIGFuZCBiZQogICogaW5jcmVhc2VkIGZvciBldmVyeSAmYW1wO2RhbW9uX2F0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwgaWYgYW4gYWNjZXNzIHRvIHRoZSByZWdpb24KZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA4NzFjNmY1MjU3YzllNC4uM2M1YTQ2ZTFjMDc5YTMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTE2NjQsMjAgJiM0MzsxNjY0LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogCXJldHVybiAwOwogfQogCi0vKioKLSAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLgotICogQGRzdDoJVGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LgotICogQHNyYzoJVGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGUKLSAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24KLSAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWwKLSAqIGluLXBsYWNlIHVwZGF0ZXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlCi0gKiBkYW1vbl9jYWxsKCkuCi0gKi8KLWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQomIzQzO3N0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogewogCWludCBlcnI7CiAJc3RydWN0IGRhbW9zICpzY2hlbWU7CkBAIC0xNzMyLDYgJiM0MzsxNzE5LDUyIEBAIGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJdGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghdGVzdF9jdHgpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdGVzdF9jdHg7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLgomIzQzOyAqIEBkc3Q6CVRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC4KJiM0MzsgKiBAc3JjOglUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlCiYjNDM7ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbgomIzQzOyAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWwKJiM0MzsgKiBpbi1wbGFjZSB1cGRhdGVzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlCiYjNDM7ICogZGFtb25fY2FsbCgpLgomIzQzOyAqLwomIzQzO2ludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7CiYjNDM7CWlmICghdGVzdF9jdHgpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWVyciA9IF9fZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyk7CiYjNDM7b3V0OgomIzQzOwlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBkYW1vbl9ucl9ydW5uaW5nX2N0eHMoKSAtIFJldHVybiBudW1iZXIgb2YgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dHMuCiAgKi8KQEAgLTE4MzIsNiAmIzQzOzE4NjUsOCBAQCBzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7CiYjNDM7CiAvKioKICAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLgogICogQGN0eHM6CWFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZwpAQCAtMTg1Myw4ICYjNDM7MTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSkKIAlpbnQgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9jdHhzOyBpJiM0MzsmIzQzOykgewotCQlpZiAoIWlzX3Bvd2VyX29mXzIoY3R4c1tpXS0mZ3Q7bWluX3JlZ2lvbl9zeikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4OwomIzQzOwomIzQzOwkJdGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CQlpZiAoIXRlc3RfY3R4KQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBjdHhzW2ldKTsKJiM0MzsJCWRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAl9CiAKIAltdXRleF9sb2NrKCZhbXA7ZGFtb25fbG9jayk7CkBAIC0zODAzLDkgJiM0MzszODQ2LDYgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogewogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAKLQlpZiAoKnN0YXJ0ICZndDsgKmVuZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoISpzdGFydCAmYW1wOyZhbXA7ICEqZW5kICZhbXA7JmFtcDsKIAkJIWRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2Uoc3RhcnQsIGVuZCwgYWRkcl91bml0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCAzMmY0MTQ5MWI3MjZiMi4uMmRkMGNkMGQyNjI3MzEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMjg0LDExICYjNDM7Mjg0LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpCiAJcGFyYW1fY3R4LSZndDthZGRyX3VuaXQgPSBhZGRyX3VuaXQ7CiAJcGFyYW1fY3R4LSZndDttaW5fcmVnaW9uX3N6ID0gbWF4KERBTU9OX01JTl9SRUdJT05fU1ogLyBhZGRyX3VuaXQsIDEpOwogCi0JaWYgKCFpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC0mZ3Q7bWluX3JlZ2lvbl9zeikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKCFkYW1vbl9scnVfc29ydF9tb25fYXR0cnMuc2FtcGxlX2ludGVydmFsKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jCmluZGV4IDExYjcwZDBhOWE2ZjBhLi42NDY5YjI1Y2MzNGY5MiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uYwpAQCAtMjA4LDExICYjNDM7MjA4LDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZCkKIAlwYXJhbV9jdHgtJmd0O2FkZHJfdW5pdCA9IGFkZHJfdW5pdDsKIAlwYXJhbV9jdHgtJmd0O21pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7CiAKLQlpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LSZndDttaW5fcmVnaW9uX3N6KSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoIWRhbW9uX3JlY2xhaW1fbW9uX2F0dHJzLmFnZ3JfaW50ZXJ2YWwpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMTk4Nyw5ICYjNDM7MTk4Nyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiAqc3lzX3JlZ2lvbiA9CiAJCQlzeXNmc19yZWdpb25zLSZndDtyZWdpb25zX2FycltpXTsKIAotCQlpZiAoc3lzX3JlZ2lvbi0mZ3Q7YXIuc3RhcnQgJmd0OyBzeXNfcmVnaW9uLSZndDthci5lbmQpCi0JCQlnb3RvIG91dDsKLQogCQlyYW5nZXNbaV0uc3RhcnQgPSBzeXNfcmVnaW9uLSZndDthci5zdGFydDsKIAkJcmFuZ2VzW2ldLmVuZCA9IHN5c19yZWdpb24tJmd0O2FyLmVuZDsKIAkJaWYgKGkgPT0gMCkKQEAgLTIwOTgsMjYgJiM0MzsyMDk1LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eCgKIAkJc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpOwogCi0vKgotICogUmV0dXJuIGEgbmV3IGRhbW9uX2N0eCBmb3IgdGVzdGluZyBuZXcgcGFyYW1ldGVycyB0byBjb21taXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoCi0JCXN0cnVjdCBkYW1vbl9jdHggKnJ1bm5pbmdfY3R4KQotewotCXN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4OwotCWludCBlcnI7Ci0KLQl0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTsKLQlpZiAoIXRlc3RfY3R4KQotCQlyZXR1cm4gTlVMTDsKLQllcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBydW5uaW5nX2N0eCk7Ci0JaWYgKGVycikgewotCQlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gdGVzdF9jdHg7Ci19Ci0KIC8qCiAgKiBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQoKSAtIENvbW1pdCB1c2VyIGlucHV0cyB0byBhIHJ1bm5pbmcga2RhbW9uZC4KICAqIEBrZGFtb25kOglUaGUga29iamVjdCB3cmFwcGVyIGZvciB0aGUgYXNzb2NpYXRlZCBrZGFtb25kLgpAQCAtMjEyNyw3ICYjNDM7MjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoCiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gZGF0YTsKLQlzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDsKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4OwogCWludCBlcnI7CiAKIAlpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSkKQEAgLTIxMzksMTcgJiM0MzsyMTE2LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSkKIAlwYXJhbV9jdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC0mZ3Q7Y29udGV4dHMtJmd0O2NvbnRleHRzX2FyclswXSk7CiAJaWYgKElTX0VSUihwYXJhbV9jdHgpKQogCQlyZXR1cm4gUFRSX0VSUihwYXJhbV9jdHgpOwotCXRlc3RfY3R4ID0gZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KGtkYW1vbmQtJmd0O2RhbW9uX2N0eCk7Ci0JaWYgKCF0ZXN0X2N0eCkgewotCQlkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKIAllcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtJmd0O2RhbW9uX2N0eCwgcGFyYW1fY3R4KTsKLW91dDoKLQlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7CiAJZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFJlZmFjdG9yaW5nOiBBIERlZXBlciBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXMg4oCTIGBjb3JlLmNgLCBgbHJ1X3NvcnQuY2AsIGByZWNsYWltLmNgLCBgc3lzZnMuY2AsIGFuZCBgZGFtb24uaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIGhvdyBgZGFtb25fY29tbWl0X2N0eGAgd29ya3MuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRhbW9uX25ld190ZXN0X2N0eGAgYW5kIGBfX2RhbW9uX2NvbW1pdF9jdHhgIGluIGBjb3JlLmNgIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgbW92aW5nIHNvbWUgc3R1ZmYgYXJvdW5kIHRvIHNlcGFyYXRlIGNvbmNlcm5zLCBwcm9iYWJseSBmb3IgZXJyb3IgaGFuZGxpbmcuCgpCdXQgdGhlbiBJIHNlZSB0aGUgcGF0Y2ggYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSBhIGZldyBvZiB0aGUgYXBwbHkgcGFyYW1ldGVyIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBmbGFnIC0gd2hlcmUmIzM5O3MgdGhhdCBsb2dpYyBnb2luZz8gSXQmIzM5O3MgZ29uZSBmcm9tIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9zeXNmc19zZXRfcmVnaW9uc2AsIGFuZCBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YC4gU28sIHRoZSBxdWVzdGlvbiBpcywgZGlkIHRoZXkgcHV0IGl0IGluIGBfX2RhbW9uX2NvbW1pdF9jdHhgIG9yIGBkYW1vbl9zZXRfcmVnaW9uc2A/IExldCYjMzk7cyBjaGVjayB0aG9zZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGBkYW1vbl9jb21taXRfY3R4YCB0byBmaXJzdCBleGVjdXRlIGEgJiMzNDtkcnkgcnVuJiMzNDsgdXNpbmcgYGRhbW9uX25ld190ZXN0X2N0eGAgdG8gdmFsaWRhdGUgdGhlIGNvbW1pdCBiZWZvcmUgaXQgaGFwcGVucy4gU21hcnQuIFdlIHdhbnQgdG8gYXZvaWQgcGFydGlhbGx5IGFwcGxpZWQgY2hhbmdlcy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIHRoZSByZW1vdmVkIGBpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC0mZ3Q7bWluX3JlZ2lvbl9zeilgIGNoZWNrIGZyb20gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGV2ZW4gZnJvbSBgZGFtb25fc3RhcnRgIGlzIGdvbmUuIFNvLCB3aGVyZSBkaWQgaXQgZ28/IExldCYjMzk7cyBmaW5kIG91dCB3aGVyZSBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGxvY2F0ZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBpdC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBjaGFuZ2UgdG8gYW5hbHl6ZSwgc28gSSBzaG91bGQgYmUgc3VyZSB0byBkb3VibGUgY2hlY2sgYWxsIHRoZSBhZmZlY3RlZCBzcG90cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NDA2PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MjctLypcbm1tL2RhbW9uL2NvcmUuYzo0Mjg6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy00MjktICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTQzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Mzk6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDQwLVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTE0NDQ9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDczLVx0cmFuZ2VzW2kmIzQzOyYjNDM7XS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYzoxNDc0Olx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xNDc1LVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM4NDM9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODU0LVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjM4NTU6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtMzg1Ni19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xOTc1PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5OTYtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjE5OTc6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnIsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vc3lzZnMuYy0xOTk4LW91dDpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDQ1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY2LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQ2NzpcdGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ2OC1cbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwMy0vKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5O1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMDUtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTExOC0gKiByZWdpb25zLiAgVGhlIHVwZGF0ZSBvZiBjdXJyZW50IHRhcmdldCByZWdpb25zIGlzIHRoZSByb2xlIG9mXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjExOTogKiAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5Oy5cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTIwLSAqXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0Ny1cdH1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTQ4Olx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmVnaW9ucyAvIDIsXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cdFx0XHRcdERBTU9OX01JTl9SRUdJT05fU1opKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXHRcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTUzLVx0fVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU1LVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWikpIHtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU3LVx0XHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTU4Olx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NlY29uZCBkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTktXHR9XG4tLVxubW0vZGFtb24vdmFkZHIuYz0xOTE9c3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjA3LVxubW0vZGFtb24vdmFkZHIuYzoyMDg6XHRkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjA5LX1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTIyNj1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzoyMzQ6XHRcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xubW0vZGFtb24vdmFkZHIuYy0yMzUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBDb250ZXh0IFZhbGlkYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGhvdyBEQU1PTiBoYW5kbGVzIHZhbGlkYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHNoaWZ0aW5nIGBkYW1vbl9jb21taXRfY3R4YCB0byB1c2UgYSB0ZXN0IGNvbnRleHQsIHdoaWNoIHNvdW5kcyBsaWtlIGEgc29saWQgYXBwcm9hY2ggZm9yIHZlcmlmeWluZyBjaGFuZ2VzIGJlZm9yZSB0aGV5JiMzOTtyZSBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLgoKTm93LCBJIHNlZSB0aGF0IHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGl0c2VsZiBpcyBiZWluZyByZW1vdmVkIGZyb20gYSBmZXcgb3RoZXIgZnVuY3Rpb25zOiBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogVGhlIHZhbGlkYXRpb24gaXMgbW92aW5nLiBTbyB3aGVyZSBleGFjdGx5IGlzIGl0IGdvaW5nPwoKSG1tLCB3YXMgdGhlIHZhbGlkYXRpb24gbG9naWMgbW92ZWQgdG8gYGRhbW9uX25ld190ZXN0X2N0eGAgb3IgYF9fZGFtb25fY29tbWl0X2N0eGA/IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2RhbW9uX2NvbW1pdF9jdHhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTYzNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE2NjYtXG5tbS9kYW1vbi9jb3JlLmM6MTY2NzpzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNjY4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTcyMj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyOS1cdFx0cmV0dXJuIE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MTczMDpcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcbm1tL2RhbW9uL2NvcmUuYy0xNzMxLVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUxPWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzU4LVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNzU5Olx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE3NjAtXHRpZiAoZXJyKVxubW0vZGFtb24vY29yZS5jLTE3NjEtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vY29yZS5jOjE3NjI6XHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE3NjMtb3V0OlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODQ2PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NjctXG5tbS9kYW1vbi9jb3JlLmM6MTg2ODpzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTg2OS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg4NT1pbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg5Ni1cbm1tL2RhbW9uL2NvcmUuYzoxODk3Olx0XHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTE4OTgtXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgdGhlIFZhbGlkYXRpb24qKgoKQWxyaWdodCwgaG9sZCBvbi4gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHRyYWNlIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MgZm9yIGBpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC0mZ3Q7bWluX3JlZ2lvbl9zeilgLiBXaGVyZSBkaWQgdGhhdCBsb2dpYyBlbmQgdXA/IEkgcmVtZW1iZXIgc2VlaW5nIGl0IHNvbWV3aGVyZS4gTGV0IG1lIGp1bXAgaW50byB0aGUgYF9fZGFtb25fY29tbWl0X2N0eGAgaW1wbGVtZW50YXRpb247IEkgdGhpbmsgdGhhdCYjMzk7cyB0aGUgcGxhY2UgaXQgd291bGQgYmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNoZWNrIGlzIGluIHBsYWNlLCBhbmQgd2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjY3Olx0c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4xNjY4Olx0e1xuMTY2OTpcdFx0aW50IGVycjtcbjE2NzA6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMTY3MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4xNjcyOlx0XG4xNjczOlx0XHRkc3QtXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gdHJ1ZTtcbjE2NzQ6XHRcdGlmICghaXNfcG93ZXJfb2ZfMihzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4xNjc1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY3NjpcdFxuMTY3NzpcdFx0Lyogbm9kZV9lbGlnaWJsZV9tZW1fYnAgbWV0cmljIHJlcXVpcmVzIFBBRERSIG9wcyAqL1xuMTY3ODpcdFx0aWYgKHNyYy1cdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKSB7XG4xNjc5Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xuMTY4MDpcdFx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGE7XG4xNjgxOlx0XG4xNjgyOlx0XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xuMTY4MzpcdFx0XHRcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09XG4xNjg0Olx0XHRcdFx0XHRcdFx0REFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlApXG4xNjg1Olx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY4NjpcdFx0XHRcdH1cbjE2ODc6XHRcdFx0fVxuMTY4ODpcdFx0fVxuMTY4OTpcdFxuMTY5MDpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3NjaGVtZXMoZHN0LCBzcmMpO1xuMTY5MTpcdFx0aWYgKGVycilcbjE2OTI6XHRcdFx0cmV0dXJuIGVycjtcbjE2OTM6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcbjE2OTQ6XHRcdGlmIChlcnIpXG4xNjk1Olx0XHRcdHJldHVybiBlcnI7XG4xNjk2Olx0XHQvKlxuMTY5NzpcdFx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2VcbjE2OTg6XHRcdCAqIDEuIGRhbW9uX3NldF9hdHRycygpIHVwZGF0ZXMgbW9uaXRvcmluZyByZXN1bHRzIG9mIHRhcmdldHMgYW5kXG4xNjk5Olx0XHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcbjE3MDA6XHRcdCAqIDIuIG9wcyB1cGRhdGUgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgcGlkIGhhbmRsaW5nIGlzIGRvbmUgKHRhcmdldFxuMTcwMTpcdFx0ICogICAgY29tbWl0dGluZyByZXF1aXJlIHB1dHRpbmcgcGlkcykuXG4xNzAyOlx0XHQgKi9cbjE3MDM6XHRcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFx1MDAyNmRzdC1cdTAwM2VhdHRycywgXHUwMDI2c3JjLVx1MDAzZWF0dHJzKSkge1xuMTcwNDpcdFx0XHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcdTAwMjZzcmMtXHUwMDNlYXR0cnMpO1xuMTcwNTpcdFx0XHRpZiAoZXJyKSB7XG4xNzA2Olx0XHRcdFx0ZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKGRzdCwgTlVMTCwgc3JjKTtcbjE3MDc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTcwODpcdFx0XHR9XG4xNzA5Olx0XHR9XG4xNzEwOlx0XHRkc3QtXHUwMDNlcGF1c2UgPSBzcmMtXHUwMDNlcGF1c2U7XG4xNzExOlx0XHRkc3QtXHUwMDNlb3BzID0gc3JjLVx1MDAzZW9wcztcbjE3MTI6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuMTcxMzpcdFx0aWYgKGVycilcbjE3MTQ6XHRcdFx0cmV0dXJuIGVycjtcbjE3MTU6XHRcdGRzdC1cdTAwM2VhZGRyX3VuaXQgPSBzcmMtXHUwMDNlYWRkcl91bml0O1xuMTcxNjpcdFx0ZHN0LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBzcmMtXHUwMDNlbWluX3JlZ2lvbl9zejtcbjE3MTc6XHRcbjE3MTg6XHRcdGRzdC1cdTAwM2VtYXliZV9jb3JydXB0ZWQgPSBmYWxzZTtcbjE3MTk6XHRcdHJldHVybiAwO1xuMTcyMDpcdH1cbjE3MjE6XHRcbjE3MjI6XHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbjE3MjM6XHR7XG4xNzI0Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbjE3MjU6XHRcdGludCBlcnI7XG4xNzI2Olx0XG4xNzI3Olx0XHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcbjE3Mjg6XHRcdGlmICghdGVzdF9jdHgpXG4xNzI5Olx0XHRcdHJldHVybiBOVUxMO1xuMTczMDpcdFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xuMTczMTpcdFx0aWYgKGVycikge1xuMTczMjpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4xNzMzOlx0XHRcdHJldHVybiBOVUxMO1xuMTczNDpcdFx0fVxuMTczNTpcdFx0cmV0dXJuIHRlc3RfY3R4O1xuMTczNjpcdH1cbjE3Mzc6XHRcbjE3Mzg6XHQvKipcbjE3Mzk6XHQgKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbjE3NDA6XHQgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuMTc0MTpcdCAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuMTc0MjpcdCAqXG4xNzQzOlx0ICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlXG4xNzQ0Olx0ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuMTc0NTpcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcbjE3NDY6XHQgKiBpbi1wbGFjZSB1cGRhdGVzLlxuMTc0NzpcdCAqXG4xNzQ4Olx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4xNzQ5Olx0ICogZGFtb25fY2FsbCgpLlxuMTc1MDpcdCAqL1xuMTc1MTpcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuMTc1MjpcdHtcbjE3NTM6XHRcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuMTc1NDpcdFx0aW50IGVycjtcbjE3NTU6XHRcbjE3NTY6XHRcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XG4xNzU3Olx0XHRpZiAoIXRlc3RfY3R4KVxuMTc1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NTk6XHRcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcbjE3NjA6XHRcdGlmIChlcnIpXG4xNzYxOlx0XHRcdGdvdG8gb3V0O1xuMTc2MjpcdFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcbjE3NjM6XHRvdXQ6XG4xNzY0Olx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4xNzY1Olx0XHRyZXR1cm4gZXJyO1xuMTc2NjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQ2hlY2tpbmcgREFNT04gUmVnaW9uIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYF9fZGFtb25fY29tbWl0X2N0eGAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAoIWlzX3Bvd2VyX29mXzIoc3JjLSZndDttaW5fcmVnaW9uX3N6KSkgcmV0dXJuIC1FSU5WQUw7YC4gU21hcnQgbW92ZS4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBtaW5pbXVtIHJlZ2lvbiBzaXplIGlzIGEgcG93ZXIgb2YgdHdvOyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBEQU1PTiYjMzk7cyBvcGVyYXRpb24uIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGdvb2QgdG8gaGF2ZSBleHBsaWNpdCB2YWxpZGF0aW9uLgoKVGhlbiwgbG9va2luZyBhdCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBJIHNwb3QgYGlmIChzdGFydCAmZ3Q7IGVuZCkgcmV0dXJuIC1FSU5WQUw7YC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UgY2FuJiMzOTt0IGhhdmUgYSBzdGFydCBhZGRyZXNzIHRoYXQmIzM5O3MgKmFmdGVyKiB0aGUgZW5kIGFkZHJlc3MsIGl0JiMzOTtkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGlzc3Vlcy4gU2ltcGxlLCBidXQgY3JpdGljYWwgZm9yIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlZ3JpdHkuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24gaXRzZWxmLiBMZXQgbWUgbmF2aWdhdGUgdG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGRldGFpbHMgSSYjMzk7bSBtaXNzaW5nLiBBbHdheXMgZ29vZCB0byBoYXZlIGEgdGhvcm91Z2ggbG9vayBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgcHJvdGVjdGluZyBhZ2FpbnN0IHRoZSBvYnZpb3VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIG9mIHRoZSBsZXNzIG9idmlvdXMsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0Mjg6XHQgKiBkYW1vbl9zZXRfcmVnaW9ucygpIC0gU2V0IHJlZ2lvbnMgb2YgYSB0YXJnZXQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2VzLlxuIDQyOTpcdCAqIEB0Olx0XHR0aGUgZ2l2ZW4gdGFyZ2V0LlxuIDQzMDpcdCAqIEByYW5nZXM6XHRhcnJheSBvZiBuZXcgbW9uaXRvcmluZyB0YXJnZXQgcmFuZ2VzLlxuIDQzMTpcdCAqIEBucl9yYW5nZXM6XHRsZW5ndGggb2YgQHJhbmdlcy5cbiA0MzI6XHQgKiBAbWluX3JlZ2lvbl9zejpcdG1pbmltdW0gcmVnaW9uIHNpemUuXG4gNDMzOlx0ICpcbiA0MzQ6XHQgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgbmV3IHJlZ2lvbnMgdG8sIG9yIG1vZGlmeSBleGlzdGluZyByZWdpb25zIG9mIGFcbiA0MzU6XHQgKiBtb25pdG9yaW5nIHRhcmdldCB0byBmaXQgaW4gc3BlY2lmaWMgcmFuZ2VzLlxuIDQzNjpcdCAqXG4gNDM3Olx0ICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuIDQzODpcdCAqL1xuIDQzOTpcdGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuIDQ0MDpcdFx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4gNDQxOlx0e1xuIDQ0MjpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG4gNDQzOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiA0NDQ6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9lbmQ7XG4gNDQ1Olx0XHRpbnQgZXJyO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuIDQ0ODpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4gNDQ5Olx0XG4gNDUwOlx0XHRcdHN0YXJ0ID0gQUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuIDQ1MTpcdFx0XHRlbmQgPSBBTElHTihyYW5nZXNbaV0uZW5kLCBtaW5fcmVnaW9uX3N6KTtcbiA0NTI6XHRcdFx0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuIDQ1MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1NDpcdFx0XHRpZiAoaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGFzdF9lbmQgXHUwMDNlIHN0YXJ0KVxuIDQ1NTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1NjpcdFx0XHRsYXN0X2VuZCA9IGVuZDtcbiA0NTc6XHRcdH1cbiA0NTg6XHRcbiA0NTk6XHRcdC8qIFJlbW92ZSByZWdpb25zIHdoaWNoIGFyZSBub3QgaW4gdGhlIG5ldyByYW5nZXMgKi9cbiA0NjA6XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcbiA0NjE6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuIDQ2MjpcdFx0XHRcdGlmIChkYW1vbl9pbnRlcnNlY3QociwgXHUwMDI2cmFuZ2VzW2ldKSlcbiA0NjM6XHRcdFx0XHRcdGJyZWFrO1xuIDQ2NDpcdFx0XHR9XG4gNDY1Olx0XHRcdGlmIChpID09IG5yX3JhbmdlcylcbiA0NjY6XHRcdFx0XHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcbiA0Njc6XHRcdH1cbiA0Njg6XHRcbiA0Njk6XHRcdGlmICghZGFtb25fbnJfcmVnaW9ucyh0KSkge1xuIDQ3MDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4gNDcxOlx0XHRcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oXG4gNDcyOlx0XHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2VzW2ldLnN0YXJ0LFxuIDQ3MzpcdFx0XHRcdFx0XHRcdG1pbl9yZWdpb25fc3opLFxuIDQ3NDpcdFx0XHRcdFx0XHRBTElHTihyYW5nZXNbaV0uZW5kLCBtaW5fcmVnaW9uX3N6KSk7XG4gNDc1Olx0XHRcdFx0aWYgKCFyKVxuIDQ3NjpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDc3Olx0XHRcdFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiA0Nzg6XHRcdFx0fVxuIDQ3OTpcdFx0XHRyZXR1cm4gMDtcbiA0ODA6XHRcdH1cbiA0ODE6XHRcbiA0ODI6XHRcdHIgPSBkYW1vbl9maXJzdF9yZWdpb24odCk7XG4gNDgzOlx0XHQvKiBBZGQgbmV3IHJlZ2lvbnMgb3IgcmVzaXplIGV4aXN0aW5nIHJlZ2lvbnMgdG8gZml0IGluIHRoZSByYW5nZXMgKi9cbiA0ODQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHtcbiA0ODU6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QgPSBOVUxMLCAqbGFzdCwgKm5ld3I7XG4gNDg2Olx0XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcbiA0ODc6XHRcdFx0Ym9vbCBpbnNlcnRfYmVmb3JlX3IgPSBmYWxzZTtcbiA0ODg6XHRcbiA0ODk6XHRcdFx0cmFuZ2UgPSBcdTAwMjZyYW5nZXNbaV07XG4gNDkwOlx0XHRcdC8qIEdldCB0aGUgZmlyc3QvbGFzdCByZWdpb25zIGludGVyc2VjdGluZyB3aXRoIHRoZSByYW5nZSAqL1xuIDQ5MTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XG4gNDkyOlx0XHRcdFx0aWYgKGRhbW9uX2ludGVyc2VjdChyLCByYW5nZSkpIHtcbiA0OTM6XHRcdFx0XHRcdGlmICghZmlyc3QpXG4gNDk0Olx0XHRcdFx0XHRcdGZpcnN0ID0gcjtcbiA0OTU6XHRcdFx0XHRcdGxhc3QgPSByO1xuIDQ5NjpcdFx0XHRcdH1cbiA0OTc6XHRcdFx0XHRpZiAoci1cdTAwM2Vhci5zdGFydCBcdTAwM2U9IHJhbmdlLVx1MDAzZWVuZCkge1xuIDQ5ODpcdFx0XHRcdFx0aW5zZXJ0X2JlZm9yZV9yID0gdHJ1ZTtcbiA0OTk6XHRcdFx0XHRcdGJyZWFrO1xuIDUwMDpcdFx0XHRcdH1cbiA1MDE6XHRcdFx0fVxuIDUwMjpcdFx0XHRpZiAoIWZpcnN0KSB7XG4gNTAzOlx0XHRcdFx0Lyogbm8gcmVnaW9uIGludGVyc2VjdHMgd2l0aCB0aGlzIHJhbmdlICovXG4gNTA0Olx0XHRcdFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oXG4gNTA1Olx0XHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlc3RhcnQsXG4gNTA2Olx0XHRcdFx0XHRcdFx0bWluX3JlZ2lvbl9zeiksXG4gNTA3Olx0XHRcdFx0XHRcdEFMSUdOKHJhbmdlLVx1MDAzZWVuZCwgbWluX3JlZ2lvbl9zeikpO1xuIDUwODpcdFx0XHRcdGlmICghbmV3cilcbiA1MDk6XHRcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDUxMDpcdFx0XHRcdGlmIChpbnNlcnRfYmVmb3JlX3IpXG4gNTExOlx0XHRcdFx0XHRkYW1vbl9pbnNlcnRfcmVnaW9uKG5ld3IsIGRhbW9uX3ByZXZfcmVnaW9uKHIpLFxuIDUxMjpcdFx0XHRcdFx0XHRcdHIsIHQpO1xuIDUxMzpcdFx0XHRcdGVsc2VcbiA1MTQ6XHRcdFx0XHRcdGRhbW9uX2FkZF9yZWdpb24obmV3ciwgdCk7XG4gNTE1Olx0XHRcdH0gZWxzZSB7XG4gNTE2Olx0XHRcdFx0LyogcmVzaXplIGludGVyc2VjdGluZyByZWdpb25zIHRvIGZpdCBpbiB0aGlzIHJhbmdlICovXG4gNTE3Olx0XHRcdFx0Zmlyc3QtXHUwMDNlYXIuc3RhcnQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZXN0YXJ0LFxuIDUxODpcdFx0XHRcdFx0XHRtaW5fcmVnaW9uX3N6KTtcbiA1MTk6XHRcdFx0XHRsYXN0LVx1MDAzZWFyLmVuZCA9IEFMSUdOKHJhbmdlLVx1MDAzZWVuZCwgbWluX3JlZ2lvbl9zeik7XG4gNTIwOlx0XG4gNTIxOlx0XHRcdFx0LyogZmlsbCBwb3NzaWJsZSBob2xlcyBpbiB0aGUgcmFuZ2UgKi9cbiA1MjI6XHRcdFx0XHRlcnIgPSBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoZmlyc3QsIGxhc3QsIHQpO1xuIDUyMzpcdFx0XHRcdGlmIChlcnIpXG4gNTI0Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDUyNTpcdFx0XHR9XG4gNTI2Olx0XHR9XG4gNTI3Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERBTU9OIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBgZGFtb25fc2V0X3JlZ2lvbnNgIGhhcyBiZWVuIHVwZGF0ZWQuJiMzNDsgSSBzZWUgdGhlIGNydWNpYWwgbG9vcDoKCmBgYGMKCQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewoJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CgoJCQlzdGFydCA9IEFMSUdOX0RPV04ocmFuZ2VzW2ldLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTsKCQkJZW5kID0gQUxJR04ocmFuZ2VzW2ldLmVuZCwgbWluX3JlZ2lvbl9zeik7CgkJCWlmIChzdGFydCAmZ3Q7PSBlbmQpCgkJCQlyZXR1cm4gLUVJTlZBTDsKCQkJaWYgKGkgJmd0OyAwICZhbXA7JmFtcDsgbGFzdF9lbmQgJmd0OyBzdGFydCkKCQkJCXJldHVybiAtRUlOVkFMOwoJCQlsYXN0X2VuZCA9IGVuZDsKCQl9CmBgYAoKSXQmIzM5O3MgY2xlYXIgbm93IHRoYXQgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIHZhbGlkYXRlcyB0aGF0IHRoZSBzdGFydCBpcyAqbm90KiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGVuZCwgZW5zdXJpbmcgYSB2YWxpZCByZWdpb24uIFRoYXQmIzM5O3MgZ29vZCwgZWZmaWNpZW50LiBJdCBtYWtlcyBzZW5zZSB3aHkgdGhleSByZW1vdmVkIHRoZSByZWR1bmRhbnQgY2hlY2tzIChgaWYgKCpzdGFydCAmZ3Q7ICplbmQpYCBpbiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBhbmQgYHN5c19yZWdpb24tJmd0O2FyLnN0YXJ0ICZndDsgc3lzX3JlZ2lvbi0mZ3Q7YXIuZW5kYCBpbiBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgKSDigJMgYGRhbW9uX3NldF9yZWdpb25zYCBpcyBoYW5kbGluZyB0aGUgdmFsaWRhdGlvbiwgbWFraW5nIHRoZSBvdGhlciBjaGVja3MgdW5uZWNlc3NhcnkuIENsZWFuZXIgY29kZSBpcyBhbHdheXMgd2VsY29tZS4KClRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYGRhbW9uX2NvbW1pdF9jdHhgLiBJdCYjMzk7cyBub3cgdGVzdGluZyBmb3IgY2hhbmdlcyAqYmVmb3JlKiBjb21taXR0aW5nIHRoZW0uIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbiBpbiB0aGUgREFNT04gYXJjaGl0ZWN0dXJlLiBHb29kIG9uIHRoZW0gZm9yIHRoYXQuIFNpbWlsYXJseSwgYGRhbW9uX3N0YXJ0YCBpcyBub3cgZG9pbmcgdGhlIHNhbWUgdGhpbmc6IHRlc3RpbmcgZm9yIGNoYW5nZXMgYmVmb3JlIHN0YXJ0aW5nLiBUaGF0JiMzOTtzIGFsc28gYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgYXJlIHNpZ25pZmljYW50LgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIGdpdmVuIHRoZXNlIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgREFNT04/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UmIzM5O3JlIHByb3Blcmx5IHNldHRpbmcgdXAgdGhlIHN5c3RlbSBmb3IgREFNT04uJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZS4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBgbW0vZGFtb24vcmVjbGFpbS5jYCwgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHF1aXRlIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBmaWxlcyBhZmZlY3RlZCwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGNvbnNpZGVyIGBEQU1PTmAsIGBEQU1PTl9MUlVfU09SVGAsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9TWVNGU2Agb3B0aW9ucy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBtbS9kYW1vbi9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgY29uZmlndXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGF0IHBsYXkuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRlZHVjaW5nIEJ1aWxkIFJlbGF0aW9uc2hpcHMgaW4gYSBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYERBTU9OYCBoZXJlLi4uIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBzdGFuZGFsb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGlyZWN0bHkgcHJvZHVjZXMgYGNvcmUub2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgYSBkaXJlY3QgbGluaywgYnV0IHRoYXQmIzM5O3Mgbm90IHdoYXQgSSYjMzk7bSBzZWVpbmcuCgpIb2xkIG9uLCBsZXQgbWUgdHJhY2UgdGhpcy4uLiB3aGVyZSBkb2VzIGBEQU1PTmAgZ2V0IGJyb3VnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcz8gQWggaGEhIEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gQW5kIHRoYXQgYE1ha2VmaWxlYCBpcyBpbmNsdWRlZCBmcm9tIGBtbS9NYWtlZmlsZWAuLi4gdGhhdCYjMzk7cyB0aGUgY29ubmVjdGlvbiEgU28gaXQmIzM5O3MgYmVpbmcgaW5jb3Jwb3JhdGVkIGhpZ2hlciB1cCB0aGUgYnVpbGQgaGllcmFyY2h5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jbHVzaW9uIGluIGBtbS9NYWtlZmlsZWAgd29ya3MgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgYERBTU9OYCBpbmZsdWVuY2VzIHRoZSBjcmVhdGlvbiBvZiBgY29yZS5vYCwgYW5kIG90aGVyIHJlbGF0ZWQgb2JqZWN0cy4gTm93IEkgaGF2ZSBhIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM0PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNTpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzNi1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTkyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHBhdGNoIHJlbGF0ZWQgdG8gREFNT04uIEl0JiMzOTtzIGNsZWFyIHRoYXQgZW5hYmxpbmcgYENPTkZJR19EQU1PTmAgd2lsbCBicmluZyBpbiB0aGUgZW50aXJlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gIEFuZCwgaWYgSSBlbmFibGUgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUkVDTEFJTWAsIGFuZCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgSSYjMzk7bSBnb2luZyB0byBnZXQgYHN5c2ZzLm9gLCBgcmVjbGFpbS5vYCwgYW5kIGBscnVfc29ydC5vYCBidWlsdCwgcmVzcGVjdGl2ZWx5LiAgVGhlcmVmb3JlLCB0byBnZXQgdGhlIGZ1bGwgREFNT04gc3VpdGUsIEkgZGVmaW5pdGVseSBuZWVkIHRvIHNldCBhbGwgb2YgdGhvc2UgLSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgIHRvICYjMzk7eSYjMzk7LgoKTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nPyAgTGV0JiMzOTtzIHNlZeKApiBJJiMzOTttIG5vdGljaW5nIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX2NvbW1pdF9jdHhgLCBgX19kYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX25ld190ZXN0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAuCgpDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyB0byBmb2N1cyBvbiBoZXJlIGFyZSBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGguCgpJIHdhbnQgdG8gY2hlY2sgaG93IHRob3NlIGBzeXNmc2AgZnVuY3Rpb25zIHdvcmssIHNpbmNlIHRoZXkgYXJlIGNydWNpYWwgZm9yIHNldHRpbmcgdXAgYW5kIGNvbnRyb2xsaW5nIHRoZSBEQU1PTiBzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXMgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgcmVhY2hhYmxlPyBZZXMsIGl0JiMzOTtzIGEgc3lzZnMgY2FsbGJhY2suIEFuZCB0aGUgc2FtZSBmb3IgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCAtIGFub3RoZXIgc3lzZnMgY2FsbGJhY2suIEFuZCB0aG9zZSBhcHBseSBwYXJhbWV0ZXJzIGZ1bmN0aW9ucyBmb3IgbHJ1IGFuZCByZWNsYWltIGFyZSBwcm9iYWJseSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrcyBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggSSB3aWxsIGxvb2sgYXQgdG9vLgoKTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDQ6XHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDUtfVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE0LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTU6XHRlcnIgPSBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERBTU9OIFBhcmFtZXRlciBBcHBsaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IERBTU9OIHBhcmFtZXRlcnMgYXJlIGFwcGxpZWQuIEkgc2VlIHRoYXQgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuYCBhbmQgdGhlIGBkYW1vbl9scnVfc29ydF90dXJuYCBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBpdCBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGguIFNpbWlsYXIgcHJvY2Vzc2VzIG11c3QgZXhpc3QgZm9yIG90aGVyIGNvbXBvbmVudHMsIGZvciBleGFtcGxlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLgoKSSB3YW50IHRvIHNlZSAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBjb21taXR0ZWQuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgZnVuY3Rpb24sIGFzIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBwbGFjZSBmb3IgdGhlIGZpbmFsIHBhcmFtZXRlciBhcHBsaWNhdGlvbiB0byBvY2N1ci4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGF0IG9uZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIwOTU9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTgtLypcbm1tL2RhbW9uL3N5c2ZzLmM6MjA5OTogKiBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQoKSAtIENvbW1pdCB1c2VyIGlucHV0cyB0byBhIHJ1bm5pbmcga2RhbW9uZC5cbm1tL2RhbW9uL3N5c2ZzLmMtMjEwMC0gKiBAa2RhbW9uZDpcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAzLSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMTA0OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDUte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMzNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM0OC1cdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jOjIzNDk6XHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xubW0vZGFtb24vc3lzZnMuYy0yMzUwLVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTMyCgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhpcyBwYXRjaCBvdmVyLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHBvc2l0aXZlOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGBzeXNmc2AgY29tbWFuZHMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gRnVuY3Rpb25hbGx5LCBpdCBsb29rcyBzb2xpZC4gVGhlIGFkZGl0aW9uIG9mIGEgdGVzdCBjb250ZXh0IGNyZWF0aW9uIGJlZm9yZSBjb21taXR0aW5nIHBhcmFtZXRlcnMgaXMgYSBzbWFydCBtb3ZlLiBUaGlzIHByb2FjdGl2ZSB2YWxpZGF0aW9uIHNob3VsZCBwcmV2ZW50IHRob3NlIG5hc3R5IHBhcnRpYWwgdXBkYXRlcyBvciBpbnZhbGlkIHN0YXRlcyB0aGF0IGNhbiBiZSBzdWNoIGEgaGVhZGFjaGUuCgpJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZGVlcGVyIGFuYWx5c2lzIGFuZCB0ZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhlc2UgYXJlIG9idmlvdXNseSB0aGUgY29yZSBlbGVtZW50cy4KCkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIHRoZSBleHBlY3RlZCBvbmVzOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBIb3dldmVyLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSByZWxldmFudC4gVGhpbmtpbmcgdGhyb3VnaCBob3cgdGhpcyBtaWdodCB3b3JrLCBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIHByb2JhYmx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5IHRvIGhhdmUgYW4gZWZmZWN0LiBXaGlsZSB0aGUgY29yZSBsb2dpYyBpcyBpbiBgREFNT05gLCB0aG9zZSB0d28gY29uZmlncyBhcmUgZnVuZGFtZW50YWwgdG8gZG9pbmcsIHdlbGwsIGFueXRoaW5nLiBJJiMzOTtsbCBpbmNsdWRlIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgaW4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgaW52b2x2ZSB0aGUgY29yZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NldF9yZWdpb25zJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGNvbnRleHQgY29tbWl0IGxvZ2ljIHRvIHVzZSBhIHRlc3QgY29udGV4dCB0byB2YWxpZGF0ZSBjaGFuZ2VzIGJlZm9yZSBhcHBseWluZyB0aGVtLiBJdCBhbHNvIHJlbW92ZXMgdmFsaWRhdGlvbiBsb2dpYyBmcm9tIHZhcmlvdXMgY2FsbGVycyBhbmQgcmVsaWVzIG9uIHRoZSBjb3JlIHZhbGlkYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NldF9yZWdpb25zJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGNvbnRleHQgY29tbWl0IGxvZ2ljIHRvIHVzZSBhIHRlc3QgY29udGV4dCB0byB2YWxpZGF0ZSBjaGFuZ2VzIGJlZm9yZSBhcHBseWluZyB0aGVtLiBJdCBhbHNvIHJlbW92ZXMgdmFsaWRhdGlvbiBsb2dpYyBmcm9tIHZhcmlvdXMgY2FsbGVycyBhbmQgcmVsaWVzIG9uIHRoZSBjb3JlIHZhbGlkYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjI4Ljg0NTYzNzg5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTAzNDUzNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NldF9yZWdpb25zXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBjb250ZXh0IGNvbW1pdCBsb2dpYyB0byB1c2UgYSB0ZXN0IGNvbnRleHQgdG8gdmFsaWRhdGUgY2hhbmdlcyBiZWZvcmUgYXBwbHlpbmcgdGhlbS4gSXQgYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSB2YXJpb3VzIGNhbGxlcnMgYW5kIHJlbGllcyBvbiB0aGUgY29yZSB2YWxpZGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjI4Ljg0NTY0NDI2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDg4NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWI1YTRkODQyNGIzMzNkYzNiZTAxOWQzMDM5OTc0ZGZhMTlmZDJhMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCA1IDE2OjIzOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDYxNmJkZjA5NTRiNTJhLi4yNjYxMjMxYzBhZTgyZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDksNyArNDksOCBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBsaXN0OlxcdFxcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXFxuICAqIEBhZ2U6XFx0XFx0QWdlIG9mIHRoaXMgcmVnaW9uLlxcbiAgKlxcbi0gKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuXFxuKyAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcXG4rICogZG9lcyB0aGUgdmFsaWRhdGlvbi5cXG4gICpcXG4gICogQG5yX2FjY2Vzc2VzIGlzIHJlc2V0IHRvIHplcm8gZm9yIGV2ZXJ5IFxcdTAwMjZkYW1vbl9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbCBhbmQgYmVcXG4gICogaW5jcmVhc2VkIGZvciBldmVyeSBcXHUwMDI2ZGFtb25fYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCBpZiBhbiBhY2Nlc3MgdG8gdGhlIHJlZ2lvblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA4NzFjNmY1MjU3YzllNC4uM2M1YTQ2ZTFjMDc5YTMgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTE2NjQsMjAgKzE2NjQsNyBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKipcXG4tICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXFxuLSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0Llxcbi0gKiBAc3JjOlxcdFRoZSBjb21taXQgc291cmNlIERBTU9OIGNvbnRleHQuXFxuLSAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZnJvbSBAc3JjIHRvIEBkc3QgYW5kIHVwZGF0ZVxcbi0gKiB0aGUgaW50ZXJuYWwgc3RhdHVzIGFuZCByZXN1bHRzIGFjY29yZGluZ2x5LiAgVXNlcnMgc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uXFxuLSAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcXG4tICogaW4tcGxhY2UgdXBkYXRlcy5cXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuLSAqIGRhbW9uX2NhbGwoKS5cXG4tICovXFxuLWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbitzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG5AQCAtMTczMiw2ICsxNzE5LDUyIEBAIGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4rXFx0aWYgKCF0ZXN0X2N0eClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcdHJldHVybiB0ZXN0X2N0eDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLlxcbisgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4rICogQHNyYzpcXHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcXG4rICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxcbisgKiBmb3IgY29udGV4dC1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nIGNvbnRleHQsIGluc3RlYWQgb2YgbWFudWFsXFxuKyAqIGluLXBsYWNlIHVwZGF0ZXMuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxcbisgKiBkYW1vbl9jYWxsKCkuXFxuKyAqL1xcbitpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XFxuK1xcdGlmICghdGVzdF9jdHgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHNyYyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpO1xcbitvdXQ6XFxuK1xcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGRhbW9uX25yX3J1bm5pbmdfY3R4cygpIC0gUmV0dXJuIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0cy5cXG4gICovXFxuQEAgLTE4MzIsNiArMTg2NSw4IEBAIHN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4rXFxuIC8qKlxcbiAgKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG4gICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuQEAgLTE4NTMsOCArMTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxuLVxcdFxcdGlmICghaXNfcG93ZXJfb2ZfMihjdHhzW2ldLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xcbitcXG4rXFx0XFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuK1xcdFxcdGlmICghdGVzdF9jdHgpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBjdHhzW2ldKTtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9sb2NrKTtcXG5AQCAtMzgwMyw5ICszODQ2LDYgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuIFxcbi1cXHRpZiAoKnN0YXJ0IFxcdTAwM2UgKmVuZClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHRpZiAoISpzdGFydCBcXHUwMDI2XFx1MDAyNiAhKmVuZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5pbmRleCAzMmY0MTQ5MWI3MjZiMi4uMmRkMGNkMGQyNjI3MzEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5AQCAtMjg0LDExICsyODQsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4gXFx0cGFyYW1fY3R4LVxcdTAwM2VhZGRyX3VuaXQgPSBhZGRyX3VuaXQ7XFxuIFxcdHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcXG4gXFxuLVxcdGlmICghaXNfcG93ZXJfb2ZfMihwYXJhbV9jdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxuLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoIWRhbW9uX2xydV9zb3J0X21vbl9hdHRycy5zYW1wbGVfaW50ZXJ2YWwpIHtcXG4gXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbmluZGV4IDExYjcwZDBhOWE2ZjBhLi42NDY5YjI1Y2MzNGY5MiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMjA4LDExICsyMDgsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbiBcXHRwYXJhbV9jdHgtXFx1MDAzZWFkZHJfdW5pdCA9IGFkZHJfdW5pdDtcXG4gXFx0cGFyYW1fY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KERBTU9OX01JTl9SRUdJT05fU1ogLyBhZGRyX3VuaXQsIDEpO1xcbiBcXG4tXFx0aWYgKCFpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG4tXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdGlmICghZGFtb25fcmVjbGFpbV9tb25fYXR0cnMuYWdncl9pbnRlcnZhbCkge1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMTk4Nyw5ICsxOTg3LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpzeXNfcmVnaW9uID1cXG4gXFx0XFx0XFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNlcmVnaW9uc19hcnJbaV07XFxuIFxcbi1cXHRcXHRpZiAoc3lzX3JlZ2lvbi1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzZSBzeXNfcmVnaW9uLVxcdTAwM2Vhci5lbmQpXFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0XFx0cmFuZ2VzW2ldLnN0YXJ0ID0gc3lzX3JlZ2lvbi1cXHUwMDNlYXIuc3RhcnQ7XFxuIFxcdFxcdHJhbmdlc1tpXS5lbmQgPSBzeXNfcmVnaW9uLVxcdTAwM2Vhci5lbmQ7XFxuIFxcdFxcdGlmIChpID09IDApXFxuQEAgLTIwOTgsMjYgKzIwOTUsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KTtcXG4gXFxuLS8qXFxuLSAqIFJldHVybiBhIG5ldyBkYW1vbl9jdHggZm9yIHRlc3RpbmcgbmV3IHBhcmFtZXRlcnMgdG8gY29tbWl0Llxcbi0gKi9cXG4tc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcXG4tXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqcnVubmluZ19jdHgpXFxuLXtcXG4tXFx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4tXFx0aWYgKCF0ZXN0X2N0eClcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHJ1bm5pbmdfY3R4KTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHR9XFxuLVxcdHJldHVybiB0ZXN0X2N0eDtcXG4tfVxcbi1cXG4gLypcXG4gICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxuICAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuQEAgLTIxMjcsNyArMjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBkYXRhO1xcbi1cXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDtcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXFxuQEAgLTIxMzksMTcgKzIxMTYsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKVxcbiBcXHRwYXJhbV9jdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXSk7XFxuIFxcdGlmIChJU19FUlIocGFyYW1fY3R4KSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocGFyYW1fY3R4KTtcXG4tXFx0dGVzdF9jdHggPSBkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4tXFx0aWYgKCF0ZXN0X2N0eCkge1xcbi1cXHRcXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbi1cXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBwYXJhbV9jdHgpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4gXFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XFxuLW91dDpcXG4tXFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xcbiBcXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjI5LjMyNDExMDc3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MjQ5NzIxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dFwiLFxuICAgIFwiZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGNvbnRleHQgY29tbWl0IGxvZ2ljIHRvIHVzZSBhIHRlc3QgY29udGV4dCB0byB2YWxpZGF0ZSBjaGFuZ2VzIGJlZm9yZSBhcHBseWluZyB0aGVtLiBJdCBhbHNvIHJlbW92ZXMgdmFsaWRhdGlvbiBsb2dpYyBmcm9tIHZhcmlvdXMgY2FsbGVycyBhbmQgcmVsaWVzIG9uIHRoZSBjb3JlIHZhbGlkYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYjVhNGQ4NDI0YjMzM2RjM2JlMDE5ZDMwMzk5NzRkZmExOWZkMmEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxNjoyMzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNjE2YmRmMDk1NGI1MmEuLjI2NjEyMzFjMGFlODJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC00OSw3ICs0OSw4IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG4gICpcbi0gKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuXG4rICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxuKyAqIGRvZXMgdGhlIHZhbGlkYXRpb24uXG4gICpcbiAgKiBAbnJfYWNjZXNzZXMgaXMgcmVzZXQgdG8gemVybyBmb3IgZXZlcnkgXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCBhbmQgYmVcbiAgKiBpbmNyZWFzZWQgZm9yIGV2ZXJ5IFx1MDAyNmRhbW9uX2F0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCBpZiBhbiBhY2Nlc3MgdG8gdGhlIHJlZ2lvblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggODcxYzZmNTI1N2M5ZTQuLjNjNWE0NmUxYzA3OWEzIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xNjY0LDIwICsxNjY0LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qKlxuLSAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLlxuLSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9OIGNvbnRleHQuXG4tICogQHNyYzpcdFRoZSBjb21taXQgc291cmNlIERBTU9OIGNvbnRleHQuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcbi0gKiB0aGUgaW50ZXJuYWwgc3RhdHVzIGFuZCByZXN1bHRzIGFjY29yZGluZ2x5LiAgVXNlcnMgc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uXG4tICogZm9yIGNvbnRleHQtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZyBjb250ZXh0LCBpbnN0ZWFkIG9mIG1hbnVhbFxuLSAqIGluLXBsYWNlIHVwZGF0ZXMuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2Vcbi0gKiBkYW1vbl9jYWxsKCkuXG4tICovXG4taW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4rc3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuQEAgLTE3MzIsNiArMTcxOSw1MiBAQCBpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbitcdGludCBlcnI7XG4rXG4rXHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcbitcdGlmICghdGVzdF9jdHgpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1x0cmV0dXJuIHRlc3RfY3R4O1xuK31cbitcbisvKipcbisgKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbisgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuKyAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlXG4rICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuKyAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcbisgKiBpbi1wbGFjZSB1cGRhdGVzLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4rICogZGFtb25fY2FsbCgpLlxuKyAqL1xuK2ludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuK1x0aW50IGVycjtcbitcbitcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XG4rXHRpZiAoIXRlc3RfY3R4KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcbitvdXQ6XG4rXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiAvKipcbiAgKiBkYW1vbl9ucl9ydW5uaW5nX2N0eHMoKSAtIFJldHVybiBudW1iZXIgb2YgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dHMuXG4gICovXG5AQCAtMTgzMiw2ICsxODY1LDggQEAgc3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbitcbiAvKipcbiAgKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbiAgKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuQEAgLTE4NTMsOCArMTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSsrKSB7XG4tXHRcdGlmICghaXNfcG93ZXJfb2ZfMihjdHhzW2ldLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbitcbitcdFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4rXHRcdGlmICghdGVzdF9jdHgpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgY3R4c1tpXSk7XG4rXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9sb2NrKTtcbkBAIC0zODAzLDkgKzM4NDYsNiBAQCBpbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4ge1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiBcbi1cdGlmICgqc3RhcnQgXHUwMDNlICplbmQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0aWYgKCEqc3RhcnQgXHUwMDI2XHUwMDI2ICEqZW5kIFx1MDAyNlx1MDAyNlxuIFx0XHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggMzJmNDE0OTFiNzI2YjIuLjJkZDBjZDBkMjYyNzMxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTI4NCwxMSArMjg0LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gXG4tXHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0aWYgKCFkYW1vbl9scnVfc29ydF9tb25fYXR0cnMuc2FtcGxlX2ludGVydmFsKSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggMTFiNzBkMGE5YTZmMGEuLjY0NjliMjVjYzM0ZjkyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcbkBAIC0yMDgsMTEgKzIwOCw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gXG4tXHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTk4Nyw5ICsxOTg3LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpzeXNfcmVnaW9uID1cbiBcdFx0XHRzeXNmc19yZWdpb25zLVx1MDAzZXJlZ2lvbnNfYXJyW2ldO1xuIFxuLVx0XHRpZiAoc3lzX3JlZ2lvbi1cdTAwM2Vhci5zdGFydCBcdTAwM2Ugc3lzX3JlZ2lvbi1cdTAwM2Vhci5lbmQpXG4tXHRcdFx0Z290byBvdXQ7XG4tXG4gXHRcdHJhbmdlc1tpXS5zdGFydCA9IHN5c19yZWdpb24tXHUwMDNlYXIuc3RhcnQ7XG4gXHRcdHJhbmdlc1tpXS5lbmQgPSBzeXNfcmVnaW9uLVx1MDAzZWFyLmVuZDtcbiBcdFx0aWYgKGkgPT0gMClcbkBAIC0yMDk4LDI2ICsyMDk1LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4gXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KTtcbiBcbi0vKlxuLSAqIFJldHVybiBhIG5ldyBkYW1vbl9jdHggZm9yIHRlc3RpbmcgbmV3IHBhcmFtZXRlcnMgdG8gY29tbWl0LlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXG4tXHRcdHN0cnVjdCBkYW1vbl9jdHggKnJ1bm5pbmdfY3R4KVxuLXtcbi1cdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuLVx0aW50IGVycjtcbi1cbi1cdHRlc3RfY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuLVx0aWYgKCF0ZXN0X2N0eClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBydW5uaW5nX2N0eCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4tXHRyZXR1cm4gdGVzdF9jdHg7XG4tfVxuLVxuIC8qXG4gICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXG4gICogQGtkYW1vbmQ6XHRUaGUga29iamVjdCB3cmFwcGVyIGZvciB0aGUgYXNzb2NpYXRlZCBrZGFtb25kLlxuQEAgLTIxMjcsNyArMjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4tXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDtcbitcdHN0cnVjdCBkYW1vbl9jdHggKnBhcmFtX2N0eDtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbkBAIC0yMTM5LDE3ICsyMTE2LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbiBcdHBhcmFtX2N0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXSk7XG4gXHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBhcmFtX2N0eCk7XG4tXHR0ZXN0X2N0eCA9IGRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCk7XG4tXHRpZiAoIXRlc3RfY3R4KSB7XG4tXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcbi1vdXQ6XG4tXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4gXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyMzoyOS4zMjQxMTIzMTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzU0ODA0NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFJlZmFjdG9yaW5nOiBBIERlZXBlciBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXMg4oCTIGBjb3JlLmNgLCBgbHJ1X3NvcnQuY2AsIGByZWNsYWltLmNgLCBgc3lzZnMuY2AsIGFuZCBgZGFtb24uaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGZvY3VzZWQgb24gaG93IGBkYW1vbl9jb21taXRfY3R4YCB3b3Jrcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgZGFtb25fbmV3X3Rlc3RfY3R4YCBhbmQgYF9fZGFtb25fY29tbWl0X2N0eGAgaW4gYGNvcmUuY2AgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBtb3Zpbmcgc29tZSBzdHVmZiBhcm91bmQgdG8gc2VwYXJhdGUgY29uY2VybnMsIHByb2JhYmx5IGZvciBlcnJvciBoYW5kbGluZy5cblxuQnV0IHRoZW4gSSBzZWUgdGhlIHBhdGNoIGFsc28gcmVtb3ZlcyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gYSBmZXcgb2YgdGhlIGFwcGx5IHBhcmFtZXRlciBmdW5jdGlvbnMuIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnIC0gd2hlcmUncyB0aGF0IGxvZ2ljIGdvaW5nPyBJdCdzIGdvbmUgZnJvbSBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGRpZCB0aGV5IHB1dCBpdCBpbiBgX19kYW1vbl9jb21taXRfY3R4YCBvciBgZGFtb25fc2V0X3JlZ2lvbnNgPyBMZXQncyBjaGVjayB0aG9zZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgYGRhbW9uX2NvbW1pdF9jdHhgIHRvIGZpcnN0IGV4ZWN1dGUgYSBcImRyeSBydW5cIiB1c2luZyBgZGFtb25fbmV3X3Rlc3RfY3R4YCB0byB2YWxpZGF0ZSB0aGUgY29tbWl0IGJlZm9yZSBpdCBoYXBwZW5zLiBTbWFydC4gV2Ugd2FudCB0byBhdm9pZCBwYXJ0aWFsbHkgYXBwbGllZCBjaGFuZ2VzLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgdGhlIHJlbW92ZWQgYGlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opYCBjaGVjayBmcm9tIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBldmVuIGZyb20gYGRhbW9uX3N0YXJ0YCBpcyBnb25lLiBTbywgd2hlcmUgZGlkIGl0IGdvPyBMZXQncyBmaW5kIG91dCB3aGVyZSBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGxvY2F0ZWQuIEknbGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IGNoYW5nZSB0byBhbmFseXplLCBzbyBJIHNob3VsZCBiZSBzdXJlIHRvIGRvdWJsZSBjaGVjayBhbGwgdGhlIGFmZmVjdGVkIHNwb3RzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6MzYuMDc4OTE4ODk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTI0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NDA2PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQyNy0vKlxcbm1tL2RhbW9uL2NvcmUuYzo0Mjg6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cXG5tbS9kYW1vbi9jb3JlLmMtNDI5LSAqIEB0OlxcdFxcdHRoZSBnaXZlbiB0YXJnZXQuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0Mzk6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTQ0MC1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQ0ND1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ3My1cXHRyYW5nZXNbaSsrXS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVxcdTAwM2Vhci5lbmQ7XFxubW0vZGFtb24vY29yZS5jOjE0NzQ6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ3NS1cXHRrdmZyZWUocmFuZ2VzKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODQzPWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODU0LVxcdGFkZHJfcmFuZ2UuZW5kID0gKmVuZDtcXG5tbS9kYW1vbi9jb3JlLmM6Mzg1NTpcXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zODU2LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTk3NT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5OTYtXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTk5NzpcXHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXFx1MDAzZW5yLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5OTgtb3V0Olxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQ0NT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY2LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0Njc6XFx0ZGFtb25fc2V0X3JlZ2lvbnModCwgbmV3X3Jhbmdlcywgc3pfbmV3X3JhbmdlcywgbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ2OC1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9OTA9c3RhdGljIHN0cnVjdCBkYW1vbl9yZWdpb24gKl9fbnRoX3JlZ2lvbl9vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgaWR4KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMDMtLypcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjEwNDogKiBUZXN0ICdkYW1vbl9zZXRfcmVnaW9ucygpJ1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTA1LSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTExOC0gKiByZWdpb25zLiAgVGhlIHVwZGF0ZSBvZiBjdXJyZW50IHRhcmdldCByZWdpb25zIGlzIHRoZSByb2xlIG9mXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMTk6ICogJ2RhbW9uX3NldF9yZWdpb25zKCknLlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTIwLSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTEyNT1zdGF0aWMgdm9pZCBkYW1vbl9kb190ZXN0X2FwcGx5X3RocmVlX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNDctXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTQ4OlxcdGlmIChkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIG5yX3JlZ2lvbnMgLyAyLFxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ5LVxcdFxcdFxcdFxcdERBTU9OX01JTl9SRUdJT05fU1opKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1MS1cXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1MjpcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcXFwiKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1My1cXHR9XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1NS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1NjpcXHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWikpIHtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1Ny1cXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1ODpcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzZWNvbmQgZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTktXFx0fVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xOTE9c3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yMDctXFxubW0vZGFtb24vdmFkZHIuYzoyMDg6XFx0ZGFtb25fc2V0X3JlZ2lvbnModCwgcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWik7XFxubW0vZGFtb24vdmFkZHIuYy0yMDktfVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0yMjY9c3RhdGljIHZvaWQgZGFtb25fdmFfdXBkYXRlKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL3ZhZGRyLmM6MjM0OlxcdFxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjM1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6MzYuMTM1MDUxNTU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NjA3MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBDb250ZXh0IFZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gaG93IERBTU9OIGhhbmRsZXMgdmFsaWRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBzaGlmdGluZyBgZGFtb25fY29tbWl0X2N0eGAgdG8gdXNlIGEgdGVzdCBjb250ZXh0LCB3aGljaCBzb3VuZHMgbGlrZSBhIHNvbGlkIGFwcHJvYWNoIGZvciB2ZXJpZnlpbmcgY2hhbmdlcyBiZWZvcmUgdGhleSdyZSBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgSSBzZWUgdGhhdCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGEgZmV3IG90aGVyIGZ1bmN0aW9uczogYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCwgYW5kIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IFRoZSB2YWxpZGF0aW9uIGlzIG1vdmluZy4gU28gd2hlcmUgZXhhY3RseSBpcyBpdCBnb2luZz9cblxuSG1tLCB3YXMgdGhlIHZhbGlkYXRpb24gbG9naWMgbW92ZWQgdG8gYGRhbW9uX25ld190ZXN0X2N0eGAgb3IgYF9fZGFtb25fY29tbWl0X2N0eGA/IEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBsb2NhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTGV0IG1lIGp1c3QgcXVpY2tseSBqdW1wIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZGFtb25fY29tbWl0X2N0eGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NDAuMDgxMTI0ODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTIxOTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RhbW9uX2NvbW1pdF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNjM2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjY2LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjY3OnN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNjY4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzIyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3MjktXFx0XFx0cmV0dXJuIE5VTEw7XFxubW0vZGFtb24vY29yZS5jOjE3MzA6XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzMxLVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzUxPWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTgtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE3NTk6XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzYwLVxcdGlmIChlcnIpXFxubW0vZGFtb24vY29yZS5jLTE3NjEtXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vY29yZS5jOjE3NjI6XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTc2My1vdXQ6XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg0Nj1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NjctXFxubW0vZGFtb24vY29yZS5jOjE4Njg6c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODY5LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4ODU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg5Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTg5NzpcXHRcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0xODk4LVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NDAuNDUyMzQ5NzY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MzEwMzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgdGhlIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCBob2xkIG9uLiBJJ20ganVzdCBxdWlja2x5IHRyeWluZyB0byB0cmFjZSB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIGZvciBgaXNfcG93ZXJfb2ZfMihwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeilgLiBXaGVyZSBkaWQgdGhhdCBsb2dpYyBlbmQgdXA/IEkgcmVtZW1iZXIgc2VlaW5nIGl0IHNvbWV3aGVyZS4gTGV0IG1lIGp1bXAgaW50byB0aGUgYF9fZGFtb25fY29tbWl0X2N0eGAgaW1wbGVtZW50YXRpb247IEkgdGhpbmsgdGhhdCdzIHRoZSBwbGFjZSBpdCB3b3VsZCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY2hlY2sgaXMgaW4gcGxhY2UsIGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjQzLjAwNTQ1NTY1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY2NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2Njc6XFx0c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuMTY2ODpcXHR7XFxuMTY2OTpcXHRcXHRpbnQgZXJyO1xcbjE2NzA6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMTY3MTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4xNjcyOlxcdFxcbjE2NzM6XFx0XFx0ZHN0LVxcdTAwM2VtYXliZV9jb3JydXB0ZWQgPSB0cnVlO1xcbjE2NzQ6XFx0XFx0aWYgKCFpc19wb3dlcl9vZl8yKHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMTY3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjc2OlxcdFxcbjE2Nzc6XFx0XFx0Lyogbm9kZV9lbGlnaWJsZV9tZW1fYnAgbWV0cmljIHJlcXVpcmVzIFBBRERSIG9wcyAqL1xcbjE2Nzg6XFx0XFx0aWYgKHNyYy1cXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xcbjE2Nzk6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxuMTY4MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGE7XFxuMTY4MTpcXHRcXG4xNjgyOlxcdFxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG4xNjgzOlxcdFxcdFxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT1cXG4xNjg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQKVxcbjE2ODU6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTY4NjpcXHRcXHRcXHRcXHR9XFxuMTY4NzpcXHRcXHRcXHR9XFxuMTY4ODpcXHRcXHR9XFxuMTY4OTpcXHRcXG4xNjkwOlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcXG4xNjkxOlxcdFxcdGlmIChlcnIpXFxuMTY5MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2OTM6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xcbjE2OTQ6XFx0XFx0aWYgKGVycilcXG4xNjk1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTY5NjpcXHRcXHQvKlxcbjE2OTc6XFx0XFx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2VcXG4xNjk4OlxcdFxcdCAqIDEuIGRhbW9uX3NldF9hdHRycygpIHVwZGF0ZXMgbW9uaXRvcmluZyByZXN1bHRzIG9mIHRhcmdldHMgYW5kXFxuMTY5OTpcXHRcXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4xNzAwOlxcdFxcdCAqIDIuIG9wcyB1cGRhdGUgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgcGlkIGhhbmRsaW5nIGlzIGRvbmUgKHRhcmdldFxcbjE3MDE6XFx0XFx0ICogICAgY29tbWl0dGluZyByZXF1aXJlIHB1dHRpbmcgcGlkcykuXFxuMTcwMjpcXHRcXHQgKi9cXG4xNzAzOlxcdFxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG4xNzA0OlxcdFxcdFxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFxcdTAwMjZzcmMtXFx1MDAzZWF0dHJzKTtcXG4xNzA1OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNzA2OlxcdFxcdFxcdFxcdGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhkc3QsIE5VTEwsIHNyYyk7XFxuMTcwNzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE3MDg6XFx0XFx0XFx0fVxcbjE3MDk6XFx0XFx0fVxcbjE3MTA6XFx0XFx0ZHN0LVxcdTAwM2VwYXVzZSA9IHNyYy1cXHUwMDNlcGF1c2U7XFxuMTcxMTpcXHRcXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbjE3MTI6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuMTcxMzpcXHRcXHRpZiAoZXJyKVxcbjE3MTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNzE1OlxcdFxcdGRzdC1cXHUwMDNlYWRkcl91bml0ID0gc3JjLVxcdTAwM2VhZGRyX3VuaXQ7XFxuMTcxNjpcXHRcXHRkc3QtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSBzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3o7XFxuMTcxNzpcXHRcXG4xNzE4OlxcdFxcdGRzdC1cXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gZmFsc2U7XFxuMTcxOTpcXHRcXHRyZXR1cm4gMDtcXG4xNzIwOlxcdH1cXG4xNzIxOlxcdFxcbjE3MjI6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuMTcyMzpcXHR7XFxuMTcyNDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcXG4xNzI1OlxcdFxcdGludCBlcnI7XFxuMTcyNjpcXHRcXG4xNzI3OlxcdFxcdHRlc3RfY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbjE3Mjg6XFx0XFx0aWYgKCF0ZXN0X2N0eClcXG4xNzI5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3MzA6XFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xcbjE3MzE6XFx0XFx0aWYgKGVycikge1xcbjE3MzI6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xcbjE3MzM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTczNDpcXHRcXHR9XFxuMTczNTpcXHRcXHRyZXR1cm4gdGVzdF9jdHg7XFxuMTczNjpcXHR9XFxuMTczNzpcXHRcXG4xNzM4OlxcdC8qKlxcbjE3Mzk6XFx0ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXFxuMTc0MDpcXHQgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4xNzQxOlxcdCAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cXG4xNzQyOlxcdCAqXFxuMTc0MzpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcXG4xNzQ0OlxcdCAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb25cXG4xNzQ1OlxcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcXG4xNzQ2OlxcdCAqIGluLXBsYWNlIHVwZGF0ZXMuXFxuMTc0NzpcXHQgKlxcbjE3NDg6XFx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuMTc0OTpcXHQgKiBkYW1vbl9jYWxsKCkuXFxuMTc1MDpcXHQgKi9cXG4xNzUxOlxcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbjE3NTI6XFx0e1xcbjE3NTM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XFxuMTc1NDpcXHRcXHRpbnQgZXJyO1xcbjE3NTU6XFx0XFxuMTc1NjpcXHRcXHR0ZXN0X2N0eCA9IGRhbW9uX25ld190ZXN0X2N0eChkc3QpO1xcbjE3NTc6XFx0XFx0aWYgKCF0ZXN0X2N0eClcXG4xNzU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3NTk6XFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpO1xcbjE3NjA6XFx0XFx0aWYgKGVycilcXG4xNzYxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3NjI6XFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcXG4xNzYzOlxcdG91dDpcXG4xNzY0OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4xNzY1OlxcdFxcdHJldHVybiBlcnI7XFxuMTc2NjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjQzLjAwNTY3ODcxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTM2OTI3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkNoZWNraW5nIERBTU9OIFJlZ2lvbiBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IHRoZSBgX19kYW1vbl9jb21taXRfY3R4YCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjazogYGlmICghaXNfcG93ZXJfb2ZfMihzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHJldHVybiAtRUlOVkFMO2AuIFNtYXJ0IG1vdmUuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbWluaW11bSByZWdpb24gc2l6ZSBpcyBhIHBvd2VyIG9mIHR3bzsgdGhhdCdzIGZ1bmRhbWVudGFsIGZvciBEQU1PTidzIG9wZXJhdGlvbi4gTm8gc3VycHJpc2VzIHRoZXJlLCBidXQgZ29vZCB0byBoYXZlIGV4cGxpY2l0IHZhbGlkYXRpb24uXG5cblRoZW4sIGxvb2tpbmcgYXQgYGRhbW9uX3NldF9yZWdpb25zYCwgSSBzcG90IGBpZiAoc3RhcnQgXHUwMDNlIGVuZCkgcmV0dXJuIC1FSU5WQUw7YC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UgY2FuJ3QgaGF2ZSBhIHN0YXJ0IGFkZHJlc3MgdGhhdCdzICphZnRlciogdGhlIGVuZCBhZGRyZXNzLCBpdCdkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGlzc3Vlcy4gU2ltcGxlLCBidXQgY3JpdGljYWwgZm9yIHRoZSBmdW5jdGlvbidzIGludGVncml0eS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGRhbW9uX3NldF9yZWdpb25zYCBmdW5jdGlvbiBpdHNlbGYuIExldCBtZSBuYXZpZ2F0ZSB0byBgbW0vZGFtb24vY29yZS5jYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgZGV0YWlscyBJJ20gbWlzc2luZy4gQWx3YXlzIGdvb2QgdG8gaGF2ZSBhIHRob3JvdWdoIGxvb2sgYXQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50IHRoYXQgd2UncmUgcHJvcGVybHkgcHJvdGVjdGluZyBhZ2FpbnN0IHRoZSBvYnZpb3VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIG9mIHRoZSBsZXNzIG9idmlvdXMsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NDYuODU5MzczMDI5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyODpcXHQgKiBkYW1vbl9zZXRfcmVnaW9ucygpIC0gU2V0IHJlZ2lvbnMgb2YgYSB0YXJnZXQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2VzLlxcbiA0Mjk6XFx0ICogQHQ6XFx0XFx0dGhlIGdpdmVuIHRhcmdldC5cXG4gNDMwOlxcdCAqIEByYW5nZXM6XFx0YXJyYXkgb2YgbmV3IG1vbml0b3JpbmcgdGFyZ2V0IHJhbmdlcy5cXG4gNDMxOlxcdCAqIEBucl9yYW5nZXM6XFx0bGVuZ3RoIG9mIEByYW5nZXMuXFxuIDQzMjpcXHQgKiBAbWluX3JlZ2lvbl9zejpcXHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxcbiA0MzM6XFx0ICpcXG4gNDM0OlxcdCAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgcmVnaW9ucyB0bywgb3IgbW9kaWZ5IGV4aXN0aW5nIHJlZ2lvbnMgb2YgYVxcbiA0MzU6XFx0ICogbW9uaXRvcmluZyB0YXJnZXQgdG8gZml0IGluIHNwZWNpZmljIHJhbmdlcy5cXG4gNDM2OlxcdCAqXFxuIDQzNzpcXHQgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuIDQzODpcXHQgKi9cXG4gNDM5OlxcdGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbiA0NDA6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbiA0NDE6XFx0e1xcbiA0NDI6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxuIDQ0MzpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gNDQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9lbmQ7XFxuIDQ0NTpcXHRcXHRpbnQgZXJyO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4gNDQ4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0XFx0c3RhcnQgPSBBTElHTl9ET1dOKHJhbmdlc1tpXS5zdGFydCwgbWluX3JlZ2lvbl9zeik7XFxuIDQ1MTpcXHRcXHRcXHRlbmQgPSBBTElHTihyYW5nZXNbaV0uZW5kLCBtaW5fcmVnaW9uX3N6KTtcXG4gNDUyOlxcdFxcdFxcdGlmIChzdGFydCBcXHUwMDNlPSBlbmQpXFxuIDQ1MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDU0OlxcdFxcdFxcdGlmIChpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsYXN0X2VuZCBcXHUwMDNlIHN0YXJ0KVxcbiA0NTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1NjpcXHRcXHRcXHRsYXN0X2VuZCA9IGVuZDtcXG4gNDU3OlxcdFxcdH1cXG4gNDU4OlxcdFxcbiA0NTk6XFx0XFx0LyogUmVtb3ZlIHJlZ2lvbnMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgbmV3IHJhbmdlcyAqL1xcbiA0NjA6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUociwgbmV4dCwgdCkge1xcbiA0NjE6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxuIDQ2MjpcXHRcXHRcXHRcXHRpZiAoZGFtb25faW50ZXJzZWN0KHIsIFxcdTAwMjZyYW5nZXNbaV0pKVxcbiA0NjM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NDpcXHRcXHRcXHR9XFxuIDQ2NTpcXHRcXHRcXHRpZiAoaSA9PSBucl9yYW5nZXMpXFxuIDQ2NjpcXHRcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcXG4gNDY3OlxcdFxcdH1cXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0aWYgKCFkYW1vbl9ucl9yZWdpb25zKHQpKSB7XFxuIDQ3MDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4gNDcxOlxcdFxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxcbiA0NzI6XFx0XFx0XFx0XFx0XFx0XFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXFxuIDQ3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtaW5fcmVnaW9uX3N6KSxcXG4gNDc0OlxcdFxcdFxcdFxcdFxcdFxcdEFMSUdOKHJhbmdlc1tpXS5lbmQsIG1pbl9yZWdpb25fc3opKTtcXG4gNDc1OlxcdFxcdFxcdFxcdGlmICghcilcXG4gNDc2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0Nzc6XFx0XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4gNDc4OlxcdFxcdFxcdH1cXG4gNDc5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0ODA6XFx0XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRyID0gZGFtb25fZmlyc3RfcmVnaW9uKHQpO1xcbiA0ODM6XFx0XFx0LyogQWRkIG5ldyByZWdpb25zIG9yIHJlc2l6ZSBleGlzdGluZyByZWdpb25zIHRvIGZpdCBpbiB0aGUgcmFuZ2VzICovXFxuIDQ4NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4gNDg1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0ID0gTlVMTCwgKmxhc3QsICpuZXdyO1xcbiA0ODY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlO1xcbiA0ODc6XFx0XFx0XFx0Ym9vbCBpbnNlcnRfYmVmb3JlX3IgPSBmYWxzZTtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0XFx0cmFuZ2UgPSBcXHUwMDI2cmFuZ2VzW2ldO1xcbiA0OTA6XFx0XFx0XFx0LyogR2V0IHRoZSBmaXJzdC9sYXN0IHJlZ2lvbnMgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHJhbmdlICovXFxuIDQ5MTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XFxuIDQ5MjpcXHRcXHRcXHRcXHRpZiAoZGFtb25faW50ZXJzZWN0KHIsIHJhbmdlKSkge1xcbiA0OTM6XFx0XFx0XFx0XFx0XFx0aWYgKCFmaXJzdClcXG4gNDk0OlxcdFxcdFxcdFxcdFxcdFxcdGZpcnN0ID0gcjtcXG4gNDk1OlxcdFxcdFxcdFxcdFxcdGxhc3QgPSByO1xcbiA0OTY6XFx0XFx0XFx0XFx0fVxcbiA0OTc6XFx0XFx0XFx0XFx0aWYgKHItXFx1MDAzZWFyLnN0YXJ0IFxcdTAwM2U9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdGluc2VydF9iZWZvcmVfciA9IHRydWU7XFxuIDQ5OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTAwOlxcdFxcdFxcdFxcdH1cXG4gNTAxOlxcdFxcdFxcdH1cXG4gNTAyOlxcdFxcdFxcdGlmICghZmlyc3QpIHtcXG4gNTAzOlxcdFxcdFxcdFxcdC8qIG5vIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhpcyByYW5nZSAqL1xcbiA1MDQ6XFx0XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oXFxuIDUwNTpcXHRcXHRcXHRcXHRcXHRcXHRBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VzdGFydCxcXG4gNTA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1pbl9yZWdpb25fc3opLFxcbiA1MDc6XFx0XFx0XFx0XFx0XFx0XFx0QUxJR04ocmFuZ2UtXFx1MDAzZWVuZCwgbWluX3JlZ2lvbl9zeikpO1xcbiA1MDg6XFx0XFx0XFx0XFx0aWYgKCFuZXdyKVxcbiA1MDk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDUxMDpcXHRcXHRcXHRcXHRpZiAoaW5zZXJ0X2JlZm9yZV9yKVxcbiA1MTE6XFx0XFx0XFx0XFx0XFx0ZGFtb25faW5zZXJ0X3JlZ2lvbihuZXdyLCBkYW1vbl9wcmV2X3JlZ2lvbihyKSxcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHIsIHQpO1xcbiA1MTM6XFx0XFx0XFx0XFx0ZWxzZVxcbiA1MTQ6XFx0XFx0XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihuZXdyLCB0KTtcXG4gNTE1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDUxNjpcXHRcXHRcXHRcXHQvKiByZXNpemUgaW50ZXJzZWN0aW5nIHJlZ2lvbnMgdG8gZml0IGluIHRoaXMgcmFuZ2UgKi9cXG4gNTE3OlxcdFxcdFxcdFxcdGZpcnN0LVxcdTAwM2Vhci5zdGFydCA9IEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZXN0YXJ0LFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0XFx0bWluX3JlZ2lvbl9zeik7XFxuIDUxOTpcXHRcXHRcXHRcXHRsYXN0LVxcdTAwM2Vhci5lbmQgPSBBTElHTihyYW5nZS1cXHUwMDNlZW5kLCBtaW5fcmVnaW9uX3N6KTtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0XFx0XFx0LyogZmlsbCBwb3NzaWJsZSBob2xlcyBpbiB0aGUgcmFuZ2UgKi9cXG4gNTIyOlxcdFxcdFxcdFxcdGVyciA9IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhmaXJzdCwgbGFzdCwgdCk7XFxuIDUyMzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbiA1MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTI1OlxcdFxcdFxcdH1cXG4gNTI2OlxcdFxcdH1cXG4gNTI3OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyMzo0Ni44NTk2MDU1MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4MDY2MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBgZGFtb25fc2V0X3JlZ2lvbnNgIGhhcyBiZWVuIHVwZGF0ZWQuXCIgSSBzZWUgdGhlIGNydWNpYWwgbG9vcDpcblxuYGBgY1xuXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XG5cdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG5cblx0XHRcdHN0YXJ0ID0gQUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuXHRcdFx0ZW5kID0gQUxJR04ocmFuZ2VzW2ldLmVuZCwgbWluX3JlZ2lvbl9zeik7XG5cdFx0XHRpZiAoc3RhcnQgXHUwMDNlPSBlbmQpXG5cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdFx0aWYgKGkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxhc3RfZW5kIFx1MDAzZSBzdGFydClcblx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdFx0XHRsYXN0X2VuZCA9IGVuZDtcblx0XHR9XG5gYGBcblxuSXQncyBjbGVhciBub3cgdGhhdCB0aGUgY29kZSAqZXhwbGljaXRseSogdmFsaWRhdGVzIHRoYXQgdGhlIHN0YXJ0IGlzICpub3QqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZW5kLCBlbnN1cmluZyBhIHZhbGlkIHJlZ2lvbi4gVGhhdCdzIGdvb2QsIGVmZmljaWVudC4gSXQgbWFrZXMgc2Vuc2Ugd2h5IHRoZXkgcmVtb3ZlZCB0aGUgcmVkdW5kYW50IGNoZWNrcyAoYGlmICgqc3RhcnQgXHUwMDNlICplbmQpYCBpbiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBhbmQgYHN5c19yZWdpb24tXHUwMDNlYXIuc3RhcnQgXHUwMDNlIHN5c19yZWdpb24tXHUwMDNlYXIuZW5kYCBpbiBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgKSDigJMgYGRhbW9uX3NldF9yZWdpb25zYCBpcyBoYW5kbGluZyB0aGUgdmFsaWRhdGlvbiwgbWFraW5nIHRoZSBvdGhlciBjaGVja3MgdW5uZWNlc3NhcnkuIENsZWFuZXIgY29kZSBpcyBhbHdheXMgd2VsY29tZS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgZGFtb25fY29tbWl0X2N0eGAuIEl0J3Mgbm93IHRlc3RpbmcgZm9yIGNoYW5nZXMgKmJlZm9yZSogY29tbWl0dGluZyB0aGVtLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbiBpbiB0aGUgREFNT04gYXJjaGl0ZWN0dXJlLiBHb29kIG9uIHRoZW0gZm9yIHRoYXQuIFNpbWlsYXJseSwgYGRhbW9uX3N0YXJ0YCBpcyBub3cgZG9pbmcgdGhlIHNhbWUgdGhpbmc6IHRlc3RpbmcgZm9yIGNoYW5nZXMgYmVmb3JlIHN0YXJ0aW5nLiBUaGF0J3MgYWxzbyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQuXG5cbk5vdywgSSdtIHRoaW5raW5nLCBcIk9rYXksIGdpdmVuIHRoZXNlIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgREFNT04/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgc2V0dGluZyB1cCB0aGUgc3lzdGVtIGZvciBEQU1PTi5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjU0Ljc0MDI3MDIyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NTgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyMzo1NC44MDE5MzMyNjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTY5ODc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgU2NvcGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuIEkgc2VlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuIFRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHF1aXRlIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBmaWxlcyBhZmZlY3RlZCwgSSdtIGdvaW5nIHRvIG5lZWQgdG8gY29uc2lkZXIgYERBTU9OYCwgYERBTU9OX0xSVV9TT1JUYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX1NZU0ZTYCBvcHRpb25zLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYG1tL2RhbW9uL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjU4LjQzMTYzNTE2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NTguNDMxNzAzOTE5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTc4NzMwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEZWR1Y2luZyBCdWlsZCBSZWxhdGlvbnNoaXBzIGluIGEgS2VybmVsIE1vZHVsZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgREFNT05gIGhlcmUuLi4gaXQgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRpcmVjdGx5IHByb2R1Y2VzIGBjb3JlLm9gLiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgYSBkaXJlY3QgbGluaywgYnV0IHRoYXQncyBub3Qgd2hhdCBJJ20gc2VlaW5nLlxuXG5Ib2xkIG9uLCBsZXQgbWUgdHJhY2UgdGhpcy4uLiB3aGVyZSBkb2VzIGBEQU1PTmAgZ2V0IGJyb3VnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcz8gQWggaGEhIEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gQW5kIHRoYXQgYE1ha2VmaWxlYCBpcyBpbmNsdWRlZCBmcm9tIGBtbS9NYWtlZmlsZWAuLi4gdGhhdCdzIHRoZSBjb25uZWN0aW9uISBTbyBpdCdzIGJlaW5nIGluY29ycG9yYXRlZCBoaWdoZXIgdXAgdGhlIGJ1aWxkIGhpZXJhcmNoeS4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluY2x1c2lvbiBpbiBgbW0vTWFrZWZpbGVgIHdvcmtzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGBEQU1PTmAgaW5mbHVlbmNlcyB0aGUgY3JlYXRpb24gb2YgYGNvcmUub2AsIGFuZCBvdGhlciByZWxhdGVkIG9iamVjdHMuIE5vdyBJIGhhdmUgYSBzdGFydGluZyBwb2ludCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjQ6MDEuOTg5NTc5NTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc3Nzc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzQ9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM1Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM2LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyNDowMi4wNDYzNjcwOTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4MjYzODc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBLZXkgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgcGF0Y2ggcmVsYXRlZCB0byBEQU1PTi4gSXQncyBjbGVhciB0aGF0IGVuYWJsaW5nIGBDT05GSUdfREFNT05gIHdpbGwgYnJpbmcgaW4gdGhlIGVudGlyZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuICBBbmQsIGlmIEkgZW5hYmxlIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBhbmQgYENPTkZJR19EQU1PTl9MUlVfU09SVGAsIEknbSBnb2luZyB0byBnZXQgYHN5c2ZzLm9gLCBgcmVjbGFpbS5vYCwgYW5kIGBscnVfc29ydC5vYCBidWlsdCwgcmVzcGVjdGl2ZWx5LiAgVGhlcmVmb3JlLCB0byBnZXQgdGhlIGZ1bGwgREFNT04gc3VpdGUsIEkgZGVmaW5pdGVseSBuZWVkIHRvIHNldCBhbGwgb2YgdGhvc2UgLSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgIHRvICd5Jy5cblxuTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nPyAgTGV0J3Mgc2Vl4oCmIEknbSBub3RpY2luZyBtb2RpZmljYXRpb25zIHRvIGBkYW1vbl9jb21taXRfY3R4YCwgYF9fZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9uZXdfdGVzdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCwgYW5kIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLlxuXG5Db25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyB0byBmb2N1cyBvbiBoZXJlIGFyZSBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGguXG5cbkkgd2FudCB0byBjaGVjayBob3cgdGhvc2UgYHN5c2ZzYCBmdW5jdGlvbnMgd29yaywgc2luY2UgdGhleSBhcmUgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgdGhlIERBTU9OIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpcyBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCByZWFjaGFibGU/IFllcywgaXQncyBhIHN5c2ZzIGNhbGxiYWNrLiBBbmQgdGhlIHNhbWUgZm9yIGBkYW1vbl9zeXNmc19zZXRfcmVnaW9uc2AgLSBhbm90aGVyIHN5c2ZzIGNhbGxiYWNrLiBBbmQgdGhvc2UgYXBwbHkgcGFyYW1ldGVycyBmdW5jdGlvbnMgZm9yIGxydSBhbmQgcmVjbGFpbSBhcmUgcHJvYmFibHkgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFja3Mgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIEkgd2lsbCBsb29rIGF0IHRvby5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjQ6MDkuMTI5MDA5MTM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgwMzA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3MC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3Mi17XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQzLXtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0NDpcXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ1LX1cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MTQtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTU6XFx0ZXJyID0gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjI0OjA5LjE4NTgxNzQ0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg5NjkzNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTiBQYXJhbWV0ZXIgQXBwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgREFNT04gcGFyYW1ldGVycyBhcmUgYXBwbGllZC4gSSBzZWUgdGhhdCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgZ2V0cyBjYWxsZWQgdGhyb3VnaCB0aGUgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIGFuZCB0aGUgYGRhbW9uX2xydV9zb3J0X3R1cm5gIGZ1bmN0aW9ucy4gVGhhdCdzIGdvb2QgdG8ga25vdywgaXQgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRoLiBTaW1pbGFyIHByb2Nlc3NlcyBtdXN0IGV4aXN0IGZvciBvdGhlciBjb21wb25lbnRzLCBmb3IgZXhhbXBsZSBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC5cblxuSSB3YW50IHRvIHNlZSAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBjb21taXR0ZWQuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBmdW5jdGlvbiwgYXMgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIGZvciB0aGUgZmluYWwgcGFyYW1ldGVyIGFwcGxpY2F0aW9uIHRvIG9jY3VyLiBJJ2xsIHN0YXJ0IHdpdGggdGhhdCBvbmUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjI0OjE0LjM3NTUxMzk1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3NjEwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfY29tbWl0X2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMDk1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTgtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIwOTk6ICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxubW0vZGFtb24vc3lzZnMuYy0yMTAwLSAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDMtICovXFxubW0vZGFtb24vc3lzZnMuYzoyMTA0OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxubW0vZGFtb24vc3lzZnMuYy0yMTA1LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjMzNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzQ4LVxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM0OTpcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM1MC1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjQ6MTQuNDMzMjgyNTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMzAzMTYyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmU7IGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBgc3lzZnNgIGNvbW1hbmRzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuIEZ1bmN0aW9uYWxseSwgaXQgbG9va3Mgc29saWQuIFRoZSBhZGRpdGlvbiBvZiBhIHRlc3QgY29udGV4dCBjcmVhdGlvbiBiZWZvcmUgY29tbWl0dGluZyBwYXJhbWV0ZXJzIGlzIGEgc21hcnQgbW92ZS4gVGhpcyBwcm9hY3RpdmUgdmFsaWRhdGlvbiBzaG91bGQgcHJldmVudCB0aG9zZSBuYXN0eSBwYXJ0aWFsIHVwZGF0ZXMgb3IgaW52YWxpZCBzdGF0ZXMgdGhhdCBjYW4gYmUgc3VjaCBhIGhlYWRhY2hlLlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBkZWVwZXIgYW5hbHlzaXMgYW5kIHRlc3RpbmcuIEknbGwgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCwgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIFRoZXNlIGFyZSBvYnZpb3VzbHkgdGhlIGNvcmUgZWxlbWVudHMuXG5cbkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIHRoZSBleHBlY3RlZCBvbmVzOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBIb3dldmVyLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIHJlbGV2YW50LiBUaGlua2luZyB0aHJvdWdoIGhvdyB0aGlzIG1pZ2h0IHdvcmssIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgcHJvYmFibHkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHkgdG8gaGF2ZSBhbiBlZmZlY3QuIFdoaWxlIHRoZSBjb3JlIGxvZ2ljIGlzIGluIGBEQU1PTmAsIHRob3NlIHR3byBjb25maWdzIGFyZSBmdW5kYW1lbnRhbCB0byBkb2luZywgd2VsbCwgYW55dGhpbmcuIEknbGwgaW5jbHVkZSBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIGluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGludm9sdmUgdGhlIGNvcmUgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MzIsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjI0OjIwLjY2MzYwMTIwOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDc4NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc3lzZnNfY29tbWl0X2lucHV0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcmVnaW9uc1wiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc1wiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gY29udGV4dCBjb21taXQgbG9naWMgdG8gdXNlIGEgdGVzdCBjb250ZXh0IHRvIHZhbGlkYXRlIGNoYW5nZXMgYmVmb3JlIGFwcGx5aW5nIHRoZW0uIEl0IGFsc28gcmVtb3ZlcyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gdmFyaW91cyBjYWxsZXJzIGFuZCByZWxpZXMgb24gdGhlIGNvcmUgdmFsaWRhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NldF9yZWdpb25zXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBjb250ZXh0IGNvbW1pdCBsb2dpYyB0byB1c2UgYSB0ZXN0IGNvbnRleHQgdG8gdmFsaWRhdGUgY2hhbmdlcyBiZWZvcmUgYXBwbHlpbmcgdGhlbS4gSXQgYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSB2YXJpb3VzIGNhbGxlcnMgYW5kIHJlbGllcyBvbiB0aGUgY29yZSB2YWxpZGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowdsjk8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-05 16:10:20 +0000 UTC FinishedAt: 2026-07-05 16:24: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": "4494b1f25c06ac74bb46166f19bb13ec21d08bbd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_VADDR", "DAMON_PADDR" ], "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": "4494b1f25c06ac74bb46166f19bb13ec21d08bbd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "ba8ee1e1-e4e9-4169-88e3-73372068e035" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_commit_ctx", "damon_start", "damon_sysfs_commit_input", "damon_sysfs_set_regions", "damon_lru_sort_apply_parameters", "damon_reclaim_apply_parameters" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBjb250ZXh0IGNvbW1pdCBsb2dpYyB0byB1c2UgYSB0ZXN0IGNvbnRleHQgdG8gdmFsaWRhdGUgY2hhbmdlcyBiZWZvcmUgYXBwbHlpbmcgdGhlbS4gSXQgYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSB2YXJpb3VzIGNhbGxlcnMgYW5kIHJlbGllcyBvbiB0aGUgY29yZSB2YWxpZGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYjVhNGQ4NDI0YjMzM2RjM2JlMDE5ZDMwMzk5NzRkZmExOWZkMmEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxNjoyMzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDYxNmJkZjA5NTRiNTJhLi4yNjYxMjMxYzBhZTgyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtNDksNyAmIzQzOzQ5LDggQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBhZ2U6XHRcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cbiAgKlxuLSAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS5cbiYjNDM7ICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxuJiM0MzsgKiBkb2VzIHRoZSB2YWxpZGF0aW9uLlxuICAqXG4gICogQG5yX2FjY2Vzc2VzIGlzIHJlc2V0IHRvIHplcm8gZm9yIGV2ZXJ5IFx1MDAyNmRhbW9uX2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwgYW5kIGJlXG4gICogaW5jcmVhc2VkIGZvciBldmVyeSBcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgaWYgYW4gYWNjZXNzIHRvIHRoZSByZWdpb25cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDg3MWM2ZjUyNTdjOWU0Li4zYzVhNDZlMWMwNzlhMyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTY2NCwyMCAmIzQzOzE2NjQsNyBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyoqXG4tICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG4tICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cbi0gKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZnJvbSBAc3JjIHRvIEBkc3QgYW5kIHVwZGF0ZVxuLSAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb25cbi0gKiBmb3IgY29udGV4dC1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nIGNvbnRleHQsIGluc3RlYWQgb2YgbWFudWFsXG4tICogaW4tcGxhY2UgdXBkYXRlcy5cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxuLSAqIGRhbW9uX2NhbGwoKS5cbi0gKi9cbi1pbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiYjNDM7c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuQEAgLTE3MzIsNiAmIzQzOzE3MTksNTIgQEAgaW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4mIzQzO1x0aWYgKCF0ZXN0X2N0eClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRlc3RfY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG4mIzQzOyAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9OIGNvbnRleHQuXG4mIzQzOyAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcbiYjNDM7ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuJiM0MzsgKiBmb3IgY29udGV4dC1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nIGNvbnRleHQsIGluc3RlYWQgb2YgbWFudWFsXG4mIzQzOyAqIGluLXBsYWNlIHVwZGF0ZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxuJiM0MzsgKiBkYW1vbl9jYWxsKCkuXG4mIzQzOyAqL1xuJiM0MztpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XG4mIzQzO1x0aWYgKCF0ZXN0X2N0eClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcbiYjNDM7b3V0OlxuJiM0MztcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGRhbW9uX25yX3J1bm5pbmdfY3R4cygpIC0gUmV0dXJuIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0cy5cbiAgKi9cbkBAIC0xODMyLDYgJiM0MzsxODY1LDggQEAgc3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4mIzQzO1xuIC8qKlxuICAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLlxuICAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG5AQCAtMTg1Myw4ICYjNDM7MTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFpc19wb3dlcl9vZl8yKGN0eHNbaV0tXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbiYjNDM7XG4mIzQzO1x0XHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcbiYjNDM7XHRcdGlmICghdGVzdF9jdHgpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgY3R4c1tpXSk7XG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9sb2NrKTtcbkBAIC0zODAzLDkgJiM0MzszODQ2LDYgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIHtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4gXG4tXHRpZiAoKnN0YXJ0IFx1MDAzZSAqZW5kKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdGlmICghKnN0YXJ0IFx1MDAyNlx1MDAyNiAhKmVuZCBcdTAwMjZcdTAwMjZcbiBcdFx0IWRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2Uoc3RhcnQsIGVuZCwgYWRkcl91bml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbmluZGV4IDMyZjQxNDkxYjcyNmIyLi4yZGQwY2QwZDI2MjczMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0yODQsMTEgJiM0MzsyODQsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbiBcdHBhcmFtX2N0eC1cdTAwM2VhZGRyX3VuaXQgPSBhZGRyX3VuaXQ7XG4gXHRwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcbiBcbi1cdGlmICghaXNfcG93ZXJfb2ZfMihwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRpZiAoIWRhbW9uX2xydV9zb3J0X21vbl9hdHRycy5zYW1wbGVfaW50ZXJ2YWwpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5pbmRleCAxMWI3MGQwYTlhNmYwYS4uNjQ2OWIyNWNjMzRmOTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuQEAgLTIwOCwxMSAmIzQzOzIwOCw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gXG4tXHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTk4Nyw5ICYjNDM7MTk4Nyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiAqc3lzX3JlZ2lvbiA9XG4gXHRcdFx0c3lzZnNfcmVnaW9ucy1cdTAwM2VyZWdpb25zX2FycltpXTtcbiBcbi1cdFx0aWYgKHN5c19yZWdpb24tXHUwMDNlYXIuc3RhcnQgXHUwMDNlIHN5c19yZWdpb24tXHUwMDNlYXIuZW5kKVxuLVx0XHRcdGdvdG8gb3V0O1xuLVxuIFx0XHRyYW5nZXNbaV0uc3RhcnQgPSBzeXNfcmVnaW9uLVx1MDAzZWFyLnN0YXJ0O1xuIFx0XHRyYW5nZXNbaV0uZW5kID0gc3lzX3JlZ2lvbi1cdTAwM2Vhci5lbmQ7XG4gXHRcdGlmIChpID09IDApXG5AQCAtMjA5OCwyNiAmIzQzOzIwOTUsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbiBcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpO1xuIFxuLS8qXG4tICogUmV0dXJuIGEgbmV3IGRhbW9uX2N0eCBmb3IgdGVzdGluZyBuZXcgcGFyYW1ldGVycyB0byBjb21taXQuXG4tICovXG4tc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcbi1cdFx0c3RydWN0IGRhbW9uX2N0eCAqcnVubmluZ19jdHgpXG4te1xuLVx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XG4tXHRpbnQgZXJyO1xuLVxuLVx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4tXHRpZiAoIXRlc3RfY3R4KVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHJ1bm5pbmdfY3R4KTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cdHJldHVybiB0ZXN0X2N0eDtcbi19XG4tXG4gLypcbiAgKiBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQoKSAtIENvbW1pdCB1c2VyIGlucHV0cyB0byBhIHJ1bm5pbmcga2RhbW9uZC5cbiAgKiBAa2RhbW9uZDpcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXG5AQCAtMjEyNyw3ICYjNDM7MjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4tXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXG5AQCAtMjEzOSwxNyAmIzQzOzIxMTYsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKVxuIFx0cGFyYW1fY3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbiBcdGlmIChJU19FUlIocGFyYW1fY3R4KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGFyYW1fY3R4KTtcbi1cdHRlc3RfY3R4ID0gZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbi1cdGlmICghdGVzdF9jdHgpIHtcbi1cdFx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBwYXJhbV9jdHgpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4gXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4LCBwYXJhbV9jdHgpO1xuLW91dDpcbi1cdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbiBcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19jb21taXRfaW5wdXQmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gY29udGV4dCBjb21taXQgbG9naWMgdG8gdXNlIGEgdGVzdCBjb250ZXh0IHRvIHZhbGlkYXRlIGNoYW5nZXMgYmVmb3JlIGFwcGx5aW5nIHRoZW0uIEl0IGFsc28gcmVtb3ZlcyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gdmFyaW91cyBjYWxsZXJzIGFuZCByZWxpZXMgb24gdGhlIGNvcmUgdmFsaWRhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYjVhNGQ4NDI0YjMzM2RjM2JlMDE5ZDMwMzk5NzRkZmExOWZkMmEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgNSAxNjoyMzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaAppbmRleCA2MTZiZGYwOTU0YjUyYS4uMjY2MTIzMWMwYWU4MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTQ5LDcgJiM0Mzs0OSw4IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHsKICAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqIEBhZ2U6CQlBZ2Ugb2YgdGhpcyByZWdpb24uCiAgKgotICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLgomIzQzOyAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKCkKJiM0MzsgKiBkb2VzIHRoZSB2YWxpZGF0aW9uLgogICoKICAqIEBucl9hY2Nlc3NlcyBpcyByZXNldCB0byB6ZXJvIGZvciBldmVyeSAmYW1wO2RhbW9uX2F0dHJzLSZndDthZ2dyX2ludGVydmFsIGFuZCBiZQogICogaW5jcmVhc2VkIGZvciBldmVyeSAmYW1wO2RhbW9uX2F0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwgaWYgYW4gYWNjZXNzIHRvIHRoZSByZWdpb24KZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA4NzFjNmY1MjU3YzllNC4uM2M1YTQ2ZTFjMDc5YTMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTE2NjQsMjAgJiM0MzsxNjY0LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogCXJldHVybiAwOwogfQogCi0vKioKLSAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLgotICogQGRzdDoJVGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LgotICogQHNyYzoJVGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGUKLSAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24KLSAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWwKLSAqIGluLXBsYWNlIHVwZGF0ZXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlCi0gKiBkYW1vbl9jYWxsKCkuCi0gKi8KLWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQomIzQzO3N0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogewogCWludCBlcnI7CiAJc3RydWN0IGRhbW9zICpzY2hlbWU7CkBAIC0xNzMyLDYgJiM0MzsxNzE5LDUyIEBAIGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJdGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghdGVzdF9jdHgpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdGVzdF9jdHg7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLgomIzQzOyAqIEBkc3Q6CVRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC4KJiM0MzsgKiBAc3JjOglUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlCiYjNDM7ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbgomIzQzOyAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWwKJiM0MzsgKiBpbi1wbGFjZSB1cGRhdGVzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlCiYjNDM7ICogZGFtb25fY2FsbCgpLgomIzQzOyAqLwomIzQzO2ludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7CiYjNDM7CWlmICghdGVzdF9jdHgpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWVyciA9IF9fZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyk7CiYjNDM7b3V0OgomIzQzOwlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBkYW1vbl9ucl9ydW5uaW5nX2N0eHMoKSAtIFJldHVybiBudW1iZXIgb2YgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dHMuCiAgKi8KQEAgLTE4MzIsNiAmIzQzOzE4NjUsOCBAQCBzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7CiYjNDM7CiAvKioKICAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLgogICogQGN0eHM6CWFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZwpAQCAtMTg1Myw4ICYjNDM7MTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSkKIAlpbnQgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9jdHhzOyBpJiM0MzsmIzQzOykgewotCQlpZiAoIWlzX3Bvd2VyX29mXzIoY3R4c1tpXS0mZ3Q7bWluX3JlZ2lvbl9zeikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4OwomIzQzOwomIzQzOwkJdGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CQlpZiAoIXRlc3RfY3R4KQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBjdHhzW2ldKTsKJiM0MzsJCWRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAl9CiAKIAltdXRleF9sb2NrKCZhbXA7ZGFtb25fbG9jayk7CkBAIC0zODAzLDkgJiM0MzszODQ2LDYgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogewogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7CiAKLQlpZiAoKnN0YXJ0ICZndDsgKmVuZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoISpzdGFydCAmYW1wOyZhbXA7ICEqZW5kICZhbXA7JmFtcDsKIAkJIWRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2Uoc3RhcnQsIGVuZCwgYWRkcl91bml0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCAzMmY0MTQ5MWI3MjZiMi4uMmRkMGNkMGQyNjI3MzEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMjg0LDExICYjNDM7Mjg0LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpCiAJcGFyYW1fY3R4LSZndDthZGRyX3VuaXQgPSBhZGRyX3VuaXQ7CiAJcGFyYW1fY3R4LSZndDttaW5fcmVnaW9uX3N6ID0gbWF4KERBTU9OX01JTl9SRUdJT05fU1ogLyBhZGRyX3VuaXQsIDEpOwogCi0JaWYgKCFpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC0mZ3Q7bWluX3JlZ2lvbl9zeikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKCFkYW1vbl9scnVfc29ydF9tb25fYXR0cnMuc2FtcGxlX2ludGVydmFsKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jCmluZGV4IDExYjcwZDBhOWE2ZjBhLi42NDY5YjI1Y2MzNGY5MiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uYwpAQCAtMjA4LDExICYjNDM7MjA4LDYgQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZCkKIAlwYXJhbV9jdHgtJmd0O2FkZHJfdW5pdCA9IGFkZHJfdW5pdDsKIAlwYXJhbV9jdHgtJmd0O21pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7CiAKLQlpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LSZndDttaW5fcmVnaW9uX3N6KSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoIWRhbW9uX3JlY2xhaW1fbW9uX2F0dHJzLmFnZ3JfaW50ZXJ2YWwpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMTk4Nyw5ICYjNDM7MTk4Nyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiAqc3lzX3JlZ2lvbiA9CiAJCQlzeXNmc19yZWdpb25zLSZndDtyZWdpb25zX2FycltpXTsKIAotCQlpZiAoc3lzX3JlZ2lvbi0mZ3Q7YXIuc3RhcnQgJmd0OyBzeXNfcmVnaW9uLSZndDthci5lbmQpCi0JCQlnb3RvIG91dDsKLQogCQlyYW5nZXNbaV0uc3RhcnQgPSBzeXNfcmVnaW9uLSZndDthci5zdGFydDsKIAkJcmFuZ2VzW2ldLmVuZCA9IHN5c19yZWdpb24tJmd0O2FyLmVuZDsKIAkJaWYgKGkgPT0gMCkKQEAgLTIwOTgsMjYgJiM0MzsyMDk1LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eCgKIAkJc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpOwogCi0vKgotICogUmV0dXJuIGEgbmV3IGRhbW9uX2N0eCBmb3IgdGVzdGluZyBuZXcgcGFyYW1ldGVycyB0byBjb21taXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoCi0JCXN0cnVjdCBkYW1vbl9jdHggKnJ1bm5pbmdfY3R4KQotewotCXN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4OwotCWludCBlcnI7Ci0KLQl0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTsKLQlpZiAoIXRlc3RfY3R4KQotCQlyZXR1cm4gTlVMTDsKLQllcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBydW5uaW5nX2N0eCk7Ci0JaWYgKGVycikgewotCQlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gdGVzdF9jdHg7Ci19Ci0KIC8qCiAgKiBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQoKSAtIENvbW1pdCB1c2VyIGlucHV0cyB0byBhIHJ1bm5pbmcga2RhbW9uZC4KICAqIEBrZGFtb25kOglUaGUga29iamVjdCB3cmFwcGVyIGZvciB0aGUgYXNzb2NpYXRlZCBrZGFtb25kLgpAQCAtMjEyNyw3ICYjNDM7MjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoCiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gZGF0YTsKLQlzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDsKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4OwogCWludCBlcnI7CiAKIAlpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSkKQEAgLTIxMzksMTcgJiM0MzsyMTE2LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSkKIAlwYXJhbV9jdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC0mZ3Q7Y29udGV4dHMtJmd0O2NvbnRleHRzX2FyclswXSk7CiAJaWYgKElTX0VSUihwYXJhbV9jdHgpKQogCQlyZXR1cm4gUFRSX0VSUihwYXJhbV9jdHgpOwotCXRlc3RfY3R4ID0gZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KGtkYW1vbmQtJmd0O2RhbW9uX2N0eCk7Ci0JaWYgKCF0ZXN0X2N0eCkgewotCQlkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKIAllcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtJmd0O2RhbW9uX2N0eCwgcGFyYW1fY3R4KTsKLW91dDoKLQlkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7CiAJZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFJlZmFjdG9yaW5nOiBBIERlZXBlciBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXMg4oCTIGBjb3JlLmNgLCBgbHJ1X3NvcnQuY2AsIGByZWNsYWltLmNgLCBgc3lzZnMuY2AsIGFuZCBgZGFtb24uaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIGhvdyBgZGFtb25fY29tbWl0X2N0eGAgd29ya3MuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRhbW9uX25ld190ZXN0X2N0eGAgYW5kIGBfX2RhbW9uX2NvbW1pdF9jdHhgIGluIGBjb3JlLmNgIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgbW92aW5nIHNvbWUgc3R1ZmYgYXJvdW5kIHRvIHNlcGFyYXRlIGNvbmNlcm5zLCBwcm9iYWJseSBmb3IgZXJyb3IgaGFuZGxpbmcuCgpCdXQgdGhlbiBJIHNlZSB0aGUgcGF0Y2ggYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSBhIGZldyBvZiB0aGUgYXBwbHkgcGFyYW1ldGVyIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBmbGFnIC0gd2hlcmUmIzM5O3MgdGhhdCBsb2dpYyBnb2luZz8gSXQmIzM5O3MgZ29uZSBmcm9tIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9zeXNmc19zZXRfcmVnaW9uc2AsIGFuZCBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YC4gU28sIHRoZSBxdWVzdGlvbiBpcywgZGlkIHRoZXkgcHV0IGl0IGluIGBfX2RhbW9uX2NvbW1pdF9jdHhgIG9yIGBkYW1vbl9zZXRfcmVnaW9uc2A/IExldCYjMzk7cyBjaGVjayB0aG9zZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGBkYW1vbl9jb21taXRfY3R4YCB0byBmaXJzdCBleGVjdXRlIGEgJiMzNDtkcnkgcnVuJiMzNDsgdXNpbmcgYGRhbW9uX25ld190ZXN0X2N0eGAgdG8gdmFsaWRhdGUgdGhlIGNvbW1pdCBiZWZvcmUgaXQgaGFwcGVucy4gU21hcnQuIFdlIHdhbnQgdG8gYXZvaWQgcGFydGlhbGx5IGFwcGxpZWQgY2hhbmdlcy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIHRoZSByZW1vdmVkIGBpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC0mZ3Q7bWluX3JlZ2lvbl9zeilgIGNoZWNrIGZyb20gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGV2ZW4gZnJvbSBgZGFtb25fc3RhcnRgIGlzIGdvbmUuIFNvLCB3aGVyZSBkaWQgaXQgZ28/IExldCYjMzk7cyBmaW5kIG91dCB3aGVyZSBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGxvY2F0ZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBpdC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBjaGFuZ2UgdG8gYW5hbHl6ZSwgc28gSSBzaG91bGQgYmUgc3VyZSB0byBkb3VibGUgY2hlY2sgYWxsIHRoZSBhZmZlY3RlZCBzcG90cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NDA2PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MjctLypcbm1tL2RhbW9uL2NvcmUuYzo0Mjg6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy00MjktICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTQzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Mzk6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDQwLVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTE0NDQ9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDczLVx0cmFuZ2VzW2kmIzQzOyYjNDM7XS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYzoxNDc0Olx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xNDc1LVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM4NDM9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODU0LVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjM4NTU6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtMzg1Ni19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xOTc1PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5OTYtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjE5OTc6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnIsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vc3lzZnMuYy0xOTk4LW91dDpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDQ1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY2LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQ2NzpcdGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ2OC1cbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwMy0vKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5O1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMDUtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTExOC0gKiByZWdpb25zLiAgVGhlIHVwZGF0ZSBvZiBjdXJyZW50IHRhcmdldCByZWdpb25zIGlzIHRoZSByb2xlIG9mXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjExOTogKiAmIzM5O2RhbW9uX3NldF9yZWdpb25zKCkmIzM5Oy5cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTIwLSAqXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0Ny1cdH1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTQ4Olx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmVnaW9ucyAvIDIsXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cdFx0XHRcdERBTU9OX01JTl9SRUdJT05fU1opKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXHRcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXCYjMzQ7KTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTUzLVx0fVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU1LVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWikpIHtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU3LVx0XHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTU4Olx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NlY29uZCBkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTktXHR9XG4tLVxubW0vZGFtb24vdmFkZHIuYz0xOTE9c3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjA3LVxubW0vZGFtb24vdmFkZHIuYzoyMDg6XHRkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjA5LX1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTIyNj1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vdmFkZHIuYzoyMzQ6XHRcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xubW0vZGFtb24vdmFkZHIuYy0yMzUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBDb250ZXh0IFZhbGlkYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGhvdyBEQU1PTiBoYW5kbGVzIHZhbGlkYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHNoaWZ0aW5nIGBkYW1vbl9jb21taXRfY3R4YCB0byB1c2UgYSB0ZXN0IGNvbnRleHQsIHdoaWNoIHNvdW5kcyBsaWtlIGEgc29saWQgYXBwcm9hY2ggZm9yIHZlcmlmeWluZyBjaGFuZ2VzIGJlZm9yZSB0aGV5JiMzOTtyZSBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLgoKTm93LCBJIHNlZSB0aGF0IHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGl0c2VsZiBpcyBiZWluZyByZW1vdmVkIGZyb20gYSBmZXcgb3RoZXIgZnVuY3Rpb25zOiBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogVGhlIHZhbGlkYXRpb24gaXMgbW92aW5nLiBTbyB3aGVyZSBleGFjdGx5IGlzIGl0IGdvaW5nPwoKSG1tLCB3YXMgdGhlIHZhbGlkYXRpb24gbG9naWMgbW92ZWQgdG8gYGRhbW9uX25ld190ZXN0X2N0eGAgb3IgYF9fZGFtb25fY29tbWl0X2N0eGA/IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2RhbW9uX2NvbW1pdF9jdHhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTYzNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE2NjYtXG5tbS9kYW1vbi9jb3JlLmM6MTY2NzpzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNjY4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTcyMj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyOS1cdFx0cmV0dXJuIE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MTczMDpcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcbm1tL2RhbW9uL2NvcmUuYy0xNzMxLVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUxPWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzU4LVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNzU5Olx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE3NjAtXHRpZiAoZXJyKVxubW0vZGFtb24vY29yZS5jLTE3NjEtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vY29yZS5jOjE3NjI6XHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE3NjMtb3V0OlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODQ2PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NjctXG5tbS9kYW1vbi9jb3JlLmM6MTg2ODpzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTg2OS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg4NT1pbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg5Ni1cbm1tL2RhbW9uL2NvcmUuYzoxODk3Olx0XHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTE4OTgtXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgdGhlIFZhbGlkYXRpb24qKgoKQWxyaWdodCwgaG9sZCBvbi4gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHRyYWNlIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MgZm9yIGBpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC0mZ3Q7bWluX3JlZ2lvbl9zeilgLiBXaGVyZSBkaWQgdGhhdCBsb2dpYyBlbmQgdXA/IEkgcmVtZW1iZXIgc2VlaW5nIGl0IHNvbWV3aGVyZS4gTGV0IG1lIGp1bXAgaW50byB0aGUgYF9fZGFtb25fY29tbWl0X2N0eGAgaW1wbGVtZW50YXRpb247IEkgdGhpbmsgdGhhdCYjMzk7cyB0aGUgcGxhY2UgaXQgd291bGQgYmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNoZWNrIGlzIGluIHBsYWNlLCBhbmQgd2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjY3Olx0c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4xNjY4Olx0e1xuMTY2OTpcdFx0aW50IGVycjtcbjE2NzA6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMTY3MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4xNjcyOlx0XG4xNjczOlx0XHRkc3QtXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gdHJ1ZTtcbjE2NzQ6XHRcdGlmICghaXNfcG93ZXJfb2ZfMihzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4xNjc1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY3NjpcdFxuMTY3NzpcdFx0Lyogbm9kZV9lbGlnaWJsZV9tZW1fYnAgbWV0cmljIHJlcXVpcmVzIFBBRERSIG9wcyAqL1xuMTY3ODpcdFx0aWYgKHNyYy1cdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKSB7XG4xNjc5Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xuMTY4MDpcdFx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGE7XG4xNjgxOlx0XG4xNjgyOlx0XHRcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xuMTY4MzpcdFx0XHRcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09XG4xNjg0Olx0XHRcdFx0XHRcdFx0REFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlApXG4xNjg1Olx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY4NjpcdFx0XHRcdH1cbjE2ODc6XHRcdFx0fVxuMTY4ODpcdFx0fVxuMTY4OTpcdFxuMTY5MDpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3NjaGVtZXMoZHN0LCBzcmMpO1xuMTY5MTpcdFx0aWYgKGVycilcbjE2OTI6XHRcdFx0cmV0dXJuIGVycjtcbjE2OTM6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcbjE2OTQ6XHRcdGlmIChlcnIpXG4xNjk1Olx0XHRcdHJldHVybiBlcnI7XG4xNjk2Olx0XHQvKlxuMTY5NzpcdFx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2VcbjE2OTg6XHRcdCAqIDEuIGRhbW9uX3NldF9hdHRycygpIHVwZGF0ZXMgbW9uaXRvcmluZyByZXN1bHRzIG9mIHRhcmdldHMgYW5kXG4xNjk5Olx0XHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcbjE3MDA6XHRcdCAqIDIuIG9wcyB1cGRhdGUgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgcGlkIGhhbmRsaW5nIGlzIGRvbmUgKHRhcmdldFxuMTcwMTpcdFx0ICogICAgY29tbWl0dGluZyByZXF1aXJlIHB1dHRpbmcgcGlkcykuXG4xNzAyOlx0XHQgKi9cbjE3MDM6XHRcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFx1MDAyNmRzdC1cdTAwM2VhdHRycywgXHUwMDI2c3JjLVx1MDAzZWF0dHJzKSkge1xuMTcwNDpcdFx0XHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcdTAwMjZzcmMtXHUwMDNlYXR0cnMpO1xuMTcwNTpcdFx0XHRpZiAoZXJyKSB7XG4xNzA2Olx0XHRcdFx0ZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKGRzdCwgTlVMTCwgc3JjKTtcbjE3MDc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTcwODpcdFx0XHR9XG4xNzA5Olx0XHR9XG4xNzEwOlx0XHRkc3QtXHUwMDNlcGF1c2UgPSBzcmMtXHUwMDNlcGF1c2U7XG4xNzExOlx0XHRkc3QtXHUwMDNlb3BzID0gc3JjLVx1MDAzZW9wcztcbjE3MTI6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuMTcxMzpcdFx0aWYgKGVycilcbjE3MTQ6XHRcdFx0cmV0dXJuIGVycjtcbjE3MTU6XHRcdGRzdC1cdTAwM2VhZGRyX3VuaXQgPSBzcmMtXHUwMDNlYWRkcl91bml0O1xuMTcxNjpcdFx0ZHN0LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBzcmMtXHUwMDNlbWluX3JlZ2lvbl9zejtcbjE3MTc6XHRcbjE3MTg6XHRcdGRzdC1cdTAwM2VtYXliZV9jb3JydXB0ZWQgPSBmYWxzZTtcbjE3MTk6XHRcdHJldHVybiAwO1xuMTcyMDpcdH1cbjE3MjE6XHRcbjE3MjI6XHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbjE3MjM6XHR7XG4xNzI0Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbjE3MjU6XHRcdGludCBlcnI7XG4xNzI2Olx0XG4xNzI3Olx0XHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcbjE3Mjg6XHRcdGlmICghdGVzdF9jdHgpXG4xNzI5Olx0XHRcdHJldHVybiBOVUxMO1xuMTczMDpcdFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xuMTczMTpcdFx0aWYgKGVycikge1xuMTczMjpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4xNzMzOlx0XHRcdHJldHVybiBOVUxMO1xuMTczNDpcdFx0fVxuMTczNTpcdFx0cmV0dXJuIHRlc3RfY3R4O1xuMTczNjpcdH1cbjE3Mzc6XHRcbjE3Mzg6XHQvKipcbjE3Mzk6XHQgKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbjE3NDA6XHQgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuMTc0MTpcdCAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuMTc0MjpcdCAqXG4xNzQzOlx0ICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlXG4xNzQ0Olx0ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuMTc0NTpcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcbjE3NDY6XHQgKiBpbi1wbGFjZSB1cGRhdGVzLlxuMTc0NzpcdCAqXG4xNzQ4Olx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4xNzQ5Olx0ICogZGFtb25fY2FsbCgpLlxuMTc1MDpcdCAqL1xuMTc1MTpcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuMTc1MjpcdHtcbjE3NTM6XHRcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuMTc1NDpcdFx0aW50IGVycjtcbjE3NTU6XHRcbjE3NTY6XHRcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XG4xNzU3Olx0XHRpZiAoIXRlc3RfY3R4KVxuMTc1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NTk6XHRcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcbjE3NjA6XHRcdGlmIChlcnIpXG4xNzYxOlx0XHRcdGdvdG8gb3V0O1xuMTc2MjpcdFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcbjE3NjM6XHRvdXQ6XG4xNzY0Olx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4xNzY1Olx0XHRyZXR1cm4gZXJyO1xuMTc2NjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQ2hlY2tpbmcgREFNT04gUmVnaW9uIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYF9fZGFtb25fY29tbWl0X2N0eGAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAoIWlzX3Bvd2VyX29mXzIoc3JjLSZndDttaW5fcmVnaW9uX3N6KSkgcmV0dXJuIC1FSU5WQUw7YC4gU21hcnQgbW92ZS4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBtaW5pbXVtIHJlZ2lvbiBzaXplIGlzIGEgcG93ZXIgb2YgdHdvOyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBEQU1PTiYjMzk7cyBvcGVyYXRpb24uIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGdvb2QgdG8gaGF2ZSBleHBsaWNpdCB2YWxpZGF0aW9uLgoKVGhlbiwgbG9va2luZyBhdCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBJIHNwb3QgYGlmIChzdGFydCAmZ3Q7IGVuZCkgcmV0dXJuIC1FSU5WQUw7YC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UgY2FuJiMzOTt0IGhhdmUgYSBzdGFydCBhZGRyZXNzIHRoYXQmIzM5O3MgKmFmdGVyKiB0aGUgZW5kIGFkZHJlc3MsIGl0JiMzOTtkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGlzc3Vlcy4gU2ltcGxlLCBidXQgY3JpdGljYWwgZm9yIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlZ3JpdHkuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24gaXRzZWxmLiBMZXQgbWUgbmF2aWdhdGUgdG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGRldGFpbHMgSSYjMzk7bSBtaXNzaW5nLiBBbHdheXMgZ29vZCB0byBoYXZlIGEgdGhvcm91Z2ggbG9vayBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgcHJvdGVjdGluZyBhZ2FpbnN0IHRoZSBvYnZpb3VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIG9mIHRoZSBsZXNzIG9idmlvdXMsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0Mjg6XHQgKiBkYW1vbl9zZXRfcmVnaW9ucygpIC0gU2V0IHJlZ2lvbnMgb2YgYSB0YXJnZXQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2VzLlxuIDQyOTpcdCAqIEB0Olx0XHR0aGUgZ2l2ZW4gdGFyZ2V0LlxuIDQzMDpcdCAqIEByYW5nZXM6XHRhcnJheSBvZiBuZXcgbW9uaXRvcmluZyB0YXJnZXQgcmFuZ2VzLlxuIDQzMTpcdCAqIEBucl9yYW5nZXM6XHRsZW5ndGggb2YgQHJhbmdlcy5cbiA0MzI6XHQgKiBAbWluX3JlZ2lvbl9zejpcdG1pbmltdW0gcmVnaW9uIHNpemUuXG4gNDMzOlx0ICpcbiA0MzQ6XHQgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgbmV3IHJlZ2lvbnMgdG8sIG9yIG1vZGlmeSBleGlzdGluZyByZWdpb25zIG9mIGFcbiA0MzU6XHQgKiBtb25pdG9yaW5nIHRhcmdldCB0byBmaXQgaW4gc3BlY2lmaWMgcmFuZ2VzLlxuIDQzNjpcdCAqXG4gNDM3Olx0ICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuIDQzODpcdCAqL1xuIDQzOTpcdGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuIDQ0MDpcdFx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4gNDQxOlx0e1xuIDQ0MjpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XG4gNDQzOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiA0NDQ6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9lbmQ7XG4gNDQ1Olx0XHRpbnQgZXJyO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuIDQ0ODpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4gNDQ5Olx0XG4gNDUwOlx0XHRcdHN0YXJ0ID0gQUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuIDQ1MTpcdFx0XHRlbmQgPSBBTElHTihyYW5nZXNbaV0uZW5kLCBtaW5fcmVnaW9uX3N6KTtcbiA0NTI6XHRcdFx0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuIDQ1MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1NDpcdFx0XHRpZiAoaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGFzdF9lbmQgXHUwMDNlIHN0YXJ0KVxuIDQ1NTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1NjpcdFx0XHRsYXN0X2VuZCA9IGVuZDtcbiA0NTc6XHRcdH1cbiA0NTg6XHRcbiA0NTk6XHRcdC8qIFJlbW92ZSByZWdpb25zIHdoaWNoIGFyZSBub3QgaW4gdGhlIG5ldyByYW5nZXMgKi9cbiA0NjA6XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcbiA0NjE6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykge1xuIDQ2MjpcdFx0XHRcdGlmIChkYW1vbl9pbnRlcnNlY3QociwgXHUwMDI2cmFuZ2VzW2ldKSlcbiA0NjM6XHRcdFx0XHRcdGJyZWFrO1xuIDQ2NDpcdFx0XHR9XG4gNDY1Olx0XHRcdGlmIChpID09IG5yX3JhbmdlcylcbiA0NjY6XHRcdFx0XHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcbiA0Njc6XHRcdH1cbiA0Njg6XHRcbiA0Njk6XHRcdGlmICghZGFtb25fbnJfcmVnaW9ucyh0KSkge1xuIDQ3MDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4gNDcxOlx0XHRcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oXG4gNDcyOlx0XHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2VzW2ldLnN0YXJ0LFxuIDQ3MzpcdFx0XHRcdFx0XHRcdG1pbl9yZWdpb25fc3opLFxuIDQ3NDpcdFx0XHRcdFx0XHRBTElHTihyYW5nZXNbaV0uZW5kLCBtaW5fcmVnaW9uX3N6KSk7XG4gNDc1Olx0XHRcdFx0aWYgKCFyKVxuIDQ3NjpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDc3Olx0XHRcdFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiA0Nzg6XHRcdFx0fVxuIDQ3OTpcdFx0XHRyZXR1cm4gMDtcbiA0ODA6XHRcdH1cbiA0ODE6XHRcbiA0ODI6XHRcdHIgPSBkYW1vbl9maXJzdF9yZWdpb24odCk7XG4gNDgzOlx0XHQvKiBBZGQgbmV3IHJlZ2lvbnMgb3IgcmVzaXplIGV4aXN0aW5nIHJlZ2lvbnMgdG8gZml0IGluIHRoZSByYW5nZXMgKi9cbiA0ODQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlczsgaSYjNDM7JiM0MzspIHtcbiA0ODU6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QgPSBOVUxMLCAqbGFzdCwgKm5ld3I7XG4gNDg2Olx0XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZTtcbiA0ODc6XHRcdFx0Ym9vbCBpbnNlcnRfYmVmb3JlX3IgPSBmYWxzZTtcbiA0ODg6XHRcbiA0ODk6XHRcdFx0cmFuZ2UgPSBcdTAwMjZyYW5nZXNbaV07XG4gNDkwOlx0XHRcdC8qIEdldCB0aGUgZmlyc3QvbGFzdCByZWdpb25zIGludGVyc2VjdGluZyB3aXRoIHRoZSByYW5nZSAqL1xuIDQ5MTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XG4gNDkyOlx0XHRcdFx0aWYgKGRhbW9uX2ludGVyc2VjdChyLCByYW5nZSkpIHtcbiA0OTM6XHRcdFx0XHRcdGlmICghZmlyc3QpXG4gNDk0Olx0XHRcdFx0XHRcdGZpcnN0ID0gcjtcbiA0OTU6XHRcdFx0XHRcdGxhc3QgPSByO1xuIDQ5NjpcdFx0XHRcdH1cbiA0OTc6XHRcdFx0XHRpZiAoci1cdTAwM2Vhci5zdGFydCBcdTAwM2U9IHJhbmdlLVx1MDAzZWVuZCkge1xuIDQ5ODpcdFx0XHRcdFx0aW5zZXJ0X2JlZm9yZV9yID0gdHJ1ZTtcbiA0OTk6XHRcdFx0XHRcdGJyZWFrO1xuIDUwMDpcdFx0XHRcdH1cbiA1MDE6XHRcdFx0fVxuIDUwMjpcdFx0XHRpZiAoIWZpcnN0KSB7XG4gNTAzOlx0XHRcdFx0Lyogbm8gcmVnaW9uIGludGVyc2VjdHMgd2l0aCB0aGlzIHJhbmdlICovXG4gNTA0Olx0XHRcdFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oXG4gNTA1Olx0XHRcdFx0XHRcdEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlc3RhcnQsXG4gNTA2Olx0XHRcdFx0XHRcdFx0bWluX3JlZ2lvbl9zeiksXG4gNTA3Olx0XHRcdFx0XHRcdEFMSUdOKHJhbmdlLVx1MDAzZWVuZCwgbWluX3JlZ2lvbl9zeikpO1xuIDUwODpcdFx0XHRcdGlmICghbmV3cilcbiA1MDk6XHRcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDUxMDpcdFx0XHRcdGlmIChpbnNlcnRfYmVmb3JlX3IpXG4gNTExOlx0XHRcdFx0XHRkYW1vbl9pbnNlcnRfcmVnaW9uKG5ld3IsIGRhbW9uX3ByZXZfcmVnaW9uKHIpLFxuIDUxMjpcdFx0XHRcdFx0XHRcdHIsIHQpO1xuIDUxMzpcdFx0XHRcdGVsc2VcbiA1MTQ6XHRcdFx0XHRcdGRhbW9uX2FkZF9yZWdpb24obmV3ciwgdCk7XG4gNTE1Olx0XHRcdH0gZWxzZSB7XG4gNTE2Olx0XHRcdFx0LyogcmVzaXplIGludGVyc2VjdGluZyByZWdpb25zIHRvIGZpdCBpbiB0aGlzIHJhbmdlICovXG4gNTE3Olx0XHRcdFx0Zmlyc3QtXHUwMDNlYXIuc3RhcnQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZXN0YXJ0LFxuIDUxODpcdFx0XHRcdFx0XHRtaW5fcmVnaW9uX3N6KTtcbiA1MTk6XHRcdFx0XHRsYXN0LVx1MDAzZWFyLmVuZCA9IEFMSUdOKHJhbmdlLVx1MDAzZWVuZCwgbWluX3JlZ2lvbl9zeik7XG4gNTIwOlx0XG4gNTIxOlx0XHRcdFx0LyogZmlsbCBwb3NzaWJsZSBob2xlcyBpbiB0aGUgcmFuZ2UgKi9cbiA1MjI6XHRcdFx0XHRlcnIgPSBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoZmlyc3QsIGxhc3QsIHQpO1xuIDUyMzpcdFx0XHRcdGlmIChlcnIpXG4gNTI0Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDUyNTpcdFx0XHR9XG4gNTI2Olx0XHR9XG4gNTI3Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERBTU9OIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBgZGFtb25fc2V0X3JlZ2lvbnNgIGhhcyBiZWVuIHVwZGF0ZWQuJiMzNDsgSSBzZWUgdGhlIGNydWNpYWwgbG9vcDoKCmBgYGMKCQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewoJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CgoJCQlzdGFydCA9IEFMSUdOX0RPV04ocmFuZ2VzW2ldLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTsKCQkJZW5kID0gQUxJR04ocmFuZ2VzW2ldLmVuZCwgbWluX3JlZ2lvbl9zeik7CgkJCWlmIChzdGFydCAmZ3Q7PSBlbmQpCgkJCQlyZXR1cm4gLUVJTlZBTDsKCQkJaWYgKGkgJmd0OyAwICZhbXA7JmFtcDsgbGFzdF9lbmQgJmd0OyBzdGFydCkKCQkJCXJldHVybiAtRUlOVkFMOwoJCQlsYXN0X2VuZCA9IGVuZDsKCQl9CmBgYAoKSXQmIzM5O3MgY2xlYXIgbm93IHRoYXQgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIHZhbGlkYXRlcyB0aGF0IHRoZSBzdGFydCBpcyAqbm90KiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGVuZCwgZW5zdXJpbmcgYSB2YWxpZCByZWdpb24uIFRoYXQmIzM5O3MgZ29vZCwgZWZmaWNpZW50LiBJdCBtYWtlcyBzZW5zZSB3aHkgdGhleSByZW1vdmVkIHRoZSByZWR1bmRhbnQgY2hlY2tzIChgaWYgKCpzdGFydCAmZ3Q7ICplbmQpYCBpbiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBhbmQgYHN5c19yZWdpb24tJmd0O2FyLnN0YXJ0ICZndDsgc3lzX3JlZ2lvbi0mZ3Q7YXIuZW5kYCBpbiBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgKSDigJMgYGRhbW9uX3NldF9yZWdpb25zYCBpcyBoYW5kbGluZyB0aGUgdmFsaWRhdGlvbiwgbWFraW5nIHRoZSBvdGhlciBjaGVja3MgdW5uZWNlc3NhcnkuIENsZWFuZXIgY29kZSBpcyBhbHdheXMgd2VsY29tZS4KClRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYGRhbW9uX2NvbW1pdF9jdHhgLiBJdCYjMzk7cyBub3cgdGVzdGluZyBmb3IgY2hhbmdlcyAqYmVmb3JlKiBjb21taXR0aW5nIHRoZW0uIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbiBpbiB0aGUgREFNT04gYXJjaGl0ZWN0dXJlLiBHb29kIG9uIHRoZW0gZm9yIHRoYXQuIFNpbWlsYXJseSwgYGRhbW9uX3N0YXJ0YCBpcyBub3cgZG9pbmcgdGhlIHNhbWUgdGhpbmc6IHRlc3RpbmcgZm9yIGNoYW5nZXMgYmVmb3JlIHN0YXJ0aW5nLiBUaGF0JiMzOTtzIGFsc28gYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgYXJlIHNpZ25pZmljYW50LgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIGdpdmVuIHRoZXNlIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgREFNT04/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UmIzM5O3JlIHByb3Blcmx5IHNldHRpbmcgdXAgdGhlIHN5c3RlbSBmb3IgREFNT04uJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZS4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBgbW0vZGFtb24vcmVjbGFpbS5jYCwgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHF1aXRlIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBmaWxlcyBhZmZlY3RlZCwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGNvbnNpZGVyIGBEQU1PTmAsIGBEQU1PTl9MUlVfU09SVGAsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9TWVNGU2Agb3B0aW9ucy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBtbS9kYW1vbi9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgY29uZmlndXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGF0IHBsYXkuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRlZHVjaW5nIEJ1aWxkIFJlbGF0aW9uc2hpcHMgaW4gYSBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYERBTU9OYCBoZXJlLi4uIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBzdGFuZGFsb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGlyZWN0bHkgcHJvZHVjZXMgYGNvcmUub2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgYSBkaXJlY3QgbGluaywgYnV0IHRoYXQmIzM5O3Mgbm90IHdoYXQgSSYjMzk7bSBzZWVpbmcuCgpIb2xkIG9uLCBsZXQgbWUgdHJhY2UgdGhpcy4uLiB3aGVyZSBkb2VzIGBEQU1PTmAgZ2V0IGJyb3VnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcz8gQWggaGEhIEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gQW5kIHRoYXQgYE1ha2VmaWxlYCBpcyBpbmNsdWRlZCBmcm9tIGBtbS9NYWtlZmlsZWAuLi4gdGhhdCYjMzk7cyB0aGUgY29ubmVjdGlvbiEgU28gaXQmIzM5O3MgYmVpbmcgaW5jb3Jwb3JhdGVkIGhpZ2hlciB1cCB0aGUgYnVpbGQgaGllcmFyY2h5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jbHVzaW9uIGluIGBtbS9NYWtlZmlsZWAgd29ya3MgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgYERBTU9OYCBpbmZsdWVuY2VzIHRoZSBjcmVhdGlvbiBvZiBgY29yZS5vYCwgYW5kIG90aGVyIHJlbGF0ZWQgb2JqZWN0cy4gTm93IEkgaGF2ZSBhIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM0PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNTpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzNi1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTkyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHBhdGNoIHJlbGF0ZWQgdG8gREFNT04uIEl0JiMzOTtzIGNsZWFyIHRoYXQgZW5hYmxpbmcgYENPTkZJR19EQU1PTmAgd2lsbCBicmluZyBpbiB0aGUgZW50aXJlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gIEFuZCwgaWYgSSBlbmFibGUgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUkVDTEFJTWAsIGFuZCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgSSYjMzk7bSBnb2luZyB0byBnZXQgYHN5c2ZzLm9gLCBgcmVjbGFpbS5vYCwgYW5kIGBscnVfc29ydC5vYCBidWlsdCwgcmVzcGVjdGl2ZWx5LiAgVGhlcmVmb3JlLCB0byBnZXQgdGhlIGZ1bGwgREFNT04gc3VpdGUsIEkgZGVmaW5pdGVseSBuZWVkIHRvIHNldCBhbGwgb2YgdGhvc2UgLSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgIHRvICYjMzk7eSYjMzk7LgoKTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nPyAgTGV0JiMzOTtzIHNlZeKApiBJJiMzOTttIG5vdGljaW5nIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX2NvbW1pdF9jdHhgLCBgX19kYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX25ld190ZXN0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAuCgpDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyB0byBmb2N1cyBvbiBoZXJlIGFyZSBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGguCgpJIHdhbnQgdG8gY2hlY2sgaG93IHRob3NlIGBzeXNmc2AgZnVuY3Rpb25zIHdvcmssIHNpbmNlIHRoZXkgYXJlIGNydWNpYWwgZm9yIHNldHRpbmcgdXAgYW5kIGNvbnRyb2xsaW5nIHRoZSBEQU1PTiBzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXMgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgcmVhY2hhYmxlPyBZZXMsIGl0JiMzOTtzIGEgc3lzZnMgY2FsbGJhY2suIEFuZCB0aGUgc2FtZSBmb3IgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCAtIGFub3RoZXIgc3lzZnMgY2FsbGJhY2suIEFuZCB0aG9zZSBhcHBseSBwYXJhbWV0ZXJzIGZ1bmN0aW9ucyBmb3IgbHJ1IGFuZCByZWNsYWltIGFyZSBwcm9iYWJseSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrcyBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggSSB3aWxsIGxvb2sgYXQgdG9vLgoKTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDQ6XHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDUtfVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE0LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTU6XHRlcnIgPSBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERBTU9OIFBhcmFtZXRlciBBcHBsaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IERBTU9OIHBhcmFtZXRlcnMgYXJlIGFwcGxpZWQuIEkgc2VlIHRoYXQgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuYCBhbmQgdGhlIGBkYW1vbl9scnVfc29ydF90dXJuYCBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBpdCBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGguIFNpbWlsYXIgcHJvY2Vzc2VzIG11c3QgZXhpc3QgZm9yIG90aGVyIGNvbXBvbmVudHMsIGZvciBleGFtcGxlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLgoKSSB3YW50IHRvIHNlZSAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBjb21taXR0ZWQuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgZnVuY3Rpb24sIGFzIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBwbGFjZSBmb3IgdGhlIGZpbmFsIHBhcmFtZXRlciBhcHBsaWNhdGlvbiB0byBvY2N1ci4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGF0IG9uZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIwOTU9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTgtLypcbm1tL2RhbW9uL3N5c2ZzLmM6MjA5OTogKiBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQoKSAtIENvbW1pdCB1c2VyIGlucHV0cyB0byBhIHJ1bm5pbmcga2RhbW9uZC5cbm1tL2RhbW9uL3N5c2ZzLmMtMjEwMC0gKiBAa2RhbW9uZDpcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAzLSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMTA0OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDUte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMzNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM0OC1cdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jOjIzNDk6XHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xubW0vZGFtb24vc3lzZnMuYy0yMzUwLVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTMyCgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhpcyBwYXRjaCBvdmVyLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHBvc2l0aXZlOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGBzeXNmc2AgY29tbWFuZHMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gRnVuY3Rpb25hbGx5LCBpdCBsb29rcyBzb2xpZC4gVGhlIGFkZGl0aW9uIG9mIGEgdGVzdCBjb250ZXh0IGNyZWF0aW9uIGJlZm9yZSBjb21taXR0aW5nIHBhcmFtZXRlcnMgaXMgYSBzbWFydCBtb3ZlLiBUaGlzIHByb2FjdGl2ZSB2YWxpZGF0aW9uIHNob3VsZCBwcmV2ZW50IHRob3NlIG5hc3R5IHBhcnRpYWwgdXBkYXRlcyBvciBpbnZhbGlkIHN0YXRlcyB0aGF0IGNhbiBiZSBzdWNoIGEgaGVhZGFjaGUuCgpJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZGVlcGVyIGFuYWx5c2lzIGFuZCB0ZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhlc2UgYXJlIG9idmlvdXNseSB0aGUgY29yZSBlbGVtZW50cy4KCkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIHRoZSBleHBlY3RlZCBvbmVzOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBIb3dldmVyLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSByZWxldmFudC4gVGhpbmtpbmcgdGhyb3VnaCBob3cgdGhpcyBtaWdodCB3b3JrLCBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIHByb2JhYmx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5IHRvIGhhdmUgYW4gZWZmZWN0LiBXaGlsZSB0aGUgY29yZSBsb2dpYyBpcyBpbiBgREFNT05gLCB0aG9zZSB0d28gY29uZmlncyBhcmUgZnVuZGFtZW50YWwgdG8gZG9pbmcsIHdlbGwsIGFueXRoaW5nLiBJJiMzOTtsbCBpbmNsdWRlIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgaW4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgaW52b2x2ZSB0aGUgY29yZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NldF9yZWdpb25zJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGNvbnRleHQgY29tbWl0IGxvZ2ljIHRvIHVzZSBhIHRlc3QgY29udGV4dCB0byB2YWxpZGF0ZSBjaGFuZ2VzIGJlZm9yZSBhcHBseWluZyB0aGVtLiBJdCBhbHNvIHJlbW92ZXMgdmFsaWRhdGlvbiBsb2dpYyBmcm9tIHZhcmlvdXMgY2FsbGVycyBhbmQgcmVsaWVzIG9uIHRoZSBjb3JlIHZhbGlkYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NldF9yZWdpb25zJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGNvbnRleHQgY29tbWl0IGxvZ2ljIHRvIHVzZSBhIHRlc3QgY29udGV4dCB0byB2YWxpZGF0ZSBjaGFuZ2VzIGJlZm9yZSBhcHBseWluZyB0aGVtLiBJdCBhbHNvIHJlbW92ZXMgdmFsaWRhdGlvbiBsb2dpYyBmcm9tIHZhcmlvdXMgY2FsbGVycyBhbmQgcmVsaWVzIG9uIHRoZSBjb3JlIHZhbGlkYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjI4Ljg0NTYzNzg5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTAzNDUzNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NldF9yZWdpb25zXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBjb250ZXh0IGNvbW1pdCBsb2dpYyB0byB1c2UgYSB0ZXN0IGNvbnRleHQgdG8gdmFsaWRhdGUgY2hhbmdlcyBiZWZvcmUgYXBwbHlpbmcgdGhlbS4gSXQgYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSB2YXJpb3VzIGNhbGxlcnMgYW5kIHJlbGllcyBvbiB0aGUgY29yZSB2YWxpZGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjI4Ljg0NTY0NDI2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDg4NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWI1YTRkODQyNGIzMzNkYzNiZTAxOWQzMDM5OTc0ZGZhMTlmZDJhMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCA1IDE2OjIzOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDYxNmJkZjA5NTRiNTJhLi4yNjYxMjMxYzBhZTgyZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDksNyArNDksOCBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBsaXN0OlxcdFxcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXFxuICAqIEBhZ2U6XFx0XFx0QWdlIG9mIHRoaXMgcmVnaW9uLlxcbiAgKlxcbi0gKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuXFxuKyAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcXG4rICogZG9lcyB0aGUgdmFsaWRhdGlvbi5cXG4gICpcXG4gICogQG5yX2FjY2Vzc2VzIGlzIHJlc2V0IHRvIHplcm8gZm9yIGV2ZXJ5IFxcdTAwMjZkYW1vbl9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbCBhbmQgYmVcXG4gICogaW5jcmVhc2VkIGZvciBldmVyeSBcXHUwMDI2ZGFtb25fYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCBpZiBhbiBhY2Nlc3MgdG8gdGhlIHJlZ2lvblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA4NzFjNmY1MjU3YzllNC4uM2M1YTQ2ZTFjMDc5YTMgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTE2NjQsMjAgKzE2NjQsNyBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKipcXG4tICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXFxuLSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0Llxcbi0gKiBAc3JjOlxcdFRoZSBjb21taXQgc291cmNlIERBTU9OIGNvbnRleHQuXFxuLSAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZnJvbSBAc3JjIHRvIEBkc3QgYW5kIHVwZGF0ZVxcbi0gKiB0aGUgaW50ZXJuYWwgc3RhdHVzIGFuZCByZXN1bHRzIGFjY29yZGluZ2x5LiAgVXNlcnMgc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uXFxuLSAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcXG4tICogaW4tcGxhY2UgdXBkYXRlcy5cXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuLSAqIGRhbW9uX2NhbGwoKS5cXG4tICovXFxuLWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbitzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG5AQCAtMTczMiw2ICsxNzE5LDUyIEBAIGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4rXFx0aWYgKCF0ZXN0X2N0eClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcdHJldHVybiB0ZXN0X2N0eDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLlxcbisgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4rICogQHNyYzpcXHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcXG4rICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxcbisgKiBmb3IgY29udGV4dC1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nIGNvbnRleHQsIGluc3RlYWQgb2YgbWFudWFsXFxuKyAqIGluLXBsYWNlIHVwZGF0ZXMuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxcbisgKiBkYW1vbl9jYWxsKCkuXFxuKyAqL1xcbitpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XFxuK1xcdGlmICghdGVzdF9jdHgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHNyYyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpO1xcbitvdXQ6XFxuK1xcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGRhbW9uX25yX3J1bm5pbmdfY3R4cygpIC0gUmV0dXJuIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0cy5cXG4gICovXFxuQEAgLTE4MzIsNiArMTg2NSw4IEBAIHN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4rXFxuIC8qKlxcbiAgKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG4gICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuQEAgLTE4NTMsOCArMTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxuLVxcdFxcdGlmICghaXNfcG93ZXJfb2ZfMihjdHhzW2ldLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xcbitcXG4rXFx0XFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuK1xcdFxcdGlmICghdGVzdF9jdHgpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBjdHhzW2ldKTtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9sb2NrKTtcXG5AQCAtMzgwMyw5ICszODQ2LDYgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XFxuIFxcbi1cXHRpZiAoKnN0YXJ0IFxcdTAwM2UgKmVuZClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHRpZiAoISpzdGFydCBcXHUwMDI2XFx1MDAyNiAhKmVuZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5pbmRleCAzMmY0MTQ5MWI3MjZiMi4uMmRkMGNkMGQyNjI3MzEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5AQCAtMjg0LDExICsyODQsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4gXFx0cGFyYW1fY3R4LVxcdTAwM2VhZGRyX3VuaXQgPSBhZGRyX3VuaXQ7XFxuIFxcdHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcXG4gXFxuLVxcdGlmICghaXNfcG93ZXJfb2ZfMihwYXJhbV9jdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxuLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoIWRhbW9uX2xydV9zb3J0X21vbl9hdHRycy5zYW1wbGVfaW50ZXJ2YWwpIHtcXG4gXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbmluZGV4IDExYjcwZDBhOWE2ZjBhLi42NDY5YjI1Y2MzNGY5MiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMjA4LDExICsyMDgsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbiBcXHRwYXJhbV9jdHgtXFx1MDAzZWFkZHJfdW5pdCA9IGFkZHJfdW5pdDtcXG4gXFx0cGFyYW1fY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KERBTU9OX01JTl9SRUdJT05fU1ogLyBhZGRyX3VuaXQsIDEpO1xcbiBcXG4tXFx0aWYgKCFpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG4tXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdGlmICghZGFtb25fcmVjbGFpbV9tb25fYXR0cnMuYWdncl9pbnRlcnZhbCkge1xcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMTk4Nyw5ICsxOTg3LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpzeXNfcmVnaW9uID1cXG4gXFx0XFx0XFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNlcmVnaW9uc19hcnJbaV07XFxuIFxcbi1cXHRcXHRpZiAoc3lzX3JlZ2lvbi1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzZSBzeXNfcmVnaW9uLVxcdTAwM2Vhci5lbmQpXFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0XFx0cmFuZ2VzW2ldLnN0YXJ0ID0gc3lzX3JlZ2lvbi1cXHUwMDNlYXIuc3RhcnQ7XFxuIFxcdFxcdHJhbmdlc1tpXS5lbmQgPSBzeXNfcmVnaW9uLVxcdTAwM2Vhci5lbmQ7XFxuIFxcdFxcdGlmIChpID09IDApXFxuQEAgLTIwOTgsMjYgKzIwOTUsNiBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KTtcXG4gXFxuLS8qXFxuLSAqIFJldHVybiBhIG5ldyBkYW1vbl9jdHggZm9yIHRlc3RpbmcgbmV3IHBhcmFtZXRlcnMgdG8gY29tbWl0Llxcbi0gKi9cXG4tc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcXG4tXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqcnVubmluZ19jdHgpXFxuLXtcXG4tXFx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4tXFx0aWYgKCF0ZXN0X2N0eClcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHJ1bm5pbmdfY3R4KTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHR9XFxuLVxcdHJldHVybiB0ZXN0X2N0eDtcXG4tfVxcbi1cXG4gLypcXG4gICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxuICAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuQEAgLTIxMjcsNyArMjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXFxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBkYXRhO1xcbi1cXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDtcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXFxuQEAgLTIxMzksMTcgKzIxMTYsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCh2b2lkICpkYXRhKVxcbiBcXHRwYXJhbV9jdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXSk7XFxuIFxcdGlmIChJU19FUlIocGFyYW1fY3R4KSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocGFyYW1fY3R4KTtcXG4tXFx0dGVzdF9jdHggPSBkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4tXFx0aWYgKCF0ZXN0X2N0eCkge1xcbi1cXHRcXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbi1cXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBwYXJhbV9jdHgpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4gXFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XFxuLW91dDpcXG4tXFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xcbiBcXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjI5LjMyNDExMDc3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MjQ5NzIxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dFwiLFxuICAgIFwiZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGNvbnRleHQgY29tbWl0IGxvZ2ljIHRvIHVzZSBhIHRlc3QgY29udGV4dCB0byB2YWxpZGF0ZSBjaGFuZ2VzIGJlZm9yZSBhcHBseWluZyB0aGVtLiBJdCBhbHNvIHJlbW92ZXMgdmFsaWRhdGlvbiBsb2dpYyBmcm9tIHZhcmlvdXMgY2FsbGVycyBhbmQgcmVsaWVzIG9uIHRoZSBjb3JlIHZhbGlkYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYjVhNGQ4NDI0YjMzM2RjM2JlMDE5ZDMwMzk5NzRkZmExOWZkMmEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxNjoyMzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNjE2YmRmMDk1NGI1MmEuLjI2NjEyMzFjMGFlODJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC00OSw3ICs0OSw4IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG4gICpcbi0gKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuXG4rICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxuKyAqIGRvZXMgdGhlIHZhbGlkYXRpb24uXG4gICpcbiAgKiBAbnJfYWNjZXNzZXMgaXMgcmVzZXQgdG8gemVybyBmb3IgZXZlcnkgXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCBhbmQgYmVcbiAgKiBpbmNyZWFzZWQgZm9yIGV2ZXJ5IFx1MDAyNmRhbW9uX2F0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCBpZiBhbiBhY2Nlc3MgdG8gdGhlIHJlZ2lvblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggODcxYzZmNTI1N2M5ZTQuLjNjNWE0NmUxYzA3OWEzIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xNjY0LDIwICsxNjY0LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qKlxuLSAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLlxuLSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9OIGNvbnRleHQuXG4tICogQHNyYzpcdFRoZSBjb21taXQgc291cmNlIERBTU9OIGNvbnRleHQuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcbi0gKiB0aGUgaW50ZXJuYWwgc3RhdHVzIGFuZCByZXN1bHRzIGFjY29yZGluZ2x5LiAgVXNlcnMgc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uXG4tICogZm9yIGNvbnRleHQtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZyBjb250ZXh0LCBpbnN0ZWFkIG9mIG1hbnVhbFxuLSAqIGluLXBsYWNlIHVwZGF0ZXMuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2Vcbi0gKiBkYW1vbl9jYWxsKCkuXG4tICovXG4taW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4rc3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuQEAgLTE3MzIsNiArMTcxOSw1MiBAQCBpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbitcdGludCBlcnI7XG4rXG4rXHR0ZXN0X2N0eCA9IGRhbW9uX25ld19jdHgoKTtcbitcdGlmICghdGVzdF9jdHgpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1x0cmV0dXJuIHRlc3RfY3R4O1xuK31cbitcbisvKipcbisgKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbisgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuKyAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlXG4rICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuKyAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcbisgKiBpbi1wbGFjZSB1cGRhdGVzLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4rICogZGFtb25fY2FsbCgpLlxuKyAqL1xuK2ludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuK1x0aW50IGVycjtcbitcbitcdHRlc3RfY3R4ID0gZGFtb25fbmV3X3Rlc3RfY3R4KGRzdCk7XG4rXHRpZiAoIXRlc3RfY3R4KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcbitvdXQ6XG4rXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiAvKipcbiAgKiBkYW1vbl9ucl9ydW5uaW5nX2N0eHMoKSAtIFJldHVybiBudW1iZXIgb2YgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dHMuXG4gICovXG5AQCAtMTgzMiw2ICsxODY1LDggQEAgc3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbitcbiAvKipcbiAgKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbiAgKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuQEAgLTE4NTMsOCArMTg4OCwxNiBAQCBpbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSsrKSB7XG4tXHRcdGlmICghaXNfcG93ZXJfb2ZfMihjdHhzW2ldLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcbitcbitcdFx0dGVzdF9jdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4rXHRcdGlmICghdGVzdF9jdHgpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgY3R4c1tpXSk7XG4rXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9sb2NrKTtcbkBAIC0zODAzLDkgKzM4NDYsNiBAQCBpbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4ge1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiBcbi1cdGlmICgqc3RhcnQgXHUwMDNlICplbmQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0aWYgKCEqc3RhcnQgXHUwMDI2XHUwMDI2ICEqZW5kIFx1MDAyNlx1MDAyNlxuIFx0XHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggMzJmNDE0OTFiNzI2YjIuLjJkZDBjZDBkMjYyNzMxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTI4NCwxMSArMjg0LDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gXG4tXHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0aWYgKCFkYW1vbl9scnVfc29ydF9tb25fYXR0cnMuc2FtcGxlX2ludGVydmFsKSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggMTFiNzBkMGE5YTZmMGEuLjY0NjliMjVjYzM0ZjkyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcmVjbGFpbS5jXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcbkBAIC0yMDgsMTEgKzIwOCw2IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gXG4tXHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCA2NzEwYjZkMDE5YmY1My4uYjY1NjUxNDk4ZTBkMTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTk4Nyw5ICsxOTg3LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpzeXNfcmVnaW9uID1cbiBcdFx0XHRzeXNmc19yZWdpb25zLVx1MDAzZXJlZ2lvbnNfYXJyW2ldO1xuIFxuLVx0XHRpZiAoc3lzX3JlZ2lvbi1cdTAwM2Vhci5zdGFydCBcdTAwM2Ugc3lzX3JlZ2lvbi1cdTAwM2Vhci5lbmQpXG4tXHRcdFx0Z290byBvdXQ7XG4tXG4gXHRcdHJhbmdlc1tpXS5zdGFydCA9IHN5c19yZWdpb24tXHUwMDNlYXIuc3RhcnQ7XG4gXHRcdHJhbmdlc1tpXS5lbmQgPSBzeXNfcmVnaW9uLVx1MDAzZWFyLmVuZDtcbiBcdFx0aWYgKGkgPT0gMClcbkBAIC0yMDk4LDI2ICsyMDk1LDYgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4gXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KTtcbiBcbi0vKlxuLSAqIFJldHVybiBhIG5ldyBkYW1vbl9jdHggZm9yIHRlc3RpbmcgbmV3IHBhcmFtZXRlcnMgdG8gY29tbWl0LlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXG4tXHRcdHN0cnVjdCBkYW1vbl9jdHggKnJ1bm5pbmdfY3R4KVxuLXtcbi1cdHN0cnVjdCBkYW1vbl9jdHggKnRlc3RfY3R4O1xuLVx0aW50IGVycjtcbi1cbi1cdHRlc3RfY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuLVx0aWYgKCF0ZXN0X2N0eClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBydW5uaW5nX2N0eCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4tXHRyZXR1cm4gdGVzdF9jdHg7XG4tfVxuLVxuIC8qXG4gICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXG4gICogQGtkYW1vbmQ6XHRUaGUga29iamVjdCB3cmFwcGVyIGZvciB0aGUgYXNzb2NpYXRlZCBrZGFtb25kLlxuQEAgLTIxMjcsNyArMjEwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4tXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHgsICp0ZXN0X2N0eDtcbitcdHN0cnVjdCBkYW1vbl9jdHggKnBhcmFtX2N0eDtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbkBAIC0yMTM5LDE3ICsyMTE2LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbiBcdHBhcmFtX2N0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXSk7XG4gXHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBhcmFtX2N0eCk7XG4tXHR0ZXN0X2N0eCA9IGRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCk7XG4tXHRpZiAoIXRlc3RfY3R4KSB7XG4tXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcbi1vdXQ6XG4tXHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4gXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyMzoyOS4zMjQxMTIzMTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzU0ODA0NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFJlZmFjdG9yaW5nOiBBIERlZXBlciBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXMg4oCTIGBjb3JlLmNgLCBgbHJ1X3NvcnQuY2AsIGByZWNsYWltLmNgLCBgc3lzZnMuY2AsIGFuZCBgZGFtb24uaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGZvY3VzZWQgb24gaG93IGBkYW1vbl9jb21taXRfY3R4YCB3b3Jrcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgZGFtb25fbmV3X3Rlc3RfY3R4YCBhbmQgYF9fZGFtb25fY29tbWl0X2N0eGAgaW4gYGNvcmUuY2AgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBtb3Zpbmcgc29tZSBzdHVmZiBhcm91bmQgdG8gc2VwYXJhdGUgY29uY2VybnMsIHByb2JhYmx5IGZvciBlcnJvciBoYW5kbGluZy5cblxuQnV0IHRoZW4gSSBzZWUgdGhlIHBhdGNoIGFsc28gcmVtb3ZlcyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gYSBmZXcgb2YgdGhlIGFwcGx5IHBhcmFtZXRlciBmdW5jdGlvbnMuIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnIC0gd2hlcmUncyB0aGF0IGxvZ2ljIGdvaW5nPyBJdCdzIGdvbmUgZnJvbSBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGRpZCB0aGV5IHB1dCBpdCBpbiBgX19kYW1vbl9jb21taXRfY3R4YCBvciBgZGFtb25fc2V0X3JlZ2lvbnNgPyBMZXQncyBjaGVjayB0aG9zZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgYGRhbW9uX2NvbW1pdF9jdHhgIHRvIGZpcnN0IGV4ZWN1dGUgYSBcImRyeSBydW5cIiB1c2luZyBgZGFtb25fbmV3X3Rlc3RfY3R4YCB0byB2YWxpZGF0ZSB0aGUgY29tbWl0IGJlZm9yZSBpdCBoYXBwZW5zLiBTbWFydC4gV2Ugd2FudCB0byBhdm9pZCBwYXJ0aWFsbHkgYXBwbGllZCBjaGFuZ2VzLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgdGhlIHJlbW92ZWQgYGlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opYCBjaGVjayBmcm9tIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBldmVuIGZyb20gYGRhbW9uX3N0YXJ0YCBpcyBnb25lLiBTbywgd2hlcmUgZGlkIGl0IGdvPyBMZXQncyBmaW5kIG91dCB3aGVyZSBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGxvY2F0ZWQuIEknbGwgdXNlIGBncmVwcGVyYCB0byBmaW5kIGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IGNoYW5nZSB0byBhbmFseXplLCBzbyBJIHNob3VsZCBiZSBzdXJlIHRvIGRvdWJsZSBjaGVjayBhbGwgdGhlIGFmZmVjdGVkIHNwb3RzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6MzYuMDc4OTE4ODk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTI0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NDA2PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQyNy0vKlxcbm1tL2RhbW9uL2NvcmUuYzo0Mjg6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cXG5tbS9kYW1vbi9jb3JlLmMtNDI5LSAqIEB0OlxcdFxcdHRoZSBnaXZlbiB0YXJnZXQuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0Mzk6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTQ0MC1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQ0ND1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ3My1cXHRyYW5nZXNbaSsrXS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVxcdTAwM2Vhci5lbmQ7XFxubW0vZGFtb24vY29yZS5jOjE0NzQ6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ3NS1cXHRrdmZyZWUocmFuZ2VzKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODQzPWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODU0LVxcdGFkZHJfcmFuZ2UuZW5kID0gKmVuZDtcXG5tbS9kYW1vbi9jb3JlLmM6Mzg1NTpcXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zODU2LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTk3NT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5OTYtXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTk5NzpcXHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXFx1MDAzZW5yLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5OTgtb3V0Olxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTQ0NT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDY2LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0Njc6XFx0ZGFtb25fc2V0X3JlZ2lvbnModCwgbmV3X3Jhbmdlcywgc3pfbmV3X3JhbmdlcywgbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ2OC1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9OTA9c3RhdGljIHN0cnVjdCBkYW1vbl9yZWdpb24gKl9fbnRoX3JlZ2lvbl9vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgaWR4KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMDMtLypcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjEwNDogKiBUZXN0ICdkYW1vbl9zZXRfcmVnaW9ucygpJ1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTA1LSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTExOC0gKiByZWdpb25zLiAgVGhlIHVwZGF0ZSBvZiBjdXJyZW50IHRhcmdldCByZWdpb25zIGlzIHRoZSByb2xlIG9mXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMTk6ICogJ2RhbW9uX3NldF9yZWdpb25zKCknLlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTIwLSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTEyNT1zdGF0aWMgdm9pZCBkYW1vbl9kb190ZXN0X2FwcGx5X3RocmVlX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNDctXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTQ4OlxcdGlmIChkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIG5yX3JlZ2lvbnMgLyAyLFxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ5LVxcdFxcdFxcdFxcdERBTU9OX01JTl9SRUdJT05fU1opKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1MS1cXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1MjpcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcXFwiKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1My1cXHR9XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1NS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1NjpcXHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWikpIHtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1Ny1cXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1ODpcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzZWNvbmQgZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTktXFx0fVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xOTE9c3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yMDctXFxubW0vZGFtb24vdmFkZHIuYzoyMDg6XFx0ZGFtb25fc2V0X3JlZ2lvbnModCwgcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWik7XFxubW0vZGFtb24vdmFkZHIuYy0yMDktfVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0yMjY9c3RhdGljIHZvaWQgZGFtb25fdmFfdXBkYXRlKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL3ZhZGRyLmM6MjM0OlxcdFxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjM1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6MzYuMTM1MDUxNTU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NjA3MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBDb250ZXh0IFZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gaG93IERBTU9OIGhhbmRsZXMgdmFsaWRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBzaGlmdGluZyBgZGFtb25fY29tbWl0X2N0eGAgdG8gdXNlIGEgdGVzdCBjb250ZXh0LCB3aGljaCBzb3VuZHMgbGlrZSBhIHNvbGlkIGFwcHJvYWNoIGZvciB2ZXJpZnlpbmcgY2hhbmdlcyBiZWZvcmUgdGhleSdyZSBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgSSBzZWUgdGhhdCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGEgZmV3IG90aGVyIGZ1bmN0aW9uczogYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCwgYW5kIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IFRoZSB2YWxpZGF0aW9uIGlzIG1vdmluZy4gU28gd2hlcmUgZXhhY3RseSBpcyBpdCBnb2luZz9cblxuSG1tLCB3YXMgdGhlIHZhbGlkYXRpb24gbG9naWMgbW92ZWQgdG8gYGRhbW9uX25ld190ZXN0X2N0eGAgb3IgYF9fZGFtb25fY29tbWl0X2N0eGA/IEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBsb2NhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTGV0IG1lIGp1c3QgcXVpY2tseSBqdW1wIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZGFtb25fY29tbWl0X2N0eGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NDAuMDgxMTI0ODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTIxOTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RhbW9uX2NvbW1pdF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNjM2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjY2LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjY3OnN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNjY4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzIyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3MjktXFx0XFx0cmV0dXJuIE5VTEw7XFxubW0vZGFtb24vY29yZS5jOjE3MzA6XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzMxLVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzUxPWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NTgtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE3NTk6XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzYwLVxcdGlmIChlcnIpXFxubW0vZGFtb24vY29yZS5jLTE3NjEtXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vY29yZS5jOjE3NjI6XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTc2My1vdXQ6XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg0Nj1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NjctXFxubW0vZGFtb24vY29yZS5jOjE4Njg6c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODY5LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4ODU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg5Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTg5NzpcXHRcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0xODk4LVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NDAuNDUyMzQ5NzY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MzEwMzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgdGhlIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCBob2xkIG9uLiBJJ20ganVzdCBxdWlja2x5IHRyeWluZyB0byB0cmFjZSB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIGZvciBgaXNfcG93ZXJfb2ZfMihwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeilgLiBXaGVyZSBkaWQgdGhhdCBsb2dpYyBlbmQgdXA/IEkgcmVtZW1iZXIgc2VlaW5nIGl0IHNvbWV3aGVyZS4gTGV0IG1lIGp1bXAgaW50byB0aGUgYF9fZGFtb25fY29tbWl0X2N0eGAgaW1wbGVtZW50YXRpb247IEkgdGhpbmsgdGhhdCdzIHRoZSBwbGFjZSBpdCB3b3VsZCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY2hlY2sgaXMgaW4gcGxhY2UsIGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjQzLjAwNTQ1NTY1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY2NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2Njc6XFx0c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuMTY2ODpcXHR7XFxuMTY2OTpcXHRcXHRpbnQgZXJyO1xcbjE2NzA6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMTY3MTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4xNjcyOlxcdFxcbjE2NzM6XFx0XFx0ZHN0LVxcdTAwM2VtYXliZV9jb3JydXB0ZWQgPSB0cnVlO1xcbjE2NzQ6XFx0XFx0aWYgKCFpc19wb3dlcl9vZl8yKHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMTY3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjc2OlxcdFxcbjE2Nzc6XFx0XFx0Lyogbm9kZV9lbGlnaWJsZV9tZW1fYnAgbWV0cmljIHJlcXVpcmVzIFBBRERSIG9wcyAqL1xcbjE2Nzg6XFx0XFx0aWYgKHNyYy1cXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xcbjE2Nzk6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxuMTY4MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGE7XFxuMTY4MTpcXHRcXG4xNjgyOlxcdFxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG4xNjgzOlxcdFxcdFxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT1cXG4xNjg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQKVxcbjE2ODU6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTY4NjpcXHRcXHRcXHRcXHR9XFxuMTY4NzpcXHRcXHRcXHR9XFxuMTY4ODpcXHRcXHR9XFxuMTY4OTpcXHRcXG4xNjkwOlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcXG4xNjkxOlxcdFxcdGlmIChlcnIpXFxuMTY5MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2OTM6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xcbjE2OTQ6XFx0XFx0aWYgKGVycilcXG4xNjk1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTY5NjpcXHRcXHQvKlxcbjE2OTc6XFx0XFx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2VcXG4xNjk4OlxcdFxcdCAqIDEuIGRhbW9uX3NldF9hdHRycygpIHVwZGF0ZXMgbW9uaXRvcmluZyByZXN1bHRzIG9mIHRhcmdldHMgYW5kXFxuMTY5OTpcXHRcXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4xNzAwOlxcdFxcdCAqIDIuIG9wcyB1cGRhdGUgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgcGlkIGhhbmRsaW5nIGlzIGRvbmUgKHRhcmdldFxcbjE3MDE6XFx0XFx0ICogICAgY29tbWl0dGluZyByZXF1aXJlIHB1dHRpbmcgcGlkcykuXFxuMTcwMjpcXHRcXHQgKi9cXG4xNzAzOlxcdFxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG4xNzA0OlxcdFxcdFxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFxcdTAwMjZzcmMtXFx1MDAzZWF0dHJzKTtcXG4xNzA1OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNzA2OlxcdFxcdFxcdFxcdGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhkc3QsIE5VTEwsIHNyYyk7XFxuMTcwNzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE3MDg6XFx0XFx0XFx0fVxcbjE3MDk6XFx0XFx0fVxcbjE3MTA6XFx0XFx0ZHN0LVxcdTAwM2VwYXVzZSA9IHNyYy1cXHUwMDNlcGF1c2U7XFxuMTcxMTpcXHRcXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbjE3MTI6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuMTcxMzpcXHRcXHRpZiAoZXJyKVxcbjE3MTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNzE1OlxcdFxcdGRzdC1cXHUwMDNlYWRkcl91bml0ID0gc3JjLVxcdTAwM2VhZGRyX3VuaXQ7XFxuMTcxNjpcXHRcXHRkc3QtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSBzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3o7XFxuMTcxNzpcXHRcXG4xNzE4OlxcdFxcdGRzdC1cXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gZmFsc2U7XFxuMTcxOTpcXHRcXHRyZXR1cm4gMDtcXG4xNzIwOlxcdH1cXG4xNzIxOlxcdFxcbjE3MjI6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuMTcyMzpcXHR7XFxuMTcyNDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICp0ZXN0X2N0eDtcXG4xNzI1OlxcdFxcdGludCBlcnI7XFxuMTcyNjpcXHRcXG4xNzI3OlxcdFxcdHRlc3RfY3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbjE3Mjg6XFx0XFx0aWYgKCF0ZXN0X2N0eClcXG4xNzI5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3MzA6XFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBkc3QpO1xcbjE3MzE6XFx0XFx0aWYgKGVycikge1xcbjE3MzI6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgodGVzdF9jdHgpO1xcbjE3MzM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTczNDpcXHRcXHR9XFxuMTczNTpcXHRcXHRyZXR1cm4gdGVzdF9jdHg7XFxuMTczNjpcXHR9XFxuMTczNzpcXHRcXG4xNzM4OlxcdC8qKlxcbjE3Mzk6XFx0ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXFxuMTc0MDpcXHQgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4xNzQxOlxcdCAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cXG4xNzQyOlxcdCAqXFxuMTc0MzpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcXG4xNzQ0OlxcdCAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb25cXG4xNzQ1OlxcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcXG4xNzQ2OlxcdCAqIGluLXBsYWNlIHVwZGF0ZXMuXFxuMTc0NzpcXHQgKlxcbjE3NDg6XFx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuMTc0OTpcXHQgKiBkYW1vbl9jYWxsKCkuXFxuMTc1MDpcXHQgKi9cXG4xNzUxOlxcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbjE3NTI6XFx0e1xcbjE3NTM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqdGVzdF9jdHg7XFxuMTc1NDpcXHRcXHRpbnQgZXJyO1xcbjE3NTU6XFx0XFxuMTc1NjpcXHRcXHR0ZXN0X2N0eCA9IGRhbW9uX25ld190ZXN0X2N0eChkc3QpO1xcbjE3NTc6XFx0XFx0aWYgKCF0ZXN0X2N0eClcXG4xNzU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3NTk6XFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBzcmMpO1xcbjE3NjA6XFx0XFx0aWYgKGVycilcXG4xNzYxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3NjI6XFx0XFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKTtcXG4xNzYzOlxcdG91dDpcXG4xNzY0OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4xNzY1OlxcdFxcdHJldHVybiBlcnI7XFxuMTc2NjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjQzLjAwNTY3ODcxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTM2OTI3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkNoZWNraW5nIERBTU9OIFJlZ2lvbiBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IHRoZSBgX19kYW1vbl9jb21taXRfY3R4YCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjazogYGlmICghaXNfcG93ZXJfb2ZfMihzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHJldHVybiAtRUlOVkFMO2AuIFNtYXJ0IG1vdmUuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbWluaW11bSByZWdpb24gc2l6ZSBpcyBhIHBvd2VyIG9mIHR3bzsgdGhhdCdzIGZ1bmRhbWVudGFsIGZvciBEQU1PTidzIG9wZXJhdGlvbi4gTm8gc3VycHJpc2VzIHRoZXJlLCBidXQgZ29vZCB0byBoYXZlIGV4cGxpY2l0IHZhbGlkYXRpb24uXG5cblRoZW4sIGxvb2tpbmcgYXQgYGRhbW9uX3NldF9yZWdpb25zYCwgSSBzcG90IGBpZiAoc3RhcnQgXHUwMDNlIGVuZCkgcmV0dXJuIC1FSU5WQUw7YC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UgY2FuJ3QgaGF2ZSBhIHN0YXJ0IGFkZHJlc3MgdGhhdCdzICphZnRlciogdGhlIGVuZCBhZGRyZXNzLCBpdCdkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGlzc3Vlcy4gU2ltcGxlLCBidXQgY3JpdGljYWwgZm9yIHRoZSBmdW5jdGlvbidzIGludGVncml0eS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGRhbW9uX3NldF9yZWdpb25zYCBmdW5jdGlvbiBpdHNlbGYuIExldCBtZSBuYXZpZ2F0ZSB0byBgbW0vZGFtb24vY29yZS5jYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgZGV0YWlscyBJJ20gbWlzc2luZy4gQWx3YXlzIGdvb2QgdG8gaGF2ZSBhIHRob3JvdWdoIGxvb2sgYXQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50IHRoYXQgd2UncmUgcHJvcGVybHkgcHJvdGVjdGluZyBhZ2FpbnN0IHRoZSBvYnZpb3VzLCBhbmQgbWF5YmUgZXZlbiBzb21lIG9mIHRoZSBsZXNzIG9idmlvdXMsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NDYuODU5MzczMDI5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyODpcXHQgKiBkYW1vbl9zZXRfcmVnaW9ucygpIC0gU2V0IHJlZ2lvbnMgb2YgYSB0YXJnZXQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2VzLlxcbiA0Mjk6XFx0ICogQHQ6XFx0XFx0dGhlIGdpdmVuIHRhcmdldC5cXG4gNDMwOlxcdCAqIEByYW5nZXM6XFx0YXJyYXkgb2YgbmV3IG1vbml0b3JpbmcgdGFyZ2V0IHJhbmdlcy5cXG4gNDMxOlxcdCAqIEBucl9yYW5nZXM6XFx0bGVuZ3RoIG9mIEByYW5nZXMuXFxuIDQzMjpcXHQgKiBAbWluX3JlZ2lvbl9zejpcXHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxcbiA0MzM6XFx0ICpcXG4gNDM0OlxcdCAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgcmVnaW9ucyB0bywgb3IgbW9kaWZ5IGV4aXN0aW5nIHJlZ2lvbnMgb2YgYVxcbiA0MzU6XFx0ICogbW9uaXRvcmluZyB0YXJnZXQgdG8gZml0IGluIHNwZWNpZmljIHJhbmdlcy5cXG4gNDM2OlxcdCAqXFxuIDQzNzpcXHQgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuIDQzODpcXHQgKi9cXG4gNDM5OlxcdGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbiA0NDA6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbiA0NDE6XFx0e1xcbiA0NDI6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7XFxuIDQ0MzpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gNDQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9lbmQ7XFxuIDQ0NTpcXHRcXHRpbnQgZXJyO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4gNDQ4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0XFx0c3RhcnQgPSBBTElHTl9ET1dOKHJhbmdlc1tpXS5zdGFydCwgbWluX3JlZ2lvbl9zeik7XFxuIDQ1MTpcXHRcXHRcXHRlbmQgPSBBTElHTihyYW5nZXNbaV0uZW5kLCBtaW5fcmVnaW9uX3N6KTtcXG4gNDUyOlxcdFxcdFxcdGlmIChzdGFydCBcXHUwMDNlPSBlbmQpXFxuIDQ1MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDU0OlxcdFxcdFxcdGlmIChpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsYXN0X2VuZCBcXHUwMDNlIHN0YXJ0KVxcbiA0NTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1NjpcXHRcXHRcXHRsYXN0X2VuZCA9IGVuZDtcXG4gNDU3OlxcdFxcdH1cXG4gNDU4OlxcdFxcbiA0NTk6XFx0XFx0LyogUmVtb3ZlIHJlZ2lvbnMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgbmV3IHJhbmdlcyAqL1xcbiA0NjA6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUociwgbmV4dCwgdCkge1xcbiA0NjE6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XFxuIDQ2MjpcXHRcXHRcXHRcXHRpZiAoZGFtb25faW50ZXJzZWN0KHIsIFxcdTAwMjZyYW5nZXNbaV0pKVxcbiA0NjM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NDpcXHRcXHRcXHR9XFxuIDQ2NTpcXHRcXHRcXHRpZiAoaSA9PSBucl9yYW5nZXMpXFxuIDQ2NjpcXHRcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcXG4gNDY3OlxcdFxcdH1cXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0aWYgKCFkYW1vbl9ucl9yZWdpb25zKHQpKSB7XFxuIDQ3MDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4gNDcxOlxcdFxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKFxcbiA0NzI6XFx0XFx0XFx0XFx0XFx0XFx0QUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsXFxuIDQ3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtaW5fcmVnaW9uX3N6KSxcXG4gNDc0OlxcdFxcdFxcdFxcdFxcdFxcdEFMSUdOKHJhbmdlc1tpXS5lbmQsIG1pbl9yZWdpb25fc3opKTtcXG4gNDc1OlxcdFxcdFxcdFxcdGlmICghcilcXG4gNDc2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0Nzc6XFx0XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4gNDc4OlxcdFxcdFxcdH1cXG4gNDc5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0ODA6XFx0XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRyID0gZGFtb25fZmlyc3RfcmVnaW9uKHQpO1xcbiA0ODM6XFx0XFx0LyogQWRkIG5ldyByZWdpb25zIG9yIHJlc2l6ZSBleGlzdGluZyByZWdpb25zIHRvIGZpdCBpbiB0aGUgcmFuZ2VzICovXFxuIDQ4NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2VzOyBpKyspIHtcXG4gNDg1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0ID0gTlVMTCwgKmxhc3QsICpuZXdyO1xcbiA0ODY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlO1xcbiA0ODc6XFx0XFx0XFx0Ym9vbCBpbnNlcnRfYmVmb3JlX3IgPSBmYWxzZTtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0XFx0cmFuZ2UgPSBcXHUwMDI2cmFuZ2VzW2ldO1xcbiA0OTA6XFx0XFx0XFx0LyogR2V0IHRoZSBmaXJzdC9sYXN0IHJlZ2lvbnMgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHJhbmdlICovXFxuIDQ5MTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fZnJvbShyLCB0KSB7XFxuIDQ5MjpcXHRcXHRcXHRcXHRpZiAoZGFtb25faW50ZXJzZWN0KHIsIHJhbmdlKSkge1xcbiA0OTM6XFx0XFx0XFx0XFx0XFx0aWYgKCFmaXJzdClcXG4gNDk0OlxcdFxcdFxcdFxcdFxcdFxcdGZpcnN0ID0gcjtcXG4gNDk1OlxcdFxcdFxcdFxcdFxcdGxhc3QgPSByO1xcbiA0OTY6XFx0XFx0XFx0XFx0fVxcbiA0OTc6XFx0XFx0XFx0XFx0aWYgKHItXFx1MDAzZWFyLnN0YXJ0IFxcdTAwM2U9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdGluc2VydF9iZWZvcmVfciA9IHRydWU7XFxuIDQ5OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTAwOlxcdFxcdFxcdFxcdH1cXG4gNTAxOlxcdFxcdFxcdH1cXG4gNTAyOlxcdFxcdFxcdGlmICghZmlyc3QpIHtcXG4gNTAzOlxcdFxcdFxcdFxcdC8qIG5vIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhpcyByYW5nZSAqL1xcbiA1MDQ6XFx0XFx0XFx0XFx0bmV3ciA9IGRhbW9uX25ld19yZWdpb24oXFxuIDUwNTpcXHRcXHRcXHRcXHRcXHRcXHRBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VzdGFydCxcXG4gNTA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1pbl9yZWdpb25fc3opLFxcbiA1MDc6XFx0XFx0XFx0XFx0XFx0XFx0QUxJR04ocmFuZ2UtXFx1MDAzZWVuZCwgbWluX3JlZ2lvbl9zeikpO1xcbiA1MDg6XFx0XFx0XFx0XFx0aWYgKCFuZXdyKVxcbiA1MDk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDUxMDpcXHRcXHRcXHRcXHRpZiAoaW5zZXJ0X2JlZm9yZV9yKVxcbiA1MTE6XFx0XFx0XFx0XFx0XFx0ZGFtb25faW5zZXJ0X3JlZ2lvbihuZXdyLCBkYW1vbl9wcmV2X3JlZ2lvbihyKSxcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHIsIHQpO1xcbiA1MTM6XFx0XFx0XFx0XFx0ZWxzZVxcbiA1MTQ6XFx0XFx0XFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihuZXdyLCB0KTtcXG4gNTE1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDUxNjpcXHRcXHRcXHRcXHQvKiByZXNpemUgaW50ZXJzZWN0aW5nIHJlZ2lvbnMgdG8gZml0IGluIHRoaXMgcmFuZ2UgKi9cXG4gNTE3OlxcdFxcdFxcdFxcdGZpcnN0LVxcdTAwM2Vhci5zdGFydCA9IEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZXN0YXJ0LFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0XFx0bWluX3JlZ2lvbl9zeik7XFxuIDUxOTpcXHRcXHRcXHRcXHRsYXN0LVxcdTAwM2Vhci5lbmQgPSBBTElHTihyYW5nZS1cXHUwMDNlZW5kLCBtaW5fcmVnaW9uX3N6KTtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0XFx0XFx0LyogZmlsbCBwb3NzaWJsZSBob2xlcyBpbiB0aGUgcmFuZ2UgKi9cXG4gNTIyOlxcdFxcdFxcdFxcdGVyciA9IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhmaXJzdCwgbGFzdCwgdCk7XFxuIDUyMzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbiA1MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTI1OlxcdFxcdFxcdH1cXG4gNTI2OlxcdFxcdH1cXG4gNTI3OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyMzo0Ni44NTk2MDU1MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4MDY2MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBgZGFtb25fc2V0X3JlZ2lvbnNgIGhhcyBiZWVuIHVwZGF0ZWQuXCIgSSBzZWUgdGhlIGNydWNpYWwgbG9vcDpcblxuYGBgY1xuXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlczsgaSsrKSB7XG5cdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG5cblx0XHRcdHN0YXJ0ID0gQUxJR05fRE9XTihyYW5nZXNbaV0uc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuXHRcdFx0ZW5kID0gQUxJR04ocmFuZ2VzW2ldLmVuZCwgbWluX3JlZ2lvbl9zeik7XG5cdFx0XHRpZiAoc3RhcnQgXHUwMDNlPSBlbmQpXG5cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdFx0aWYgKGkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxhc3RfZW5kIFx1MDAzZSBzdGFydClcblx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdFx0XHRsYXN0X2VuZCA9IGVuZDtcblx0XHR9XG5gYGBcblxuSXQncyBjbGVhciBub3cgdGhhdCB0aGUgY29kZSAqZXhwbGljaXRseSogdmFsaWRhdGVzIHRoYXQgdGhlIHN0YXJ0IGlzICpub3QqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZW5kLCBlbnN1cmluZyBhIHZhbGlkIHJlZ2lvbi4gVGhhdCdzIGdvb2QsIGVmZmljaWVudC4gSXQgbWFrZXMgc2Vuc2Ugd2h5IHRoZXkgcmVtb3ZlZCB0aGUgcmVkdW5kYW50IGNoZWNrcyAoYGlmICgqc3RhcnQgXHUwMDNlICplbmQpYCBpbiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBhbmQgYHN5c19yZWdpb24tXHUwMDNlYXIuc3RhcnQgXHUwMDNlIHN5c19yZWdpb24tXHUwMDNlYXIuZW5kYCBpbiBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgKSDigJMgYGRhbW9uX3NldF9yZWdpb25zYCBpcyBoYW5kbGluZyB0aGUgdmFsaWRhdGlvbiwgbWFraW5nIHRoZSBvdGhlciBjaGVja3MgdW5uZWNlc3NhcnkuIENsZWFuZXIgY29kZSBpcyBhbHdheXMgd2VsY29tZS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgZGFtb25fY29tbWl0X2N0eGAuIEl0J3Mgbm93IHRlc3RpbmcgZm9yIGNoYW5nZXMgKmJlZm9yZSogY29tbWl0dGluZyB0aGVtLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbiBpbiB0aGUgREFNT04gYXJjaGl0ZWN0dXJlLiBHb29kIG9uIHRoZW0gZm9yIHRoYXQuIFNpbWlsYXJseSwgYGRhbW9uX3N0YXJ0YCBpcyBub3cgZG9pbmcgdGhlIHNhbWUgdGhpbmc6IHRlc3RpbmcgZm9yIGNoYW5nZXMgYmVmb3JlIHN0YXJ0aW5nLiBUaGF0J3MgYWxzbyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQuXG5cbk5vdywgSSdtIHRoaW5raW5nLCBcIk9rYXksIGdpdmVuIHRoZXNlIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgREFNT04/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgc2V0dGluZyB1cCB0aGUgc3lzdGVtIGZvciBEQU1PTi5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjU0Ljc0MDI3MDIyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NTgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyMzo1NC44MDE5MzMyNjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTY5ODc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgU2NvcGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuIEkgc2VlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AuIFRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHF1aXRlIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBmaWxlcyBhZmZlY3RlZCwgSSdtIGdvaW5nIHRvIG5lZWQgdG8gY29uc2lkZXIgYERBTU9OYCwgYERBTU9OX0xSVV9TT1JUYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX1NZU0ZTYCBvcHRpb25zLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYG1tL2RhbW9uL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjIzOjU4LjQzMTYzNTE2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjM6NTguNDMxNzAzOTE5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTc4NzMwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEZWR1Y2luZyBCdWlsZCBSZWxhdGlvbnNoaXBzIGluIGEgS2VybmVsIE1vZHVsZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgREFNT05gIGhlcmUuLi4gaXQgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRpcmVjdGx5IHByb2R1Y2VzIGBjb3JlLm9gLiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgYSBkaXJlY3QgbGluaywgYnV0IHRoYXQncyBub3Qgd2hhdCBJJ20gc2VlaW5nLlxuXG5Ib2xkIG9uLCBsZXQgbWUgdHJhY2UgdGhpcy4uLiB3aGVyZSBkb2VzIGBEQU1PTmAgZ2V0IGJyb3VnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcz8gQWggaGEhIEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gQW5kIHRoYXQgYE1ha2VmaWxlYCBpcyBpbmNsdWRlZCBmcm9tIGBtbS9NYWtlZmlsZWAuLi4gdGhhdCdzIHRoZSBjb25uZWN0aW9uISBTbyBpdCdzIGJlaW5nIGluY29ycG9yYXRlZCBoaWdoZXIgdXAgdGhlIGJ1aWxkIGhpZXJhcmNoeS4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluY2x1c2lvbiBpbiBgbW0vTWFrZWZpbGVgIHdvcmtzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGBEQU1PTmAgaW5mbHVlbmNlcyB0aGUgY3JlYXRpb24gb2YgYGNvcmUub2AsIGFuZCBvdGhlciByZWxhdGVkIG9iamVjdHMuIE5vdyBJIGhhdmUgYSBzdGFydGluZyBwb2ludCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjQ6MDEuOTg5NTc5NTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc3Nzc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzQ9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM1Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM2LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjoyNDowMi4wNDYzNjcwOTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4MjYzODc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBLZXkgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgcGF0Y2ggcmVsYXRlZCB0byBEQU1PTi4gSXQncyBjbGVhciB0aGF0IGVuYWJsaW5nIGBDT05GSUdfREFNT05gIHdpbGwgYnJpbmcgaW4gdGhlIGVudGlyZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuICBBbmQsIGlmIEkgZW5hYmxlIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBhbmQgYENPTkZJR19EQU1PTl9MUlVfU09SVGAsIEknbSBnb2luZyB0byBnZXQgYHN5c2ZzLm9gLCBgcmVjbGFpbS5vYCwgYW5kIGBscnVfc29ydC5vYCBidWlsdCwgcmVzcGVjdGl2ZWx5LiAgVGhlcmVmb3JlLCB0byBnZXQgdGhlIGZ1bGwgREFNT04gc3VpdGUsIEkgZGVmaW5pdGVseSBuZWVkIHRvIHNldCBhbGwgb2YgdGhvc2UgLSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgIHRvICd5Jy5cblxuTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nPyAgTGV0J3Mgc2Vl4oCmIEknbSBub3RpY2luZyBtb2RpZmljYXRpb25zIHRvIGBkYW1vbl9jb21taXRfY3R4YCwgYF9fZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9uZXdfdGVzdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCwgYW5kIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLlxuXG5Db25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyB0byBmb2N1cyBvbiBoZXJlIGFyZSBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGguXG5cbkkgd2FudCB0byBjaGVjayBob3cgdGhvc2UgYHN5c2ZzYCBmdW5jdGlvbnMgd29yaywgc2luY2UgdGhleSBhcmUgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgdGhlIERBTU9OIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpcyBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCByZWFjaGFibGU/IFllcywgaXQncyBhIHN5c2ZzIGNhbGxiYWNrLiBBbmQgdGhlIHNhbWUgZm9yIGBkYW1vbl9zeXNmc19zZXRfcmVnaW9uc2AgLSBhbm90aGVyIHN5c2ZzIGNhbGxiYWNrLiBBbmQgdGhvc2UgYXBwbHkgcGFyYW1ldGVycyBmdW5jdGlvbnMgZm9yIGxydSBhbmQgcmVjbGFpbSBhcmUgcHJvYmFibHkgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFja3Mgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIEkgd2lsbCBsb29rIGF0IHRvby5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjQ6MDkuMTI5MDA5MTM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgwMzA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3MC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3Mi17XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQzLXtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0NDpcXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ1LX1cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MTQtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTU6XFx0ZXJyID0gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjI0OjA5LjE4NTgxNzQ0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg5NjkzNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTiBQYXJhbWV0ZXIgQXBwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgREFNT04gcGFyYW1ldGVycyBhcmUgYXBwbGllZC4gSSBzZWUgdGhhdCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgZ2V0cyBjYWxsZWQgdGhyb3VnaCB0aGUgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIGFuZCB0aGUgYGRhbW9uX2xydV9zb3J0X3R1cm5gIGZ1bmN0aW9ucy4gVGhhdCdzIGdvb2QgdG8ga25vdywgaXQgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRoLiBTaW1pbGFyIHByb2Nlc3NlcyBtdXN0IGV4aXN0IGZvciBvdGhlciBjb21wb25lbnRzLCBmb3IgZXhhbXBsZSBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC5cblxuSSB3YW50IHRvIHNlZSAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBjb21taXR0ZWQuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBmdW5jdGlvbiwgYXMgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIGZvciB0aGUgZmluYWwgcGFyYW1ldGVyIGFwcGxpY2F0aW9uIHRvIG9jY3VyLiBJJ2xsIHN0YXJ0IHdpdGggdGhhdCBvbmUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjI0OjE0LjM3NTUxMzk1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3NjEwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfY29tbWl0X2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMDk1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwOTgtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIwOTk6ICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxubW0vZGFtb24vc3lzZnMuYy0yMTAwLSAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDMtICovXFxubW0vZGFtb24vc3lzZnMuYzoyMTA0OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxubW0vZGFtb24vc3lzZnMuYy0yMTA1LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjMzNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzQ4LVxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM0OTpcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM1MC1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6MjQ6MTQuNDMzMjgyNTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMzAzMTYyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmU7IGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBgc3lzZnNgIGNvbW1hbmRzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuIEZ1bmN0aW9uYWxseSwgaXQgbG9va3Mgc29saWQuIFRoZSBhZGRpdGlvbiBvZiBhIHRlc3QgY29udGV4dCBjcmVhdGlvbiBiZWZvcmUgY29tbWl0dGluZyBwYXJhbWV0ZXJzIGlzIGEgc21hcnQgbW92ZS4gVGhpcyBwcm9hY3RpdmUgdmFsaWRhdGlvbiBzaG91bGQgcHJldmVudCB0aG9zZSBuYXN0eSBwYXJ0aWFsIHVwZGF0ZXMgb3IgaW52YWxpZCBzdGF0ZXMgdGhhdCBjYW4gYmUgc3VjaCBhIGhlYWRhY2hlLlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBkZWVwZXIgYW5hbHlzaXMgYW5kIHRlc3RpbmcuIEknbGwgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCwgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIFRoZXNlIGFyZSBvYnZpb3VzbHkgdGhlIGNvcmUgZWxlbWVudHMuXG5cbkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIHRoZSBleHBlY3RlZCBvbmVzOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBIb3dldmVyLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIHJlbGV2YW50LiBUaGlua2luZyB0aHJvdWdoIGhvdyB0aGlzIG1pZ2h0IHdvcmssIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgcHJvYmFibHkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHkgdG8gaGF2ZSBhbiBlZmZlY3QuIFdoaWxlIHRoZSBjb3JlIGxvZ2ljIGlzIGluIGBEQU1PTmAsIHRob3NlIHR3byBjb25maWdzIGFyZSBmdW5kYW1lbnRhbCB0byBkb2luZywgd2VsbCwgYW55dGhpbmcuIEknbGwgaW5jbHVkZSBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIGluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGludm9sdmUgdGhlIGNvcmUgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MzIsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjI0OjIwLjY2MzYwMTIwOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDc4NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc3lzZnNfY29tbWl0X2lucHV0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcmVnaW9uc1wiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc1wiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gY29udGV4dCBjb21taXQgbG9naWMgdG8gdXNlIGEgdGVzdCBjb250ZXh0IHRvIHZhbGlkYXRlIGNoYW5nZXMgYmVmb3JlIGFwcGx5aW5nIHRoZW0uIEl0IGFsc28gcmVtb3ZlcyB2YWxpZGF0aW9uIGxvZ2ljIGZyb20gdmFyaW91cyBjYWxsZXJzIGFuZCByZWxpZXMgb24gdGhlIGNvcmUgdmFsaWRhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NldF9yZWdpb25zXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBjb250ZXh0IGNvbW1pdCBsb2dpYyB0byB1c2UgYSB0ZXN0IGNvbnRleHQgdG8gdmFsaWRhdGUgY2hhbmdlcyBiZWZvcmUgYXBwbHlpbmcgdGhlbS4gSXQgYWxzbyByZW1vdmVzIHZhbGlkYXRpb24gbG9naWMgZnJvbSB2YXJpb3VzIGNhbGxlcnMgYW5kIHJlbGllcyBvbiB0aGUgY29yZSB2YWxpZGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowdsjk8[1] Phase: Succeeded StartedAt: 2026-07-05 16:24:32 +0000 UTC FinishedAt: 2026-07-05 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-05 16:24:32 +0000 UTC FinishedAt: 2026-07-05 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2] Phase: Succeeded StartedAt: 2026-07-05 16:24:32 +0000 UTC FinishedAt: 2026-07-05 20:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:24:32 +0000 UTC FinishedAt: 2026-07-05 20:34:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:24:32 +0000 UTC FinishedAt: 2026-07-05 16:24:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:24:32 +0000 UTC FinishedAt: 2026-07-05 16:24:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"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-workflowdsjk8/series-workflowdsjk8-convert-artifact-1411297811/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:24:43 +0000 UTC FinishedAt: 2026-07-05 16:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:24:43 +0000 UTC FinishedAt: 2026-07-05 16:47:39 +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:*1ebf599e-3937-4d1e-ae60-94d1fc8c0451,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-workflowdsjk8/series-workflowdsjk8-convert-artifact-1411297811/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": "7fa94337-fc79-4f3c-980f-8684ccc546c1", "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-workflowdsjk8/series-workflowdsjk8-build-action-561172289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:24:43 +0000 UTC FinishedAt: 2026-07-05 16:47:29 +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:*1ebf599e-3937-4d1e-ae60-94d1fc8c0451,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-workflowdsjk8/series-workflowdsjk8-convert-artifact-1411297811/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": "7fa94337-fc79-4f3c-980f-8684ccc546c1", "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-workflowdsjk8/series-workflowdsjk8-build-action-561172289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:47:39 +0000 UTC FinishedAt: 2026-07-05 16:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:47:39 +0000 UTC FinishedAt: 2026-07-05 16:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:47:39 +0000 UTC FinishedAt: 2026-07-05 16:47:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:47:39 +0000 UTC FinishedAt: 2026-07-05 16:47:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-workflowdsjk8/series-workflowdsjk8-convert-artifact-2587625738/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:47:50 +0000 UTC FinishedAt: 2026-07-05 16:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:47:50 +0000 UTC FinishedAt: 2026-07-05 16:49:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7fa94337-fc79-4f3c-980f-8684ccc546c1,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-workflowdsjk8/series-workflowdsjk8-build-action-561172289/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-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:49:43 +0000 UTC FinishedAt: 2026-07-05 16:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:49:43 +0000 UTC FinishedAt: 2026-07-05 16:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:49:43 +0000 UTC FinishedAt: 2026-07-05 17:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:49:43 +0000 UTC FinishedAt: 2026-07-05 17:29:08 +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:*1ebf599e-3937-4d1e-ae60-94d1fc8c0451,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-workflowdsjk8/series-workflowdsjk8-convert-artifact-2587625738/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": "4113865d-eeae-40b2-bbc2-5286e5d66863", "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-workflowdsjk8/series-workflowdsjk8-build-action-2776319790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 16:49:43 +0000 UTC FinishedAt: 2026-07-05 17:28:58 +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:*1ebf599e-3937-4d1e-ae60-94d1fc8c0451,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-workflowdsjk8/series-workflowdsjk8-convert-artifact-2587625738/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": "4113865d-eeae-40b2-bbc2-5286e5d66863", "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-workflowdsjk8/series-workflowdsjk8-build-action-2776319790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:29:08 +0000 UTC FinishedAt: 2026-07-05 17:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:29:08 +0000 UTC FinishedAt: 2026-07-05 17:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:29:08 +0000 UTC FinishedAt: 2026-07-05 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:29:08 +0000 UTC FinishedAt: 2026-07-05 17:31:28 +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:*4113865d-eeae-40b2-bbc2-5286e5d66863,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-workflowdsjk8/series-workflowdsjk8-build-action-2776319790/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-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 20:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 20:34:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"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:*7fa94337-fc79-4f3c-980f-8684ccc546c1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4113865d-eeae-40b2-bbc2-5286e5d66863,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-workflowdsjk8/series-workflowdsjk8-build-action-561172289/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-workflowdsjk8/series-workflowdsjk8-build-action-2776319790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 17:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 17:31:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"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-workflowdsjk8/series-workflowdsjk8-convert-artifact-1126303903/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:38 +0000 UTC FinishedAt: 2026-07-05 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:48 +0000 UTC FinishedAt: 2026-07-05 20:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsjk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_sysfs_commit_input","damon_sysfs_set_regions","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4494b1f25c06ac74bb46166f19bb13ec21d08bbd","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_VADDR","DAMON_PADDR"],"series_id":"ba8ee1e1-e4e9-4169-88e3-73372068e035","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-07-05 17:31:48 +0000 UTC FinishedAt: 2026-07-05 20:34:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7fa94337-fc79-4f3c-980f-8684ccc546c1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4113865d-eeae-40b2-bbc2-5286e5d66863,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-workflowdsjk8/series-workflowdsjk8-build-action-561172289/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-workflowdsjk8/series-workflowdsjk8-build-action-2776319790/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-workflowdsjk8/series-workflowdsjk8-convert-artifact-1126303903/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,}