Name: series-workflowdzdhm Phase: Succeeded StartedAt: 2026-08-04 07:08:36 +0000 UTC FinishedAt: 2026-08-04 09:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[0] Phase: Succeeded StartedAt: 2026-08-04 07:08:36 +0000 UTC FinishedAt: 2026-08-04 08:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 07:08:36 +0000 UTC FinishedAt: 2026-08-04 08:11:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ff226ef519115e017dbcebb0ef1142081f449b95", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ff226ef519115e017dbcebb0ef1142081f449b95", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXFS_FS" ], "series_id": "a8befdeb-27d9-42f0-804f-0921e93f01e5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vxfs_lookup", "vxfs_readdir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGZzX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt2eGZzX3JlYWRkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gZnJlZXZ4ZnMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJlMDM0NTdjMGQwNTA2MzBhNzEzM2JjNDg4NTMwNDMyN2M3MGMwMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA4OjEwOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXG5pbmRleCAxMzhlMDhkZTk3NmVhLi41MGM0MjhjNjMxMjYyIDEwMDY0NFxuLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY1xuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXG4gXG4gXHRcdHdoaWxlIChwZ19vZnMgXHUwMDNjIFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgcG9zIFx1MDAzYyBsaW1pdCkge1xuIFx0XHRcdHN0cnVjdCB2eGZzX2RpcmVjdCAqZGU7XG4mIzQzO1x0XHRcdGludCByZWNsZW4sIG5sZW47XG4gXG4gXHRcdFx0aWYgKChwb3MgXHUwMDI2IChic2l6ZSAtIDEpKSBcdTAwM2MgNCkge1xuIFx0XHRcdFx0c3RydWN0IHZ4ZnNfZGlyYmxrICpkYnAgPVxuQEAgLTg3LDYgJiM0Mzs4OCwxNCBAQCB2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKVxuIFxuIFx0XHRcdFx0cG9zICYjNDM7PSBvdmVyaGVhZDtcbiBcdFx0XHRcdHBnX29mcyAmIzQzOz0gb3ZlcmhlYWQ7XG4mIzQzO1x0XHRcdFx0aWYgKHBnX29mcyBcdTAwM2U9IFBBR0VfU0laRSlcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHQvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovXG4mIzQzO1x0XHRcdGlmIChwZ19vZnMgJiM0MzsgVlhGU19OQU1FTUlOIFx1MDAzZSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mcztcbiYjNDM7XHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0ZGUgPSAoc3RydWN0IHZ4ZnNfZGlyZWN0ICopKGthZGRyICYjNDM7IHBnX29mcyk7XG4gXG5AQCAtOTYsMTIgJiM0MzsxMDUsMjUgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRwZ19vZnMgJiM0Mzs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuLVx0XHRcdHBvcyAmIzQzOz0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4mIzQzO1x0XHRcdC8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqL1xuJiM0MztcdFx0XHRyZWNsZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJlY2xlbiBcdTAwM2MgVlhGU19OQU1FTUlOIHx8XG4mIzQzO1x0XHRcdCAgICBwZ19vZnMgJiM0MzsgcmVjbGVuIFx1MDAzZSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mcztcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cGdfb2ZzICYjNDM7PSByZWNsZW47XG4mIzQzO1x0XHRcdHBvcyAmIzQzOz0gcmVjbGVuO1xuIFx0XHRcdGlmICghZGUtXHUwMDNlZF9pbm8pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAobmFtZWxlbiAhPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbikpXG4mIzQzO1x0XHRcdC8qIHRoZSBuYW1lIG11c3QgZml0IGluIHRoZSByZWNvcmQgKi9cbiYjNDM7XHRcdFx0bmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9uYW1lbGVuKTtcbiYjNDM7XHRcdFx0aWYgKFZYRlNfTkFNRU1JTiAmIzQzOyBubGVuIFx1MDAzZSByZWNsZW4pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobmFtZWxlbiAhPSBubGVuKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKCFtZW1jbXAobmFtZSwgZGUtXHUwMDNlZF9uYW1lLCBuYW1lbGVuKSkge1xuIFx0XHRcdFx0KnBwcCA9IHBwO1xuQEAgLTIxOCw3ICYjNDM7MjQwLDcgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdHN0cnVjdCBwYWdlICpwcDtcbiBcdFx0Y2hhciAqa2FkZHI7XG4gXHRcdGludCBwZ19vZnMgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4tXHRcdGludCByYyA9IDA7XG4mIzQzO1x0XHRib29sIGZ1bGwgPSBmYWxzZTtcbiBcbiBcdFx0cHAgPSB2eGZzX2dldF9wYWdlKGlwLVx1MDAzZWlfbWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdFx0aWYgKElTX0VSUihwcCkpXG5AQCAtMjI4LDYgJiM0MzsyNTAsNyBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcbiBcdFx0d2hpbGUgKHBnX29mcyBcdTAwM2MgUEFHRV9TSVpFIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNjIGxpbWl0KSB7XG4gXHRcdFx0c3RydWN0IHZ4ZnNfZGlyZWN0ICpkZTtcbiYjNDM7XHRcdFx0aW50IHJlY2xlbiwgbmxlbjtcbiBcbiBcdFx0XHRpZiAoKHBvcyBcdTAwMjYgKGJzaXplIC0gMSkpIFx1MDAzYyA0KSB7XG4gXHRcdFx0XHRzdHJ1Y3Qgdnhmc19kaXJibGsgKmRicCA9XG5AQCAtMjM3LDYgJiM0MzsyNjAsMTQgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXG4gXHRcdFx0XHRwb3MgJiM0Mzs9IG92ZXJoZWFkO1xuIFx0XHRcdFx0cGdfb2ZzICYjNDM7PSBvdmVyaGVhZDtcbiYjNDM7XHRcdFx0XHRpZiAocGdfb2ZzIFx1MDAzZT0gUEFHRV9TSVpFKVxuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIHRoZSBlbnRyeSBoZWFkZXIgbXVzdCBmaXQgaW4gdGhlIHBhZ2UgKi9cbiYjNDM7XHRcdFx0aWYgKHBnX29mcyAmIzQzOyBWWEZTX05BTUVNSU4gXHUwMDNlIFBBR0VfU0laRSkge1xuJiM0MztcdFx0XHRcdHBvcyAmIzQzOz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgJiM0MzsgcGdfb2ZzKTtcbiBcbkBAIC0yNDYsMjMgJiM0MzsyNzcsMzUgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4tXHRcdFx0cGdfb2ZzICYjNDM7PSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbi1cdFx0XHRwb3MgJiM0Mzs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuJiM0MztcdFx0XHQvKiBhbmQgc28gbXVzdCB0aGUgd2hvbGUgcmVjb3JkLCBoZWFkZXIgaW5jbHVkZWQgKi9cbiYjNDM7XHRcdFx0cmVjbGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4mIzQzO1x0XHRcdGlmIChyZWNsZW4gXHUwMDNjIFZYRlNfTkFNRU1JTiB8fFxuJiM0MztcdFx0XHQgICAgcGdfb2ZzICYjNDM7IHJlY2xlbiBcdTAwM2UgUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRcdFx0cG9zICYjNDM7PSBQQUdFX1NJWkUgLSBwZ19vZnM7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHBnX29mcyAmIzQzOz0gcmVjbGVuO1xuJiM0MztcdFx0XHRwb3MgJiM0Mzs9IHJlY2xlbjtcbiBcdFx0XHRpZiAoIWRlLVx1MDAzZWRfaW5vKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0cmMgPSBkaXJfZW1pdChjdHgsIGRlLVx1MDAzZWRfbmFtZSxcbi1cdFx0XHRcdFx0ZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX25hbWVsZW4pLFxuLVx0XHRcdFx0XHRmczMyX3RvX2NwdShzYmksIGRlLVx1MDAzZWRfaW5vKSxcbi1cdFx0XHRcdFx0RFRfVU5LTk9XTik7XG4tXHRcdFx0aWYgKCFyYykge1xuJiM0MztcdFx0XHQvKiB0aGUgbmFtZSBtdXN0IGZpdCBpbiB0aGUgcmVjb3JkICovXG4mIzQzO1x0XHRcdG5sZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbik7XG4mIzQzO1x0XHRcdGlmIChWWEZTX05BTUVNSU4gJiM0MzsgbmxlbiBcdTAwM2UgcmVjbGVuKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFkaXJfZW1pdChjdHgsIGRlLVx1MDAzZWRfbmFtZSwgbmxlbixcbiYjNDM7XHRcdFx0XHQgICAgICBmczMyX3RvX2NwdShzYmksIGRlLVx1MDAzZWRfaW5vKSxcbiYjNDM7XHRcdFx0XHQgICAgICBEVF9VTktOT1dOKSkge1xuIFx0XHRcdFx0LyogdGhlIGRpciBlbnRyeSB3YXMgbm90IHJlYWQsIGZpeCBwb3MuICovXG4tXHRcdFx0XHRwb3MgLT0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4mIzQzO1x0XHRcdFx0cG9zIC09IHJlY2xlbjtcbiYjNDM7XHRcdFx0XHRmdWxsID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHR2eGZzX3B1dF9wYWdlKHBwKTtcbi1cdFx0aWYgKCFyYylcbiYjNDM7XHRcdGlmIChmdWxsKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWWEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnhmc19sb29rdXAmIzM0OywKICAgICYjMzQ7dnhmc19yZWFkZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGRpcmVjdG9yeSBlbnRyeSBwYXJzaW5nIGluIGZyZWV2eGZzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZTAzNDU3YzBkMDUwNjMwYTcxMzNiYzQ4ODUzMDQzMjdjNzBjMDI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAwODoxMDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jCmluZGV4IDEzOGUwOGRlOTc2ZWEuLjUwYzQyOGM2MzEyNjIgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYwpAQCAtNzgsNiAmIzQzOzc4LDcgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcCkKIAogCQl3aGlsZSAocGdfb2ZzICZsdDsgUEFHRV9TSVpFICZhbXA7JmFtcDsgcG9zICZsdDsgbGltaXQpIHsKIAkJCXN0cnVjdCB2eGZzX2RpcmVjdCAqZGU7CiYjNDM7CQkJaW50IHJlY2xlbiwgbmxlbjsKIAogCQkJaWYgKChwb3MgJmFtcDsgKGJzaXplIC0gMSkpICZsdDsgNCkgewogCQkJCXN0cnVjdCB2eGZzX2RpcmJsayAqZGJwID0KQEAgLTg3LDYgJiM0Mzs4OCwxNCBAQCB2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKQogCiAJCQkJcG9zICYjNDM7PSBvdmVyaGVhZDsKIAkJCQlwZ19vZnMgJiM0Mzs9IG92ZXJoZWFkOwomIzQzOwkJCQlpZiAocGdfb2ZzICZndDs9IFBBR0VfU0laRSkKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovCiYjNDM7CQkJaWYgKHBnX29mcyAmIzQzOyBWWEZTX05BTUVNSU4gJmd0OyBQQUdFX1NJWkUpIHsKJiM0MzsJCQkJcG9zICYjNDM7PSBQQUdFX1NJWkUgLSBwZ19vZnM7CiYjNDM7CQkJCWJyZWFrOwogCQkJfQogCQkJZGUgPSAoc3RydWN0IHZ4ZnNfZGlyZWN0ICopKGthZGRyICYjNDM7IHBnX29mcyk7CiAKQEAgLTk2LDEyICYjNDM7MTA1LDI1IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApCiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCXBnX29mcyAmIzQzOz0gZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9yZWNsZW4pOwotCQkJcG9zICYjNDM7PSBmczE2X3RvX2NwdShzYmksIGRlLSZndDtkX3JlY2xlbik7CiYjNDM7CQkJLyogYW5kIHNvIG11c3QgdGhlIHdob2xlIHJlY29yZCwgaGVhZGVyIGluY2x1ZGVkICovCiYjNDM7CQkJcmVjbGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9yZWNsZW4pOwomIzQzOwkJCWlmIChyZWNsZW4gJmx0OyBWWEZTX05BTUVNSU4gfHwKJiM0MzsJCQkgICAgcGdfb2ZzICYjNDM7IHJlY2xlbiAmZ3Q7IFBBR0VfU0laRSkgewomIzQzOwkJCQlwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mczsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXBnX29mcyAmIzQzOz0gcmVjbGVuOwomIzQzOwkJCXBvcyAmIzQzOz0gcmVjbGVuOwogCQkJaWYgKCFkZS0mZ3Q7ZF9pbm8pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChuYW1lbGVuICE9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfbmFtZWxlbikpCiYjNDM7CQkJLyogdGhlIG5hbWUgbXVzdCBmaXQgaW4gdGhlIHJlY29yZCAqLwomIzQzOwkJCW5sZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLSZndDtkX25hbWVsZW4pOwomIzQzOwkJCWlmIChWWEZTX05BTUVNSU4gJiM0MzsgbmxlbiAmZ3Q7IHJlY2xlbikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJaWYgKG5hbWVsZW4gIT0gbmxlbikKIAkJCQljb250aW51ZTsKIAkJCWlmICghbWVtY21wKG5hbWUsIGRlLSZndDtkX25hbWUsIG5hbWVsZW4pKSB7CiAJCQkJKnBwcCA9IHBwOwpAQCAtMjE4LDcgJiM0MzsyNDAsNyBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIAkJc3RydWN0IHBhZ2UgKnBwOwogCQljaGFyICprYWRkcjsKIAkJaW50IHBnX29mcyA9IHBvcyAmYW1wOyB+UEFHRV9NQVNLOwotCQlpbnQgcmMgPSAwOwomIzQzOwkJYm9vbCBmdWxsID0gZmFsc2U7CiAKIAkJcHAgPSB2eGZzX2dldF9wYWdlKGlwLSZndDtpX21hcHBpbmcsIHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAkJaWYgKElTX0VSUihwcCkpCkBAIC0yMjgsNiAmIzQzOzI1MCw3IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCiAJCXdoaWxlIChwZ19vZnMgJmx0OyBQQUdFX1NJWkUgJmFtcDsmYW1wOyBwb3MgJmx0OyBsaW1pdCkgewogCQkJc3RydWN0IHZ4ZnNfZGlyZWN0ICpkZTsKJiM0MzsJCQlpbnQgcmVjbGVuLCBubGVuOwogCiAJCQlpZiAoKHBvcyAmYW1wOyAoYnNpemUgLSAxKSkgJmx0OyA0KSB7CiAJCQkJc3RydWN0IHZ4ZnNfZGlyYmxrICpkYnAgPQpAQCAtMjM3LDYgJiM0MzsyNjAsMTQgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCiAKIAkJCQlwb3MgJiM0Mzs9IG92ZXJoZWFkOwogCQkJCXBnX29mcyAmIzQzOz0gb3ZlcmhlYWQ7CiYjNDM7CQkJCWlmIChwZ19vZnMgJmd0Oz0gUEFHRV9TSVpFKQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qIHRoZSBlbnRyeSBoZWFkZXIgbXVzdCBmaXQgaW4gdGhlIHBhZ2UgKi8KJiM0MzsJCQlpZiAocGdfb2ZzICYjNDM7IFZYRlNfTkFNRU1JTiAmZ3Q7IFBBR0VfU0laRSkgewomIzQzOwkJCQlwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mczsKJiM0MzsJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgJiM0MzsgcGdfb2ZzKTsKIApAQCAtMjQ2LDIzICYjNDM7Mjc3LDM1IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlwZ19vZnMgJiM0Mzs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfcmVjbGVuKTsKLQkJCXBvcyAmIzQzOz0gZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9yZWNsZW4pOwomIzQzOwkJCS8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqLwomIzQzOwkJCXJlY2xlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfcmVjbGVuKTsKJiM0MzsJCQlpZiAocmVjbGVuICZsdDsgVlhGU19OQU1FTUlOIHx8CiYjNDM7CQkJICAgIHBnX29mcyAmIzQzOyByZWNsZW4gJmd0OyBQQUdFX1NJWkUpIHsKJiM0MzsJCQkJcG9zICYjNDM7PSBQQUdFX1NJWkUgLSBwZ19vZnM7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlwZ19vZnMgJiM0Mzs9IHJlY2xlbjsKJiM0MzsJCQlwb3MgJiM0Mzs9IHJlY2xlbjsKIAkJCWlmICghZGUtJmd0O2RfaW5vKQogCQkJCWNvbnRpbnVlOwogCi0JCQlyYyA9IGRpcl9lbWl0KGN0eCwgZGUtJmd0O2RfbmFtZSwKLQkJCQkJZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9uYW1lbGVuKSwKLQkJCQkJZnMzMl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9pbm8pLAotCQkJCQlEVF9VTktOT1dOKTsKLQkJCWlmICghcmMpIHsKJiM0MzsJCQkvKiB0aGUgbmFtZSBtdXN0IGZpdCBpbiB0aGUgcmVjb3JkICovCiYjNDM7CQkJbmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfbmFtZWxlbik7CiYjNDM7CQkJaWYgKFZYRlNfTkFNRU1JTiAmIzQzOyBubGVuICZndDsgcmVjbGVuKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRpcl9lbWl0KGN0eCwgZGUtJmd0O2RfbmFtZSwgbmxlbiwKJiM0MzsJCQkJICAgICAgZnMzMl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9pbm8pLAomIzQzOwkJCQkgICAgICBEVF9VTktOT1dOKSkgewogCQkJCS8qIHRoZSBkaXIgZW50cnkgd2FzIG5vdCByZWFkLCBmaXggcG9zLiAqLwotCQkJCXBvcyAtPSBmczE2X3RvX2NwdShzYmksIGRlLSZndDtkX3JlY2xlbik7CiYjNDM7CQkJCXBvcyAtPSByZWNsZW47CiYjNDM7CQkJCWZ1bGwgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXZ4ZnNfcHV0X3BhZ2UocHApOwotCQlpZiAoIXJjKQomIzQzOwkJaWYgKGZ1bGwpCiAJCQlicmVhazsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGcmVldnhmcyBGaWxlc3lzdGVtIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyeSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBgdnhmc19maW5kX2VudHJ5YCBhbmQgYHZ4ZnNfcmVhZGRpcmAuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHNvbWUgYm91bmRzIGNoZWNraW5nLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gSXQmIzM5O3MgbG9va2luZyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciBhY2Nlc3MgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBkaXJlY3RvcnkgZW50cmllcyB3aXRoaW4gdGhlIGZyZWV2eGZzIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91IHdhbnQgdG8gY2F0Y2guCgpMZXQgbWUgYnJlYWsgZG93biB0aGUgY2hlY2tzIHRoZXkmIzM5O3ZlIGFkZGVkOiBJdCYjMzk7cyBjaGVja2luZyBjb25kaXRpb25zIGludm9sdmluZyBgcGdfb2ZzYCwgYHJlY2xlbmAsIGBQQUdFX1NJWkVgLCBgVlhGU19OQU1FTUlOYCwgYW5kIGBubGVuYC4gVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGUgcGFnZSBidWZmZXIgYW5kIHRoZSBkaXJlY3RvcnkgZW50cnkgaXRzZWxmLiBJIGNhbiBzZWUgd2hhdCB0aGV5JiMzOTtyZSBkb2luZzogYHBnX29mcyAmIzQzOyBWWEZTX05BTUVNSU4gJmd0OyBQQUdFX1NJWkVgLCBgcmVjbGVuICZsdDsgVlhGU19OQU1FTUlOYCwgYHBnX29mcyAmIzQzOyByZWNsZW4gJmd0OyBQQUdFX1NJWkVgLCBhbmQgYFZYRlNfTkFNRU1JTiAmIzQzOyBubGVuICZndDsgcmVjbGVuYC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGEgc3VwZXJmaWNpYWwgb25lLiBJdCBtb2RpZmllcyB0aGUgY29yZSBiZWhhdmlvdXIgb2YgdGhlIGZpbGVzeXN0ZW0gZHJpdmVyLiBDb25zZXF1ZW50bHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBhYnNvbHV0ZWx5IG5lZWRzIGZ1enppbmcuIEEgc29saWQgZnV6emluZyBjYW1wYWlnbiB3aWxsIGJlIGtleSB0byBlbnN1cmluZyB0aGUgZml4IGlzIHJvYnVzdC4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGV2ZW4gdGVzdCB0aGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGZyZWV2eGZzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZnMvZnJlZXZ4ZnMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJIG5lZWQgdG8gZW5hYmxlIHRoaXMgZmlsZXN5c3RlbSBzbyBJIGNhbiBhY3R1YWxseSBydW4gc29tZSB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlhGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZnJlZXZ4ZnMvS2NvbmZpZzoyOmNvbmZpZyBWWEZTX0ZTXG5mcy9mcmVldnhmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqRGVsdmluZyBpbnRvIHRoZSBWWEZTX0ZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCBpcyBgVlhGU19GU2AuIFJpZ2h0LiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyIGludG8gYWN0dWFsbHkgKmRvaW5nKiBhbnl0aGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBoYXMgYW55IGNhc2NhZGluZyBlZmZlY3RzLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgcmVsYXRlZCBzZXR0aW5ncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBtaWdodCB0cmlwIG92ZXI/IEkgbmVlZCB0byBjaGVjayBmb3IgdXBzdHJlYW0gaW1wbGljYXRpb25zLiBUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGNvdmVyIGFsbCBiYXNlcyBiZWZvcmUgZXZlbiBjb25zaWRlcmluZyBtYWtpbmcgYW55IGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcmVldnhmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFZYRlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyZWVWeEZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKFZFUklUQVMgVnhGUyhUTSkgY29tcGF0aWJsZSlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBGcmVlVnhGUyBpcyBhIGZpbGUgc3lzdGVtIGRyaXZlciB0aGF0IHN1cHBvcnQgdGhlIFZFUklUQVMgVnhGUyhUTSlcbiAgIDg6XHRcdCAgZmlsZSBzeXN0ZW0gZm9ybWF0LiAgVkVSSVRBUyBWeEZTKFRNKSBpcyB0aGUgc3RhbmRhcmQgZmlsZSBzeXN0ZW1cbiAgIDk6XHRcdCAgb2YgU0NPIFVuaXhXYXJlIChhbmQgcG9zc2libHkgb3RoZXJzKSBhbmQgb3B0aW9uYWxseSBhdmFpbGFibGVcbiAgMTA6XHRcdCAgZm9yIFN1bnNvZnQgU29sYXJpcywgSFAtVVggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuIEhvd2V2ZXJcbiAgMTE6XHRcdCAgdGhlc2UgcGFydGljdWxhciBPUyBpbXBsZW1lbnRhdGlvbnMgb2YgdnhmcyBtYXkgZGlmZmVyIGluIG9uLWRpc2tcbiAgMTI6XHRcdCAgZGF0YSBlbmRpYW5uZXNzIGFuZC9vciBzdXBlcmJsb2NrIG9mZnNldC4gVGhlIHZ4ZnMgbW9kdWxlIGhhcyBiZWVuXG4gIDEzOlx0XHQgIHRlc3RlZCB3aXRoIFNDTyBVbml4V2FyZSBhbmQgSFAtVVggQi4xMC4yMCAocGEtcmlzYyAxLjEgYXJjaC4pXG4gIDE0Olx0XHQgIEN1cnJlbnRseSBvbmx5IHJlYWRvbmx5IGFjY2VzcyBpcyBzdXBwb3J0ZWQgYW5kIFZ4RlggdmVyc2lvbnNcbiAgMTU6XHRcdCAgMiwgMyBhbmQgNC4gVGVzdHMgd2VyZSBwZXJmb3JtZWQgd2l0aCBIUC1VWCBWeEZTIHZlcnNpb24gMy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgTk9URTogdGhlIGZpbGUgc3lzdGVtIHR5cGUgYXMgdXNlZCBieSBtb3VudCgxKSwgbW91bnQoMikgYW5kXG4gIDE4Olx0XHQgIGZzdGFiKDUpIGlzICYjMzk7dnhmcyYjMzk7IGFzIGl0IGRlc2NyaWJlcyB0aGUgZmlsZSBzeXN0ZW0gZm9ybWF0LCBub3RcbiAgMTk6XHRcdCAgdGhlIGFjdHVhbCBkcml2ZXIuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbGlrZSBJIHdvdWxkIGluIG15IG93biB3b3JrOgoKKipBbmFseXppbmcgdGhlIFZYRlMgRmlsZSBTeXN0ZW0gQ29kZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgc3BlY2lmaWMgZmlsZSBzeXN0ZW0gbW9kaWZpY2F0aW9uLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcG9pbnRpbmcgZGlyZWN0bHkgdG8gdGhlIGBCTE9DS2AgY29tcG9uZW50LiBNYWtlcyBzZW5zZSwgcHJvYmFibHkgcmVsYXRlZCB0byBibG9jay1sZXZlbCBvcGVyYXRpb25zIHdpdGhpbiBWWEZTLiBUaGUgY29uZmlndXJhdGlvbiBpbiB1c2UgaXMgYFZYRlNfRlNgIHdoaWNoIGlzIGEgZ29vZCByZW1pbmRlci4KClRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gYHZ4ZnNfZmluZF9lbnRyeWAgaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgd2l0aCBgdnhmc19sb29rdXBgLiBUaGF0IG1lYW5zIGFueSBjaGFuZ2VzIHRoZXJlIGNvdWxkIHJpcHBsZSB1cCB0aGUgY2FsbCBjaGFpbi4gYHZ4ZnNfcmVhZGRpcmAgaXMgdGhlIHN0YW5kYXJkIGNhbGxiYWNrIGZvciByZWFkaW5nIGVudHJpZXMgZnJvbSBhIFZYRlMgZGlyZWN0b3J5LgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgdnhmc19maW5kX2VudHJ5YCBpcyBiZWluZyB1c2VkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGZzX2ZpbmRfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MzY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDQtLyoqXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjQ1OiAqIHZ4ZnNfZmluZF9lbnRyeSAtIGZpbmQgYSBtYXRoaW5nIGRpcmVjdG9yeSBlbnRyeSBmb3IgYSBkZW50cnlcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDYtICogQGlwOlx0XHRkaXJlY3RvcnkgaW5vZGVcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTUwLSAqIERlc2NyaXB0aW9uOlxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzo1MTogKiAgIHZ4ZnNfZmluZF9lbnRyeSBmaW5kcyBhIFx1MDAyNnN0cnVjdCB2eGZzX2RpcmVjdCBmb3IgdGhlIFZGUyBkaXJlY3RvcnlcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNTItICogICBjYWNoZSBlbnRyeSBAZHAuICBAcHBwIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVyblxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9NTg9c3RhdGljIHN0cnVjdCB2eGZzX2RpcmVjdCAqXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjU5OnZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTYwLXtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1Nj12eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTYxLVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxNjI6XHRkZSA9IHZ4ZnNfZmluZF9lbnRyeShkaXAsIGRwLCBcdTAwMjZwcCk7XG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE2My1cdGlmIChkZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBmbG93OgoKKipBbmFseXppbmcgdGhlIGB2eGZzYCBGaWxlc3lzdGVtIExvb2t1cCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB2eGZzYCBoYW5kbGVzIGxvb2t1cHMuIFJpZ2h0IG5vdywgSSYjMzk7dmUgZ290IG15IGV5ZXMgb24gYHZ4ZnNfZmluZF9lbnRyeWAuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGF0JiMzOTtzIGEgaGVscGZ1bCBzdGFydGluZyBwb2ludCwgaXQgbWVhbnMgSSBkb24mIzM5O3QgaGF2ZSB0byB0cmFjZSBpdCBmcm9tIHRvbyBmYXIgYWZpZWxkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBgdnhmc19maW5kX2VudHJ5YCBpcyBjYWxsZWQgYnkgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAuIE5vdywgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXMgY2xlYXJseSB0aGUgYnJpZGdlIGZ1bmN0aW9uIGhlcmUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBBbmQgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBgdnhmc19sb29rdXBgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBzdGFydHMuIFNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgZHJpdmVuIHRocm91Z2ggdGhlIGB2eGZzX2xvb2t1cGAgZnVuY3Rpb24uIFNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIGB2eGZzX2xvb2t1cGAgYW5kIHVuZGVyc3RhbmQgaG93IGl0IHVzZXMgdGhlIG90aGVyIGZ1bmN0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGhpZXJhcmNoeSBmb3IgYSBmaWxlc3lzdGVtIGxvb2t1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhmc19sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjgtXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjI5OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcdHZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7XG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMwLXN0YXRpYyBpbnRcdFx0dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTMyPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX2lub2RlX29wcyA9IHtcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MzM6XHQubG9va3VwID1cdFx0dnhmc19sb29rdXAsXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM0LX07XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0xNTY9dnhmc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcClcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE3Mi0vKipcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTczOiAqIHZ4ZnNfbG9va3VwIC0gbG9va3VwIHBhdGhuYW1lIGNvbXBvbmVudFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNzQtICogQGRpcDpcdGRpciBpbiB3aGljaCB3ZSBsb29rdXBcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE3OC0gKiBEZXNjcmlwdGlvbjpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTc5OiAqICAgdnhmc19sb29rdXAgdHJpZXMgdG8gbG9va3VwIHRoZSBwYXRobmFtZSBjb21wb25lbnQgZGVzY3JpYmVkXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE4MC0gKiAgIGJ5IEBkcCBpbiBAZGlwLlxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTg3OnZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBGdW5jdGlvbiBFbnRyeSBQb2ludHMgaW4gdGhlIFZYRlMgRmlsZXN5c3RlbSBEcml2ZXIqKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgdGhlIFZYRlMgZmlsZXN5c3RlbSBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCB3ZXJlIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB3ZSYjMzk7ZCBiZSBjYWxsaW5nLCB0aGUga2V5IGludGVyZmFjZXMuIEhvd2V2ZXIsIGhhbmcgb24uLi4gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29kZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogYXJlIHRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSBkZWNsYXJlZCBhcyBzdGF0aWM/IEEgc3RhdGljIGRlY2xhcmF0aW9uIHdvdWxkIG1lYW4gdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSBhbmQgbm90IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUuIEhtbSwgbGV0IG1lIGNvbmZpcm0gdGhlaXIgc3RhdGljIGRlc2lnbmF0aW9uLi4uIGFuZCBgdnhmc19yZWFkZGlyYCBhcyB3ZWxsLiBSaWdodCwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZXNlIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGZzX3JlYWRkaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9Mjk9c3RhdGljIHN0cnVjdCBkZW50cnkgKlx0dnhmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MzA6c3RhdGljIGludFx0XHR2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMS1cbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTM2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnhmc19kaXJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM4LVx0LnJlYWQgPVx0XHRcdGdlbmVyaWNfcmVhZF9kaXIsXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjM5Olx0Lml0ZXJhdGVfc2hhcmVkID1cdHZ4ZnNfcmVhZGRpcixcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDAtXHQuc2V0bGVhc2UgPVx0XHRnZW5lcmljX3NldGxlYXNlLFxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg3PXZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjAxLS8qKlxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyMDI6ICogdnhmc19yZWFkZGlyIC0gcmVhZCBhIGRpcmVjdG9yeVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMDMtICogQGZwOlx0XHR0aGUgZGlyZWN0b3J5IHRvIHJlYWRcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTIwNi0gKiBEZXNjcmlwdGlvbjpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjA3OiAqICAgdnhmc19yZWFkZGlyIGZpbGxzIEByZXRwIHdpdGggZGlyZWN0b3J5IGVudHJpZXMgZnJvbSBAZnBcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjA4LSAqICAgdXNpbmcgdGhlIFZGUyBzdXBwbGllZCBjYWxsYmFjayBAZmlsbGVyLlxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MjEzPXN0YXRpYyBpbnRcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjE0OnZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA1CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU3RhdGljIEZ1bmN0aW9uIFVzYWdlIGluIEZyZWVWeEZTIERpcmVjdG9yeSBPcGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIHRoaW5nczogdGhlIGRpcmVjdG9yeSBpbm9kZSBvcGVyYXRpb25zIChgdnhmc19kaXJfaW5vZGVfb3BzYCkgYW5kIHRoZSBtb3JlIGdlbmVyYWwgZGlyZWN0b3J5IG9wZXJhdGlvbnMgKGB2eGZzX2Rpcl9vcGVyYXRpb25zYCkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBib3RoIG9mIHRoZW0gYXBwZWFyIHRvIGJlIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCByYWlzZXMgYSBxdWVzdGlvbiBhYm91dCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBGcmVlVnhGUyBmaWxlc3lzdGVtIGNvZGUuCgpUaGUgZmFjdCB0aGV5JiMzOTtyZSBzdGF0aWMgc3VnZ2VzdHMgZW5jYXBzdWxhdGlvbiwgdGhhdCB0aGV5IGFyZSBub3QgZGlyZWN0bHkgZXhwb3NlZCBvdXRzaWRlIHRoZWlyIGRlZmluZWQgbW9kdWxlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gYmVjb21lczogYXJlIHRoZXNlIHN0YXRpYyBpbXBsZW1lbnRhdGlvbnMgdXNlZCBpbnRlcm5hbGx5LCBvciBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AgdGhhdCBjYWxsIHRoZW0/IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbHNpdGVzIG9mIHRoaXMgbW9kdWxlIHRvIGJlIGNlcnRhaW4gaWYgdGhlcmUgaXMgYW55IHB1YmxpYyB1c2Ugb2YgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50LiBVbmRlcnN0YW5kaW5nIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGV4cG9ydGFibGUgaW50ZXJmYWNlcyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTU4PXN0YXRpYyBzdHJ1Y3Qgdnhmc19kaXJlY3QgKlxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzo1OTp2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy02MC17XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0xNTU9c3RhdGljIGlub190XG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE1Njp2eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNTcte1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTg3OnZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xODgte1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MjEzPXN0YXRpYyBpbnRcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjE0OnZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTY29wZSBvZiBgdnhmc19sb29rdXAuY2AgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBub3RpY2luZyBpcyB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGdlbmVyYWxseSBpbXBsaWVzIHRoZXkmIzM5O3JlIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSwgY29uZmluZWQgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBCdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gSSBzZWUgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCBkZWNsYXJlZCBoZXJlLCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGV5IGFyZSB1c2VkIGVsc2V3aGVyZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIGF0IHRoZWlyIHBvdGVudGlhbCBicm9hZGVyIGFwcGxpY2FiaWxpdHksIG1heWJlIGV2ZW4gZXhwb3J0ZWQgZnVuY3Rpb25hbGl0eS4gSSBjYW4mIzM5O3QgYXNzdW1lIGFueXRoaW5nLiBUaW1lIHRvIGNvbmZpcm0gb3IgZGlzcGVsIHRoaXMgaW1tZWRpYXRlbHkuIExldCYjMzk7cyB0cmFjZSB0aGVpciB1c2FnZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgbXkgaW5pdGlhbCBpbnRlcm5hbC1vbmx5IGFzc3VtcHRpb24gaXMgY29ycmVjdCBvciBpZiB0aGV5JiMzOTtyZSBhY3R1YWxseSBpbnRlcmZhY2UgY29tcG9uZW50cy4gTmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgYXJlIHV0aWxpemVkIGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhmc19kaXJfaW5vZGVfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzQ9ZXh0ZXJuIHZvaWRcdFx0XHR2eGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM2LS8qIHZ4ZnNfbG9va3VwLmMgKi9cbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zXHR2eGZzX2Rpcl9pbm9kZV9vcHM7XG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM4LWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zXHR2eGZzX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0yNTE9dnhmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCBpbm9fdCBpbm8pXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI3OS1cdH0gZWxzZSBpZiAoU19JU0RJUihpcC1cdTAwM2VpX21vZGUpKSB7XG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MjgwOlx0XHRpcC1cdTAwM2VpX29wID0gXHUwMDI2dnhmc19kaXJfaW5vZGVfb3BzO1xuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI4MS1cdFx0aXAtXHUwMDNlaV9mb3AgPSBcdTAwMjZ2eGZzX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MzA9c3RhdGljIGludFx0XHR2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MzI6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdnhmc19kaXJfaW5vZGVfb3BzID0ge1xuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMy1cdC5sb29rdXAgPVx0XHR2eGZzX2xvb2t1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBTeW1ib2wgVmlzaWJpbGl0eSBpbiBGcmVldnhmcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAgZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIEZyZWV2eGZzLiBUaGUgaW5zdHJ1Y3Rpb25zIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYXJlIHByZXR0eSBjbGVhcjogZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBpc3N1ZSBpcywgSSYjMzk7bSB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgd2hlbiB0aGUgY29tcGlsZXIgaXMgZG9uZSBpdCB1c2VzIHRoZSBjb3JyZWN0IHN5bWJvbHMuCgpJIHNlZSB0aGF0IGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgICpzaG91bGQqIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzLCBzaW5jZSB0aGV5JiMzOTtyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzLiBJIGtub3cgdGhhdCBpZiB0aGV5IHdlcmUgZnVsbHkgaW5saW5lZCwgdGhleSB3b3VsZG4mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBCdXQsIGJlY2F1c2UgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSB0aGVtIGNvbXBsZXRlbHkuCgpCdXQgd2FpdCwgYXJlIHRoZXJlIG90aGVyIG9wdGlvbnM/IE1heWJlIHRoZXJlIGFyZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gRnJlZXZ4ZnMgdGhhdCAqY291bGQqIHNlcnZlIHRoZSBwdXJwb3NlLCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlIHRvIHVzZT8gYHZ4ZnNfaWdldGAgYW5kIGB2eGZzX2ZpbGxfc3VwZXJgIHNwcmluZyB0byBtaW5kIGFzIHBvc3NpYmlsaXRpZXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZW0gb3V0IGluIHRoZSBzb3VyY2UgY29kZSBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4ZnNfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX3N1cGVyLmM9MTI1PXN0YXRpYyBpbnQgdnhmc190cnlfc2JfbWFnaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbi0tXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMTY5LS8qKlxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jOjE3MDogKiB2eGZzX2ZpbGxfc3VwZXIgLSByZWFkIHN1cGVyYmxvY2sgaW50byBtZW1vcnkgYW5kIGluaXRpYWxpemUgZmlsZXN5c3RlbVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE3MS0gKiBAc2JwOlx0XHRWRlMgc3VwZXJibG9jayAodG8gZmlsbClcbi0tXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMTgzLSAqL1xuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jOjE4NDpzdGF0aWMgaW50IHZ4ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE4NS17XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jPTI4Nz1zdGF0aWMgaW50IHZ4ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI4OC17XG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6Mjg5Olx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIHZ4ZnNfZmlsbF9zdXBlcik7XG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMjkwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBTdGF0aWMgRnVuY3Rpb24gQ29udGV4dCoqCgpPa2F5LCBzbyBgdnhmc19maWxsX3N1cGVyYCBpcyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGluIGl0cyBjb250ZXh0LiBHaXZlbiB0aGF0LCBsZXQgbWUgcGl2b3QgbXkgZm9jdXMgdG8gaXRzIHBvdGVudGlhbCBjb3VudGVycGFydCwgYHZ4ZnNfaWdldGAuIEl0IGlzIGNyaXRpY2FsIHRvIGdyYXNwIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGZpbGUgc3lzdGVtIGRlc2lnbi4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaWYgYHZ4ZnNfaWdldGAgaXMgYWxzbyBzdGF0aWMuIElmIGl0IGlzLCB0aGlzIG1lYW5zIGJvdGggZnVuY3Rpb25zIGFyZSBsaWtlbHkgc2NvcGVkIG9ubHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgZmlsZXN5c3RlbSBtb2R1bGUuIFRoaXMgaW1wbGllcyB0aGF0IG15IGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGZvY3VzZWQgc3BlY2lmaWNhbGx5IG9uIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBgdnhmc19pZ2V0YCBvciBgdnhmc19maWxsX3N1cGVyYC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgZnVuY3Rpb25zLCBpZiBgdnhmc19pZ2V0YCBpcyBhbHNvIHN0YXRpYywgdGhpcyBoZWxwcyBtZSBxdWlja2x5IHVuZGVyc3RhbmQgc2NvcGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZmlsZXN5c3RlbSBkZXNpZ24gaXMgbGlrZWx5IG1vZHVsYXIgYW5kIGludGVybmFsIHRvIHRoZSBWWEZTIGltcGxlbWVudGF0aW9uLiBOb3cgbGV0JiMzOTtzIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhmc19pZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzI9ZXh0ZXJuIHN0cnVjdCBpbm9kZVx0XHQqdnhmc19zdGlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6MzM6ZXh0ZXJuIHN0cnVjdCBpbm9kZVx0XHQqdnhmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7XG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM0LWV4dGVybiB2b2lkXHRcdFx0dnhmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTc2PXN0YXRpYyBpbmxpbmUgdm9pZCBkaXAydmlwX2NweShzdHJ1Y3Qgdnhmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTEzMS0gKiBOT1RFOlxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjEzMjogKiAgV2hpbGUgX192eGZzX2lnZXQgdXNlcyB0aGUgcGFnZWNhY2hlIHZ4ZnNfYmxraWdldCB1c2VzIHRoZVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTEzMy0gKiAgYnVmZmVyY2FjaGUuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIHRoZVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0xMzc9dnhmc19ibGtpZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCB1X2xvbmcgZXh0ZW50LCBpbm9fdCBpbm8pXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTE3Mi0vKipcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYzoxNzM6ICogX192eGZzX2lnZXQgLSBnZW5lcmljIGZpbmQgaW5vZGUgZmFjaWxpdHlcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xNzQtICogQGlsaXN0cDpcdFx0aW5vZGUgbGlzdFxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0xODM9c3RhdGljIGludFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjE4NDpfX3Z4ZnNfaWdldChzdHJ1Y3QgaW5vZGUgKmlsaXN0cCwgc3RydWN0IHZ4ZnNfaW5vZGVfaW5mbyAqdmlwLCBpbm9fdCBpbm8pXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMTg1LXtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM9MjIyPXZ4ZnNfc3RpZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCBpbm9fdCBpbm8pXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTIzMS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYzoyMzI6XHRlcnJvciA9IF9fdnhmc19pZ2V0KFZYRlNfU0JJKHNicCktXHUwMDNldnNpX3N0aWxpc3QsIFZYRlNfSU5PKGlub2RlKSwgaW5vKTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yMzMtXHRpZiAoZXJyb3IpIHtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMjQxLS8qKlxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI0MjogKiB2eGZzX2lnZXQgLSBnZXQgYW4gaW5vZGVcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNDMtICogQHNicDpcdHRoZSBzdXBlcmJsb2NrIHRvIGdldCB0aGUgaW5vZGUgZm9yXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTI1MD1zdHJ1Y3QgaW5vZGUgKlxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI1MTp2eGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGlub190IGlubylcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNTIte1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNjQtXHR2aXAgPSBWWEZTX0lOTyhpcCk7XG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MjY1Olx0ZXJyb3IgPSBfX3Z4ZnNfaWdldChWWEZTX1NCSShzYnApLVx1MDAzZXZzaV9pbGlzdCwgdmlwLCBpbm8pO1xuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI2Ni1cdGlmIChlcnJvcikge1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg3PXZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk2LVx0aWYgKGlubylcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTk3Olx0XHRpcCA9IHZ4ZnNfaWdldChkaXAtXHUwMDNlaV9zYiwgaW5vKTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk4LVx0cmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlwLCBkcCk7XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jPTE4ND1zdGF0aWMgaW50IHZ4ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYy0yNjAtXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MjYxOlx0cm9vdCA9IHZ4ZnNfaWdldChzYnAsIFZYRlNfUk9PVF9JTk8pO1xuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI2Mi1cdGlmIChJU19FUlIocm9vdCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVlhGUyBTeW1ib2wgSW5jbHVzaW9uKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGB2eGZzX2lnZXRgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgc28gdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdXNpb24gZm9yIEZvY3VzU3ltYm9scy4gTm93LCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCDigJMgdGhleSYjMzk7cmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlICp1c2VkKiBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgbm90IGlubGluZWQuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBmYXZvciBub24tc3RhdGljLCAqbm9uLWlubGluZWQqIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgY2FuZGlkYXRlcyEgSSYjMzk7bGwgYWJzb2x1dGVseSBpbmNsdWRlIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgLiBJJiMzOTtsbCBhbHNvIGluY2x1ZGUgYHZ4ZnNfaWdldGAgdG8gYmUgZXh0cmEgc3VyZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBgVlhGU19GU2AgaXMgdGhlIG9ubHkgb25lLiBPa2F5LCB3YWl0IGEgbWludXRlLCBgVlhGU19GU2AgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQkxPQ0tgIGlzIGEgY29tbW9uIHN1YnN5c3RlbSBjb25maWcuIFdoaWxlIGl0JiMzOTtzIHByb2JhYmx5IGFsd2F5cyBlbmFibGVkLCBpdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIGluY2x1ZGUgcGFyZW50cy4gSSYjMzk7bGwgc3RpY2sgd2l0aCBqdXN0IGluY2x1ZGluZyBgVlhGU19GU2AgZm9yIG5vdy4KClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBwYXRjaCB0b3VjaGVzIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gYHZ4ZnNfZmluZF9lbnRyeWAgaXMgc3RhdGljIGFuZCBnZXRzIGNhbGxlZCBmcm9tIGB2eGZzX2lub2RlX2J5X25hbWVgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGJ5IGB2eGZzX2xvb2t1cGAuIFRoaXMgY29uZmlybXMgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCBhcmUgaW5kZWVkIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24uCgpPa2F5LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlldyBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIENocmlzdG9waCBIZWxsd2lnLlxuICAgNDpcdCAqIENvcHlyaWdodCAoYykgMjAxNiBLcnp5c3p0b2YgQmxhc3prb3dza2lcbiAgIDU6XHQgKi9cbiAgIDY6XHRcbiAgIDc6XHQvKlxuICAgODpcdCAqIFZlcml0YXMgZmlsZXN5c3RlbSBkcml2ZXIgLSBsb29rdXAgYW5kIG90aGVyIGRpcmVjdG9yeSByZWxhdGVkIGNvZGUuXG4gICA5Olx0ICovXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcJiMzNDt2eGZzLmhcJiMzNDtcbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDt2eGZzX2Rpci5oXCYjMzQ7XG4gIDIwOlx0I2luY2x1ZGUgXCYjMzQ7dnhmc19pbm9kZS5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7dnhmc19leHRlcm4uaFwmIzM0O1xuICAyMjpcdFxuICAyMzpcdC8qXG4gIDI0Olx0ICogTnVtYmVyIG9mIFZ4RlMgYmxvY2tzIHBlciBwYWdlLlxuICAyNTpcdCAqL1xuICAyNjpcdCNkZWZpbmUgVlhGU19CTE9DS19QRVJfUEFHRShzYnApICAoKFBBR0VfU0laRSAvIChzYnApLVx1MDAzZXNfYmxvY2tzaXplKSlcbiAgMjc6XHRcbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqXHR2eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCB1bnNpZ25lZCBpbnQpO1xuICAzMDpcdHN0YXRpYyBpbnRcdFx0dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcbiAgMzE6XHRcbiAgMzI6XHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9pbm9kZV9vcHMgPSB7XG4gIDMzOlx0XHQubG9va3VwID1cdFx0dnhmc19sb29rdXAsXG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX29wZXJhdGlvbnMgPSB7XG4gIDM3Olx0XHQubGxzZWVrID1cdFx0Z2VuZXJpY19maWxlX2xsc2VlayxcbiAgMzg6XHRcdC5yZWFkID1cdFx0XHRnZW5lcmljX3JlYWRfZGlyLFxuICAzOTpcdFx0Lml0ZXJhdGVfc2hhcmVkID1cdHZ4ZnNfcmVhZGRpcixcbiAgNDA6XHRcdC5zZXRsZWFzZSA9XHRcdGdlbmVyaWNfc2V0bGVhc2UsXG4gIDQxOlx0fTtcbiAgNDI6XHRcbiAgNDM6XHRcbiAgNDQ6XHQvKipcbiAgNDU6XHQgKiB2eGZzX2ZpbmRfZW50cnkgLSBmaW5kIGEgbWF0aGluZyBkaXJlY3RvcnkgZW50cnkgZm9yIGEgZGVudHJ5XG4gIDQ2Olx0ICogQGlwOlx0XHRkaXJlY3RvcnkgaW5vZGVcbiAgNDc6XHQgKiBAZHA6XHRcdGRlbnRyeSBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIGEgZGlyZWN0XG4gIDQ4Olx0ICogQHBwcDpcdGdldHMgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVybiB2YWx1ZSBzaXRzIGluXG4gIDQ5Olx0ICpcbiAgNTA6XHQgKiBEZXNjcmlwdGlvbjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgVlhGUyBNb2R1bGUgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhlIFZYRlMgY29kZSBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGFuYWx5emUgaXRzIGJlaGF2aW9yLiBJIG5vdGljZWQgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiB0aGUgbW9kdWxlLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IGNvbmNlcm5lZCBhYm91dCB0aGF0LCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGdsb2JhbCBzdHJ1Y3RzLCBzcGVjaWZpY2FsbHkgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYC4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGNhbiYjMzk7dCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgdGhlcmVmb3JlIGhhdmUgZGlzdGluY3QsIHJlYWRpbHkgaWRlbnRpZmlhYmxlIHN5bWJvbCBhZGRyZXNzZXMuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMgdG8gc2VydmUgYXMgRm9jdXNTeW1ib2xzLCBhbGxvd2luZyBtZSB0byB0YXJnZXQgc3BlY2lmaWMgZXhlY3V0aW9uIHBhdGhzLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGJlIHVzaW5nIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gQWx0aG91Z2ggSSBjb3VsZCBhbHNvIGNvbnNpZGVyIGB2eGZzX2lnZXRgIHNpbmNlIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCwgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAgc2VlbSBsaWtlIHRoZSBtb3JlIGRpcmVjdCBjaG9pY2VzIGdpdmVuIHRoZWlyIHJvbGUgaW4gY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZS4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYFZYRlNfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgb2YgY291cnNlLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIGBCTE9DS2Agc2VlbXMgc3RhbmRhcmQgZW5vdWdoLiBCdXQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBvYnNjdXJlIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBhY2NvdW50IGZvciB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgcGljdHVyZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvS2NvbmZpZz0yPWNvbmZpZyBWWEZTX0ZTXG5mcy9mcmVldnhmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXCYjMzQ7XG5mcy9mcmVldnhmcy9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9mcmVldnhmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MzIKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZ4ZnNgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgZml4aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMgd2l0aGluIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gTm8gb3RoZXIgY2hhbmdlcyBhcmUgaW52b2x2ZWQsIHdoaWNoIG1ha2VzIHRoaW5ncyBzaW1wbGVyLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBmaXgsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgYnVnLiBHaXZlbiBpdHMgbmF0dXJlIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGludGVncml0eSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZCBoZXJlLgoKSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmxhZyBpdCBhcyBzdWNoLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBGb2N1c2luZyB0aGUgZnV6emluZyBlZmZvcnQgaXMgYWxzbyBpbXBvcnRhbnQuIEnigJlsbCBtYWtlIHN1cmUgdGhlIGZ1enplciBoaXRzIHRoZSByZWxldmFudCBmdW5jdGlvbnMgc28gSeKAmWxsIHNldCBgRm9jdXNTeW1ib2xzYCB0byBgWyYjMzQ7dnhmc19sb29rdXAmIzM0OywgJiMzNDt2eGZzX3JlYWRkaXImIzM0O11gLiBJJiMzOTtsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgVlhGU19GU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIHdpdGggYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O1ZYRlNfRlMmIzM0O11gLCBzaW5jZSB0aGlzIGlzIGEgZmlsZXN5c3RlbSBkcml2ZXIuCgpNeSByZWFzb25pbmcgZm9yIHRoZXNlIHNldHRpbmdzIGlzIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YWNrbGVzIGJvdW5kcyBjaGVja2luZyBkdXJpbmcgZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gdGhlIGBmcmVldnhmc2AgZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjbGVhcmx5IGludm9sdmVzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBmaWxlc3lzdGVtIGl0c2VsZiwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgdG8gdW5jb3ZlciBhbnkgbGF0ZW50IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGZzX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt2eGZzX3JlYWRkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gZnJlZXZ4ZnMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4ZnNfbG9va3VwJiMzNDssCiAgICAmIzM0O3Z4ZnNfcmVhZGRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiBmcmVldnhmcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTA6NDguNDA3ODExNjc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwODA0ODU1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ4ZnNfbG9va3VwXCIsXG4gICAgXCJ2eGZzX3JlYWRkaXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiBmcmVldnhmcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo0OC40MDc4MTY3OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQyOTE5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZTAzNDU3YzBkMDUwNjMwYTcxMzNiYzQ4ODUzMDQzMjdjNzBjMDI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDg6MTA6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcXG5pbmRleCAxMzhlMDhkZTk3NmVhLi41MGM0MjhjNjMxMjYyIDEwMDY0NFxcbi0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcXG4rKysgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXFxuQEAgLTc4LDYgKzc4LDcgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcXG4gXFxuIFxcdFxcdHdoaWxlIChwZ19vZnMgXFx1MDAzYyBQQUdFX1NJWkUgXFx1MDAyNlxcdTAwMjYgcG9zIFxcdTAwM2MgbGltaXQpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHZ4ZnNfZGlyZWN0ICpkZTtcXG4rXFx0XFx0XFx0aW50IHJlY2xlbiwgbmxlbjtcXG4gXFxuIFxcdFxcdFxcdGlmICgocG9zIFxcdTAwMjYgKGJzaXplIC0gMSkpIFxcdTAwM2MgNCkge1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgdnhmc19kaXJibGsgKmRicCA9XFxuQEAgLTg3LDYgKzg4LDE0IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXFxuIFxcbiBcXHRcXHRcXHRcXHRwb3MgKz0gb3ZlcmhlYWQ7XFxuIFxcdFxcdFxcdFxcdHBnX29mcyArPSBvdmVyaGVhZDtcXG4rXFx0XFx0XFx0XFx0aWYgKHBnX29mcyBcXHUwMDNlPSBQQUdFX1NJWkUpXFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovXFxuK1xcdFxcdFxcdGlmIChwZ19vZnMgKyBWWEZTX05BTUVNSU4gXFx1MDAzZSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZGUgPSAoc3RydWN0IHZ4ZnNfZGlyZWN0ICopKGthZGRyICsgcGdfb2ZzKTtcXG4gXFxuQEAgLTk2LDEyICsxMDUsMjUgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdHBnX29mcyArPSBmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX3JlY2xlbik7XFxuLVxcdFxcdFxcdHBvcyArPSBmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX3JlY2xlbik7XFxuK1xcdFxcdFxcdC8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqL1xcbitcXHRcXHRcXHRyZWNsZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX3JlY2xlbik7XFxuK1xcdFxcdFxcdGlmIChyZWNsZW4gXFx1MDAzYyBWWEZTX05BTUVNSU4gfHxcXG4rXFx0XFx0XFx0ICAgIHBnX29mcyArIHJlY2xlbiBcXHUwMDNlIFBBR0VfU0laRSkge1xcbitcXHRcXHRcXHRcXHRwb3MgKz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cGdfb2ZzICs9IHJlY2xlbjtcXG4rXFx0XFx0XFx0cG9zICs9IHJlY2xlbjtcXG4gXFx0XFx0XFx0aWYgKCFkZS1cXHUwMDNlZF9pbm8pXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0aWYgKG5hbWVsZW4gIT0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9uYW1lbGVuKSlcXG4rXFx0XFx0XFx0LyogdGhlIG5hbWUgbXVzdCBmaXQgaW4gdGhlIHJlY29yZCAqL1xcbitcXHRcXHRcXHRubGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9uYW1lbGVuKTtcXG4rXFx0XFx0XFx0aWYgKFZYRlNfTkFNRU1JTiArIG5sZW4gXFx1MDAzZSByZWNsZW4pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKG5hbWVsZW4gIT0gbmxlbilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdGlmICghbWVtY21wKG5hbWUsIGRlLVxcdTAwM2VkX25hbWUsIG5hbWVsZW4pKSB7XFxuIFxcdFxcdFxcdFxcdCpwcHAgPSBwcDtcXG5AQCAtMjE4LDcgKzI0MCw3IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcHA7XFxuIFxcdFxcdGNoYXIgKmthZGRyO1xcbiBcXHRcXHRpbnQgcGdfb2ZzID0gcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG4tXFx0XFx0aW50IHJjID0gMDtcXG4rXFx0XFx0Ym9vbCBmdWxsID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRwcCA9IHZ4ZnNfZ2V0X3BhZ2UoaXAtXFx1MDAzZWlfbWFwcGluZywgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBwKSlcXG5AQCAtMjI4LDYgKzI1MCw3IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbiBcXG4gXFx0XFx0d2hpbGUgKHBnX29mcyBcXHUwMDNjIFBBR0VfU0laRSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzYyBsaW1pdCkge1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgdnhmc19kaXJlY3QgKmRlO1xcbitcXHRcXHRcXHRpbnQgcmVjbGVuLCBubGVuO1xcbiBcXG4gXFx0XFx0XFx0aWYgKChwb3MgXFx1MDAyNiAoYnNpemUgLSAxKSkgXFx1MDAzYyA0KSB7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCB2eGZzX2RpcmJsayAqZGJwID1cXG5AQCAtMjM3LDYgKzI2MCwxNCBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdFxcdFxcdFxcdHBvcyArPSBvdmVyaGVhZDtcXG4gXFx0XFx0XFx0XFx0cGdfb2ZzICs9IG92ZXJoZWFkO1xcbitcXHRcXHRcXHRcXHRpZiAocGdfb2ZzIFxcdTAwM2U9IFBBR0VfU0laRSlcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qIHRoZSBlbnRyeSBoZWFkZXIgbXVzdCBmaXQgaW4gdGhlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0aWYgKHBnX29mcyArIFZYRlNfTkFNRU1JTiBcXHUwMDNlIFBBR0VfU0laRSkge1xcbitcXHRcXHRcXHRcXHRwb3MgKz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgKyBwZ19vZnMpO1xcbiBcXG5AQCAtMjQ2LDIzICsyNzcsMzUgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRwZ19vZnMgKz0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbi1cXHRcXHRcXHRwb3MgKz0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbitcXHRcXHRcXHQvKiBhbmQgc28gbXVzdCB0aGUgd2hvbGUgcmVjb3JkLCBoZWFkZXIgaW5jbHVkZWQgKi9cXG4rXFx0XFx0XFx0cmVjbGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbitcXHRcXHRcXHRpZiAocmVjbGVuIFxcdTAwM2MgVlhGU19OQU1FTUlOIHx8XFxuK1xcdFxcdFxcdCAgICBwZ19vZnMgKyByZWNsZW4gXFx1MDAzZSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHBnX29mcyArPSByZWNsZW47XFxuK1xcdFxcdFxcdHBvcyArPSByZWNsZW47XFxuIFxcdFxcdFxcdGlmICghZGUtXFx1MDAzZWRfaW5vKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHJjID0gZGlyX2VtaXQoY3R4LCBkZS1cXHUwMDNlZF9uYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX25hbWVsZW4pLFxcbi1cXHRcXHRcXHRcXHRcXHRmczMyX3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX2lubyksXFxuLVxcdFxcdFxcdFxcdFxcdERUX1VOS05PV04pO1xcbi1cXHRcXHRcXHRpZiAoIXJjKSB7XFxuK1xcdFxcdFxcdC8qIHRoZSBuYW1lIG11c3QgZml0IGluIHRoZSByZWNvcmQgKi9cXG4rXFx0XFx0XFx0bmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXFx1MDAzZWRfbmFtZWxlbik7XFxuK1xcdFxcdFxcdGlmIChWWEZTX05BTUVNSU4gKyBubGVuIFxcdTAwM2UgcmVjbGVuKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cXHUwMDNlZF9uYW1lLCBubGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICBmczMyX3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX2lubyksXFxuK1xcdFxcdFxcdFxcdCAgICAgIERUX1VOS05PV04pKSB7XFxuIFxcdFxcdFxcdFxcdC8qIHRoZSBkaXIgZW50cnkgd2FzIG5vdCByZWFkLCBmaXggcG9zLiAqL1xcbi1cXHRcXHRcXHRcXHRwb3MgLT0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbitcXHRcXHRcXHRcXHRwb3MgLT0gcmVjbGVuO1xcbitcXHRcXHRcXHRcXHRmdWxsID0gdHJ1ZTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHR2eGZzX3B1dF9wYWdlKHBwKTtcXG4tXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0aWYgKGZ1bGwpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo0OS43ODI3NTM5ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NjcwNTUzNTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhmc19sb29rdXBcIixcbiAgICBcInZ4ZnNfcmVhZGRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGRpcmVjdG9yeSBlbnRyeSBwYXJzaW5nIGluIGZyZWV2eGZzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlMDM0NTdjMGQwNTA2MzBhNzEzM2JjNDg4NTMwNDMyN2M3MGMwMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA4OjEwOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcbmluZGV4IDEzOGUwOGRlOTc2ZWEuLjUwYzQyOGM2MzEyNjIgMTAwNjQ0XG4tLS0gYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXG4rKysgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXG5AQCAtNzgsNiArNzgsNyBAQCB2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKVxuIFxuIFx0XHR3aGlsZSAocGdfb2ZzIFx1MDAzYyBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IHBvcyBcdTAwM2MgbGltaXQpIHtcbiBcdFx0XHRzdHJ1Y3Qgdnhmc19kaXJlY3QgKmRlO1xuK1x0XHRcdGludCByZWNsZW4sIG5sZW47XG4gXG4gXHRcdFx0aWYgKChwb3MgXHUwMDI2IChic2l6ZSAtIDEpKSBcdTAwM2MgNCkge1xuIFx0XHRcdFx0c3RydWN0IHZ4ZnNfZGlyYmxrICpkYnAgPVxuQEAgLTg3LDYgKzg4LDE0IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXG4gXG4gXHRcdFx0XHRwb3MgKz0gb3ZlcmhlYWQ7XG4gXHRcdFx0XHRwZ19vZnMgKz0gb3ZlcmhlYWQ7XG4rXHRcdFx0XHRpZiAocGdfb2ZzIFx1MDAzZT0gUEFHRV9TSVpFKVxuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0LyogdGhlIGVudHJ5IGhlYWRlciBtdXN0IGZpdCBpbiB0aGUgcGFnZSAqL1xuK1x0XHRcdGlmIChwZ19vZnMgKyBWWEZTX05BTUVNSU4gXHUwMDNlIFBBR0VfU0laRSkge1xuK1x0XHRcdFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcbitcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgKyBwZ19vZnMpO1xuIFxuQEAgLTk2LDEyICsxMDUsMjUgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRwZ19vZnMgKz0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4tXHRcdFx0cG9zICs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuK1x0XHRcdC8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqL1xuK1x0XHRcdHJlY2xlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuK1x0XHRcdGlmIChyZWNsZW4gXHUwMDNjIFZYRlNfTkFNRU1JTiB8fFxuK1x0XHRcdCAgICBwZ19vZnMgKyByZWNsZW4gXHUwMDNlIFBBR0VfU0laRSkge1xuK1x0XHRcdFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRwZ19vZnMgKz0gcmVjbGVuO1xuK1x0XHRcdHBvcyArPSByZWNsZW47XG4gXHRcdFx0aWYgKCFkZS1cdTAwM2VkX2lubylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChuYW1lbGVuICE9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9uYW1lbGVuKSlcbitcdFx0XHQvKiB0aGUgbmFtZSBtdXN0IGZpdCBpbiB0aGUgcmVjb3JkICovXG4rXHRcdFx0bmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9uYW1lbGVuKTtcbitcdFx0XHRpZiAoVlhGU19OQU1FTUlOICsgbmxlbiBcdTAwM2UgcmVjbGVuKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0aWYgKG5hbWVsZW4gIT0gbmxlbilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmICghbWVtY21wKG5hbWUsIGRlLVx1MDAzZWRfbmFtZSwgbmFtZWxlbikpIHtcbiBcdFx0XHRcdCpwcHAgPSBwcDtcbkBAIC0yMTgsNyArMjQwLDcgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdHN0cnVjdCBwYWdlICpwcDtcbiBcdFx0Y2hhciAqa2FkZHI7XG4gXHRcdGludCBwZ19vZnMgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4tXHRcdGludCByYyA9IDA7XG4rXHRcdGJvb2wgZnVsbCA9IGZhbHNlO1xuIFxuIFx0XHRwcCA9IHZ4ZnNfZ2V0X3BhZ2UoaXAtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0XHRpZiAoSVNfRVJSKHBwKSlcbkBAIC0yMjgsNiArMjUwLDcgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXG4gXHRcdHdoaWxlIChwZ19vZnMgXHUwMDNjIFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgcG9zIFx1MDAzYyBsaW1pdCkge1xuIFx0XHRcdHN0cnVjdCB2eGZzX2RpcmVjdCAqZGU7XG4rXHRcdFx0aW50IHJlY2xlbiwgbmxlbjtcbiBcbiBcdFx0XHRpZiAoKHBvcyBcdTAwMjYgKGJzaXplIC0gMSkpIFx1MDAzYyA0KSB7XG4gXHRcdFx0XHRzdHJ1Y3Qgdnhmc19kaXJibGsgKmRicCA9XG5AQCAtMjM3LDYgKzI2MCwxNCBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcbiBcdFx0XHRcdHBvcyArPSBvdmVyaGVhZDtcbiBcdFx0XHRcdHBnX29mcyArPSBvdmVyaGVhZDtcbitcdFx0XHRcdGlmIChwZ19vZnMgXHUwMDNlPSBQQUdFX1NJWkUpXG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovXG4rXHRcdFx0aWYgKHBnX29mcyArIFZYRlNfTkFNRU1JTiBcdTAwM2UgUEFHRV9TSVpFKSB7XG4rXHRcdFx0XHRwb3MgKz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xuK1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHRcdGRlID0gKHN0cnVjdCB2eGZzX2RpcmVjdCAqKShrYWRkciArIHBnX29mcyk7XG4gXG5AQCAtMjQ2LDIzICsyNzcsMzUgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4tXHRcdFx0cGdfb2ZzICs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuLVx0XHRcdHBvcyArPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbitcdFx0XHQvKiBhbmQgc28gbXVzdCB0aGUgd2hvbGUgcmVjb3JkLCBoZWFkZXIgaW5jbHVkZWQgKi9cbitcdFx0XHRyZWNsZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbitcdFx0XHRpZiAocmVjbGVuIFx1MDAzYyBWWEZTX05BTUVNSU4gfHxcbitcdFx0XHQgICAgcGdfb2ZzICsgcmVjbGVuIFx1MDAzZSBQQUdFX1NJWkUpIHtcbitcdFx0XHRcdHBvcyArPSBQQUdFX1NJWkUgLSBwZ19vZnM7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0cGdfb2ZzICs9IHJlY2xlbjtcbitcdFx0XHRwb3MgKz0gcmVjbGVuO1xuIFx0XHRcdGlmICghZGUtXHUwMDNlZF9pbm8pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRyYyA9IGRpcl9lbWl0KGN0eCwgZGUtXHUwMDNlZF9uYW1lLFxuLVx0XHRcdFx0XHRmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbiksXG4tXHRcdFx0XHRcdGZzMzJfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9pbm8pLFxuLVx0XHRcdFx0XHREVF9VTktOT1dOKTtcbi1cdFx0XHRpZiAoIXJjKSB7XG4rXHRcdFx0LyogdGhlIG5hbWUgbXVzdCBmaXQgaW4gdGhlIHJlY29yZCAqL1xuK1x0XHRcdG5sZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbik7XG4rXHRcdFx0aWYgKFZYRlNfTkFNRU1JTiArIG5sZW4gXHUwMDNlIHJlY2xlbilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cdTAwM2VkX25hbWUsIG5sZW4sXG4rXHRcdFx0XHQgICAgICBmczMyX3RvX2NwdShzYmksIGRlLVx1MDAzZWRfaW5vKSxcbitcdFx0XHRcdCAgICAgIERUX1VOS05PV04pKSB7XG4gXHRcdFx0XHQvKiB0aGUgZGlyIGVudHJ5IHdhcyBub3QgcmVhZCwgZml4IHBvcy4gKi9cbi1cdFx0XHRcdHBvcyAtPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbitcdFx0XHRcdHBvcyAtPSByZWNsZW47XG4rXHRcdFx0XHRmdWxsID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHR2eGZzX3B1dF9wYWdlKHBwKTtcbi1cdFx0aWYgKCFyYylcbitcdFx0aWYgKGZ1bGwpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo0OS43ODI3NTUwNDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE3Njg5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZyZWV2eGZzIEZpbGVzeXN0ZW0gU2VjdXJpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyeSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gVGhlIHBhdGNoIGltcGxlbWVudHMgc29tZSBib3VuZHMgY2hlY2tpbmcsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCdzIGxvb2tpbmcgZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgYWNjZXNzIGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgZGlyZWN0b3J5IGVudHJpZXMgd2l0aGluIHRoZSBmcmVldnhmcyBmaWxlc3lzdGVtLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHlvdSB3YW50IHRvIGNhdGNoLlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgY2hlY2tzIHRoZXkndmUgYWRkZWQ6IEl0J3MgY2hlY2tpbmcgY29uZGl0aW9ucyBpbnZvbHZpbmcgYHBnX29mc2AsIGByZWNsZW5gLCBgUEFHRV9TSVpFYCwgYFZYRlNfTkFNRU1JTmAsIGFuZCBgbmxlbmAuIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNpemUgYW5kIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UgYnVmZmVyIGFuZCB0aGUgZGlyZWN0b3J5IGVudHJ5IGl0c2VsZi4gSSBjYW4gc2VlIHdoYXQgdGhleSdyZSBkb2luZzogYHBnX29mcyArIFZYRlNfTkFNRU1JTiBcdTAwM2UgUEFHRV9TSVpFYCwgYHJlY2xlbiBcdTAwM2MgVlhGU19OQU1FTUlOYCwgYHBnX29mcyArIHJlY2xlbiBcdTAwM2UgUEFHRV9TSVpFYCwgYW5kIGBWWEZTX05BTUVNSU4gKyBubGVuIFx1MDAzZSByZWNsZW5gLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBhIHN1cGVyZmljaWFsIG9uZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmVoYXZpb3VyIG9mIHRoZSBmaWxlc3lzdGVtIGRyaXZlci4gQ29uc2VxdWVudGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRoYXQgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLiBBIHNvbGlkIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBiZSBrZXkgdG8gZW5zdXJpbmcgdGhlIGZpeCBpcyByb2J1c3QuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGV2ZW4gdGVzdCB0aGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGZyZWV2eGZzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBmcy9mcmVldnhmcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGZpbGVzeXN0ZW0gc28gSSBjYW4gYWN0dWFsbHkgcnVuIHNvbWUgdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo1NS4wMDA0NDY3NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0OTczMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZYRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcmVldnhmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZnJlZXZ4ZnMvS2NvbmZpZzoyOmNvbmZpZyBWWEZTX0ZTXFxuZnMvZnJlZXZ4ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo1NS4wNDE5NDk4ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE4NTA4OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgVlhGU19GUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBsb29raW5nIGF0IGlzIGBWWEZTX0ZTYC4gUmlnaHQuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJlZm9yZSBJIGdldCBhbnkgZnVydGhlciBpbnRvIGFjdHVhbGx5ICpkb2luZyogYW55dGhpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFueSBjYXNjYWRpbmcgZWZmZWN0cy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIHJlbGF0ZWQgc2V0dGluZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbWlnaHQgdHJpcCBvdmVyPyBJIG5lZWQgdG8gY2hlY2sgZm9yIHVwc3RyZWFtIGltcGxpY2F0aW9ucy4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzLiBHb3R0YSBjb3ZlciBhbGwgYmFzZXMgYmVmb3JlIGV2ZW4gY29uc2lkZXJpbmcgbWFraW5nIGFueSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTA6NTguMDYwNDYxOTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnJlZXZ4ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFZYRlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIEZyZWVWeEZTIGlzIGEgZmlsZSBzeXN0ZW0gZHJpdmVyIHRoYXQgc3VwcG9ydCB0aGUgVkVSSVRBUyBWeEZTKFRNKVxcbiAgIDg6XFx0XFx0ICBmaWxlIHN5c3RlbSBmb3JtYXQuICBWRVJJVEFTIFZ4RlMoVE0pIGlzIHRoZSBzdGFuZGFyZCBmaWxlIHN5c3RlbVxcbiAgIDk6XFx0XFx0ICBvZiBTQ08gVW5peFdhcmUgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGFuZCBvcHRpb25hbGx5IGF2YWlsYWJsZVxcbiAgMTA6XFx0XFx0ICBmb3IgU3Vuc29mdCBTb2xhcmlzLCBIUC1VWCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gSG93ZXZlclxcbiAgMTE6XFx0XFx0ICB0aGVzZSBwYXJ0aWN1bGFyIE9TIGltcGxlbWVudGF0aW9ucyBvZiB2eGZzIG1heSBkaWZmZXIgaW4gb24tZGlza1xcbiAgMTI6XFx0XFx0ICBkYXRhIGVuZGlhbm5lc3MgYW5kL29yIHN1cGVyYmxvY2sgb2Zmc2V0LiBUaGUgdnhmcyBtb2R1bGUgaGFzIGJlZW5cXG4gIDEzOlxcdFxcdCAgdGVzdGVkIHdpdGggU0NPIFVuaXhXYXJlIGFuZCBIUC1VWCBCLjEwLjIwIChwYS1yaXNjIDEuMSBhcmNoLilcXG4gIDE0OlxcdFxcdCAgQ3VycmVudGx5IG9ubHkgcmVhZG9ubHkgYWNjZXNzIGlzIHN1cHBvcnRlZCBhbmQgVnhGWCB2ZXJzaW9uc1xcbiAgMTU6XFx0XFx0ICAyLCAzIGFuZCA0LiBUZXN0cyB3ZXJlIHBlcmZvcm1lZCB3aXRoIEhQLVVYIFZ4RlMgdmVyc2lvbiAzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIE5PVEU6IHRoZSBmaWxlIHN5c3RlbSB0eXBlIGFzIHVzZWQgYnkgbW91bnQoMSksIG1vdW50KDIpIGFuZFxcbiAgMTg6XFx0XFx0ICBmc3RhYig1KSBpcyAndnhmcycgYXMgaXQgZGVzY3JpYmVzIHRoZSBmaWxlIHN5c3RlbSBmb3JtYXQsIG5vdFxcbiAgMTk6XFx0XFx0ICB0aGUgYWN0dWFsIGRyaXZlci5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo1OC4wNjA1MjI1MjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzNjQ0OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxpa2UgSSB3b3VsZCBpbiBteSBvd24gd29yazpcblxuKipBbmFseXppbmcgdGhlIFZYRlMgRmlsZSBTeXN0ZW0gQ29kZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBhIHNwZWNpZmljIGZpbGUgc3lzdGVtIG1vZGlmaWNhdGlvbiwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHBvaW50aW5nIGRpcmVjdGx5IHRvIHRoZSBgQkxPQ0tgIGNvbXBvbmVudC4gTWFrZXMgc2Vuc2UsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYmxvY2stbGV2ZWwgb3BlcmF0aW9ucyB3aXRoaW4gVlhGUy4gVGhlIGNvbmZpZ3VyYXRpb24gaW4gdXNlIGlzIGBWWEZTX0ZTYCB3aGljaCBpcyBhIGdvb2QgcmVtaW5kZXIuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gYHZ4ZnNfZmluZF9lbnRyeWAgaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyBpdCdzIHRpZ2h0bHkgY291cGxlZCB3aXRoIGB2eGZzX2xvb2t1cGAuIFRoYXQgbWVhbnMgYW55IGNoYW5nZXMgdGhlcmUgY291bGQgcmlwcGxlIHVwIHRoZSBjYWxsIGNoYWluLiBgdnhmc19yZWFkZGlyYCBpcyB0aGUgc3RhbmRhcmQgY2FsbGJhY2sgZm9yIHJlYWRpbmcgZW50cmllcyBmcm9tIGEgVlhGUyBkaXJlY3RvcnkuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYHZ4ZnNfZmluZF9lbnRyeWAgaXMgYmVpbmcgdXNlZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlLiBMZXQgbWUgcXVpY2tseSBqdW1wIGludG8gYGZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNgIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBhc3Nlc3MgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA4OjExOjAyLjM4NDE3MDI5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIyOTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2ZpbmRfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTM2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnhmc19kaXJfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDQtLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzo0NTogKiB2eGZzX2ZpbmRfZW50cnkgLSBmaW5kIGEgbWF0aGluZyBkaXJlY3RvcnkgZW50cnkgZm9yIGEgZGVudHJ5XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy00Ni0gKiBAaXA6XFx0XFx0ZGlyZWN0b3J5IGlub2RlXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTUwLSAqIERlc2NyaXB0aW9uOlxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6NTE6ICogICB2eGZzX2ZpbmRfZW50cnkgZmluZHMgYSBcXHUwMDI2c3RydWN0IHZ4ZnNfZGlyZWN0IGZvciB0aGUgVkZTIGRpcmVjdG9yeVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNTItICogICBjYWNoZSBlbnRyeSBAZHAuICBAcHBwIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVyblxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz01OD1zdGF0aWMgc3RydWN0IHZ4ZnNfZGlyZWN0ICpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjU5OnZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy02MC17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1Nj12eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNjEtXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxNjI6XFx0ZGUgPSB2eGZzX2ZpbmRfZW50cnkoZGlwLCBkcCwgXFx1MDAyNnBwKTtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE2My1cXHRpZiAoZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MDIuNDI3NDA0NjYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0ODIzMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlIGZsb3c6XG5cbioqQW5hbHl6aW5nIHRoZSBgdnhmc2AgRmlsZXN5c3RlbSBMb29rdXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHZ4ZnNgIGhhbmRsZXMgbG9va3Vwcy4gUmlnaHQgbm93LCBJJ3ZlIGdvdCBteSBleWVzIG9uIGB2eGZzX2ZpbmRfZW50cnlgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQncyBhIGhlbHBmdWwgc3RhcnRpbmcgcG9pbnQsIGl0IG1lYW5zIEkgZG9uJ3QgaGF2ZSB0byB0cmFjZSBpdCBmcm9tIHRvbyBmYXIgYWZpZWxkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBgdnhmc19maW5kX2VudHJ5YCBpcyBjYWxsZWQgYnkgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAuIE5vdywgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXMgY2xlYXJseSB0aGUgYnJpZGdlIGZ1bmN0aW9uIGhlcmUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBBbmQgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBgdnhmc19sb29rdXBgLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIHN0YXJ0cy4gU28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBkcml2ZW4gdGhyb3VnaCB0aGUgYHZ4ZnNfbG9va3VwYCBmdW5jdGlvbi4gU2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGlnIGludG8gYHZ4ZnNfbG9va3VwYCBhbmQgdW5kZXJzdGFuZCBob3cgaXQgdXNlcyB0aGUgb3RoZXIgZnVuY3Rpb25zIEkganVzdCBtZW50aW9uZWQuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgaGllcmFyY2h5IGZvciBhIGZpbGVzeXN0ZW0gbG9va3VwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MDUuOTc1NjM5NTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUyMjE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjgtXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyOTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqXFx0dnhmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMwLXN0YXRpYyBpbnRcXHRcXHR2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0zMj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzozMzpcXHQubG9va3VwID1cXHRcXHR2eGZzX2xvb2t1cCxcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM0LX07XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1Nj12eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNzItLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxNzM6ICogdnhmc19sb29rdXAgLSBsb29rdXAgcGF0aG5hbWUgY29tcG9uZW50XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNzQtICogQGRpcDpcXHRkaXIgaW4gd2hpY2ggd2UgbG9va3VwXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE3OC0gKiBEZXNjcmlwdGlvbjpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE3OTogKiAgIHZ4ZnNfbG9va3VwIHRyaWVzIHRvIGxvb2t1cCB0aGUgcGF0aG5hbWUgY29tcG9uZW50IGRlc2NyaWJlZFxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTgwLSAqICAgYnkgQGRwIGluIEBkaXAuXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE4Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxODc6dnhmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTowNi4wMTcxNjQ1MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NDcyNzc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBFbnRyeSBQb2ludHMgaW4gdGhlIFZYRlMgRmlsZXN5c3RlbSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIG5haWwgZG93biB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBWWEZTIGZpbGVzeXN0ZW0gZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAgd2VyZSB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbnMgd2UnZCBiZSBjYWxsaW5nLCB0aGUga2V5IGludGVyZmFjZXMuIEhvd2V2ZXIsIGhhbmcgb24uLi4gbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYz8gQSBzdGF0aWMgZGVjbGFyYXRpb24gd291bGQgbWVhbiB0aGV5J3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUgYW5kIG5vdCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlLiBIbW0sIGxldCBtZSBjb25maXJtIHRoZWlyIHN0YXRpYyBkZXNpZ25hdGlvbi4uLiBhbmQgYHZ4ZnNfcmVhZGRpcmAgYXMgd2VsbC4gUmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA4OjExOjA5LjY4MTg5NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTI1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4ZnNfcmVhZGRpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9Mjk9c3RhdGljIHN0cnVjdCBkZW50cnkgKlxcdHZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzozMDpzdGF0aWMgaW50XFx0XFx0dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMxLVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0zNj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM4LVxcdC5yZWFkID1cXHRcXHRcXHRnZW5lcmljX3JlYWRfZGlyLFxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6Mzk6XFx0Lml0ZXJhdGVfc2hhcmVkID1cXHR2eGZzX3JlYWRkaXIsXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy00MC1cXHQuc2V0bGVhc2UgPVxcdFxcdGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE4Nz12eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcCwgc3RydWN0IGRlbnRyeSAqZHAsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjAxLS8qKlxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjAyOiAqIHZ4ZnNfcmVhZGRpciAtIHJlYWQgYSBkaXJlY3RvcnlcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTIwMy0gKiBAZnA6XFx0XFx0dGhlIGRpcmVjdG9yeSB0byByZWFkXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTIwNi0gKiBEZXNjcmlwdGlvbjpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjIwNzogKiAgIHZ4ZnNfcmVhZGRpciBmaWxscyBAcmV0cCB3aXRoIGRpcmVjdG9yeSBlbnRyaWVzIGZyb20gQGZwXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMDgtICogICB1c2luZyB0aGUgVkZTIHN1cHBsaWVkIGNhbGxiYWNrIEBmaWxsZXIuXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTIxMz1zdGF0aWMgaW50XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyMTQ6dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTowOS43MjM4MjM2NzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDM4MDQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTdGF0aWMgRnVuY3Rpb24gVXNhZ2UgaW4gRnJlZVZ4RlMgRGlyZWN0b3J5IE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdHdvIHRoaW5nczogdGhlIGRpcmVjdG9yeSBpbm9kZSBvcGVyYXRpb25zIChgdnhmc19kaXJfaW5vZGVfb3BzYCkgYW5kIHRoZSBtb3JlIGdlbmVyYWwgZGlyZWN0b3J5IG9wZXJhdGlvbnMgKGB2eGZzX2Rpcl9vcGVyYXRpb25zYCkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBib3RoIG9mIHRoZW0gYXBwZWFyIHRvIGJlIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiB0aGUgRnJlZVZ4RlMgZmlsZXN5c3RlbSBjb2RlLlxuXG5UaGUgZmFjdCB0aGV5J3JlIHN0YXRpYyBzdWdnZXN0cyBlbmNhcHN1bGF0aW9uLCB0aGF0IHRoZXkgYXJlIG5vdCBkaXJlY3RseSBleHBvc2VkIG91dHNpZGUgdGhlaXIgZGVmaW5lZCBtb2R1bGUuIEhvd2V2ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBiZWNvbWVzOiBhcmUgdGhlc2Ugc3RhdGljIGltcGxlbWVudGF0aW9ucyB1c2VkIGludGVybmFsbHksIG9yIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jYCB0aGF0IGNhbGwgdGhlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsc2l0ZXMgb2YgdGhpcyBtb2R1bGUgdG8gYmUgY2VydGFpbiBpZiB0aGVyZSBpcyBhbnkgcHVibGljIHVzZSBvZiB0aGlzIGludGVybmFsIGZ1bmN0aW9uYWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBpbXBvcnRhbnQuIFVuZGVyc3RhbmRpbmcgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGZpbGVzeXN0ZW0ncyBleHBvcnRhYmxlIGludGVyZmFjZXMgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MTQuMDE4MjA2NzczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA0NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz01OD1zdGF0aWMgc3RydWN0IHZ4ZnNfZGlyZWN0ICpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjU5OnZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy02MC17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1NT1zdGF0aWMgaW5vX3RcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE1Njp2eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTU3LXtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE4Nzp2eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcCwgc3RydWN0IGRlbnRyeSAqZHAsIHVuc2lnbmVkIGludCBmbGFncylcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE4OC17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTIxMz1zdGF0aWMgaW50XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyMTQ6dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMToxNC4wNjAyNTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzM4OTI0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTY29wZSBvZiBgdnhmc19sb29rdXAuY2AgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jYC4gVGhlIGZpcnN0IHRoaW5nIEknbSBub3RpY2luZyBpcyB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGdlbmVyYWxseSBpbXBsaWVzIHRoZXkncmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5LCBjb25maW5lZCB0byB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCB3YWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBJIHNlZSBgdnhmc19kaXJfaW5vZGVfb3BzYCBhbmQgYHZ4ZnNfZGlyX29wZXJhdGlvbnNgIGRlY2xhcmVkIGhlcmUsIGFuZCBJIGhhdmUgYSBmZWVsaW5nIHRoZXkgYXJlIHVzZWQgZWxzZXdoZXJlLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgdGhlaXIgcG90ZW50aWFsIGJyb2FkZXIgYXBwbGljYWJpbGl0eSwgbWF5YmUgZXZlbiBleHBvcnRlZCBmdW5jdGlvbmFsaXR5LiBJIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gVGltZSB0byBjb25maXJtIG9yIGRpc3BlbCB0aGlzIGltbWVkaWF0ZWx5LiBMZXQncyB0cmFjZSB0aGVpciB1c2FnZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgbXkgaW5pdGlhbCBpbnRlcm5hbC1vbmx5IGFzc3VtcHRpb24gaXMgY29ycmVjdCBvciBpZiB0aGV5J3JlIGFjdHVhbGx5IGludGVyZmFjZSBjb21wb25lbnRzLiBOZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSBhcmUgdXRpbGl6ZWQgaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MTguMjM0MTUwMzE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg0NDE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2Rpcl9pbm9kZV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzQ9ZXh0ZXJuIHZvaWRcXHRcXHRcXHR2eGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmgtMzYtLyogdnhmc19sb29rdXAuYyAqL1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zXFx0dnhmc19kaXJfaW5vZGVfb3BzO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmgtMzgtZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnNcXHR2eGZzX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTI1MT12eGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGlub190IGlubylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNzktXFx0fSBlbHNlIGlmIChTX0lTRElSKGlwLVxcdTAwM2VpX21vZGUpKSB7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI4MDpcXHRcXHRpcC1cXHUwMDNlaV9vcCA9IFxcdTAwMjZ2eGZzX2Rpcl9pbm9kZV9vcHM7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI4MS1cXHRcXHRpcC1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2dnhmc19kaXJfb3BlcmF0aW9ucztcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MzA9c3RhdGljIGludFxcdFxcdHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjMyOmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX2lub2RlX29wcyA9IHtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMzLVxcdC5sb29rdXAgPVxcdFxcdHZ4ZnNfbG9va3VwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMToxOC4yNzQ5OTc3MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4NTY2Nzc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBTeW1ib2wgVmlzaWJpbGl0eSBpbiBGcmVldnhmcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBGcmVldnhmcy4gVGhlIGluc3RydWN0aW9ucyBJJ3ZlIGJlZW4gZ2l2ZW4gYXJlIHByZXR0eSBjbGVhcjogZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBpc3N1ZSBpcywgSSdtIHRyeWluZyB0byBlbnN1cmUgdGhhdCB3aGVuIHRoZSBjb21waWxlciBpcyBkb25lIGl0IHVzZXMgdGhlIGNvcnJlY3Qgc3ltYm9scy5cblxuSSBzZWUgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCAqc2hvdWxkKiBoYXZlIGRpc3RpbmN0IGFkZHJlc3Nlcywgc2luY2UgdGhleSdyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzLiBJIGtub3cgdGhhdCBpZiB0aGV5IHdlcmUgZnVsbHkgaW5saW5lZCwgdGhleSB3b3VsZG4ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCwgYmVjYXVzZSB0aGV5J3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciAqY2FuJ3QqIGlubGluZSB0aGVtIGNvbXBsZXRlbHkuXG5cbkJ1dCB3YWl0LCBhcmUgdGhlcmUgb3RoZXIgb3B0aW9ucz8gTWF5YmUgdGhlcmUgYXJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBGcmVldnhmcyB0aGF0ICpjb3VsZCogc2VydmUgdGhlIHB1cnBvc2UsIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gdXNlPyBgdnhmc19pZ2V0YCBhbmQgYHZ4ZnNfZmlsbF9zdXBlcmAgc3ByaW5nIHRvIG1pbmQgYXMgcG9zc2liaWxpdGllcy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlbSBvdXQgaW4gdGhlIHNvdXJjZSBjb2RlIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMToyMy44NjA2NjczOTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzU3OTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2ZpbGxfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYz0xMjU9c3RhdGljIGludCB2eGZzX3RyeV9zYl9tYWdpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE2OS0vKipcXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MTcwOiAqIHZ4ZnNfZmlsbF9zdXBlciAtIHJlYWQgc3VwZXJibG9jayBpbnRvIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBmaWxlc3lzdGVtXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE3MS0gKiBAc2JwOlxcdFxcdFZGUyBzdXBlcmJsb2NrICh0byBmaWxsKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE4My0gKi9cXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MTg0OnN0YXRpYyBpbnQgdnhmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE4NS17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM9Mjg3PXN0YXRpYyBpbnQgdnhmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI4OC17XFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jOjI4OTpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgdnhmc19maWxsX3N1cGVyKTtcXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMjkwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MjQuMTc4MjUyMjc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDE0NDE1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBTdGF0aWMgRnVuY3Rpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIGB2eGZzX2ZpbGxfc3VwZXJgIGlzIGZsYWdnZWQgYXMgYHN0YXRpY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gaXRzIGNvbnRleHQuIEdpdmVuIHRoYXQsIGxldCBtZSBwaXZvdCBteSBmb2N1cyB0byBpdHMgcG90ZW50aWFsIGNvdW50ZXJwYXJ0LCBgdnhmc19pZ2V0YC4gSXQgaXMgY3JpdGljYWwgdG8gZ3Jhc3AgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0gZGVzaWduLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIGB2eGZzX2lnZXRgIGlzIGFsc28gc3RhdGljLiBJZiBpdCBpcywgdGhpcyBtZWFucyBib3RoIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHNjb3BlZCBvbmx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGVzeXN0ZW0gbW9kdWxlLiBUaGlzIGltcGxpZXMgdGhhdCBteSBpbnZlc3RpZ2F0aW9uIHNob3VsZCBiZSBmb2N1c2VkIHNwZWNpZmljYWxseSBvbiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYHZ4ZnNfaWdldGAgb3IgYHZ4ZnNfZmlsbF9zdXBlcmAuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgZnVuY3Rpb25zLCBpZiBgdnhmc19pZ2V0YCBpcyBhbHNvIHN0YXRpYywgdGhpcyBoZWxwcyBtZSBxdWlja2x5IHVuZGVyc3RhbmQgc2NvcGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZmlsZXN5c3RlbSBkZXNpZ24gaXMgbGlrZWx5IG1vZHVsYXIgYW5kIGludGVybmFsIHRvIHRoZSBWWEZTIGltcGxlbWVudGF0aW9uLiBOb3cgbGV0J3Mgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MjcuNjE5Njk1ODk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc5NDU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2lnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzI9ZXh0ZXJuIHN0cnVjdCBpbm9kZVxcdFxcdCp2eGZzX3N0aWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6MzM6ZXh0ZXJuIHN0cnVjdCBpbm9kZVxcdFxcdCp2eGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTtcXG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM0LWV4dGVybiB2b2lkXFx0XFx0XFx0dnhmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM9NzY9c3RhdGljIGlubGluZSB2b2lkIGRpcDJ2aXBfY3B5KHN0cnVjdCB2eGZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xMzEtICogTk9URTpcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MTMyOiAqICBXaGlsZSBfX3Z4ZnNfaWdldCB1c2VzIHRoZSBwYWdlY2FjaGUgdnhmc19ibGtpZ2V0IHVzZXMgdGhlXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTEzMy0gKiAgYnVmZmVyY2FjaGUuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIHRoZVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTEzNz12eGZzX2Jsa2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIHVfbG9uZyBleHRlbnQsIGlub190IGlubylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xNzItLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjE3MzogKiBfX3Z4ZnNfaWdldCAtIGdlbmVyaWMgZmluZCBpbm9kZSBmYWNpbGl0eVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xNzQtICogQGlsaXN0cDpcXHRcXHRpbm9kZSBsaXN0XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM9MTgzPXN0YXRpYyBpbnRcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MTg0Ol9fdnhmc19pZ2V0KHN0cnVjdCBpbm9kZSAqaWxpc3RwLCBzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvICp2aXAsIGlub190IGlubylcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMTg1LXtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0yMjI9dnhmc19zdGlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGlub190IGlubylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yMzEtXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjIzMjpcXHRlcnJvciA9IF9fdnhmc19pZ2V0KFZYRlNfU0JJKHNicCktXFx1MDAzZXZzaV9zdGlsaXN0LCBWWEZTX0lOTyhpbm9kZSksIGlubyk7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTIzMy1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNDEtLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI0MjogKiB2eGZzX2lnZXQgLSBnZXQgYW4gaW5vZGVcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMjQzLSAqIEBzYnA6XFx0dGhlIHN1cGVyYmxvY2sgdG8gZ2V0IHRoZSBpbm9kZSBmb3JcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0yNTA9c3RydWN0IGlub2RlICpcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MjUxOnZ4ZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgaW5vX3QgaW5vKVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNTIte1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI2NC1cXHR2aXAgPSBWWEZTX0lOTyhpcCk7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI2NTpcXHRlcnJvciA9IF9fdnhmc19pZ2V0KFZYRlNfU0JJKHNicCktXFx1MDAzZXZzaV9pbGlzdCwgdmlwLCBpbm8pO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNjYtXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE4Nz12eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcCwgc3RydWN0IGRlbnRyeSAqZHAsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk2LVxcdGlmIChpbm8pXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxOTc6XFx0XFx0aXAgPSB2eGZzX2lnZXQoZGlwLVxcdTAwM2VpX3NiLCBpbm8pO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk4LVxcdHJldHVybiBkX3NwbGljZV9hbGlhcyhpcCwgZHApO1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jPTE4ND1zdGF0aWMgaW50IHZ4ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI2MC1cXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MjYxOlxcdHJvb3QgPSB2eGZzX2lnZXQoc2JwLCBWWEZTX1JPT1RfSU5PKTtcXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMjYyLVxcdGlmIChJU19FUlIocm9vdCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MjcuNjYzNDkzNjM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjIzMDg5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVlhGUyBTeW1ib2wgSW5jbHVzaW9uKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHZ4ZnNfaWdldGAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBzbyB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgaW5jbHVzaW9uIGZvciBGb2N1c1N5bWJvbHMuIE5vdywgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAg4oCTIHRoZXkncmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkncmUgKnVzZWQqIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgdnhmc19kaXJfaW5vZGVfb3BzYCBhbmQgYHZ4ZnNfZGlyX29wZXJhdGlvbnNgLCB3aGljaCBtZWFucyB0aGV5J3JlIG5vdCBpbmxpbmVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gZmF2b3Igbm9uLXN0YXRpYywgKm5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMhIEknbGwgYWJzb2x1dGVseSBpbmNsdWRlIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgLiBJJ2xsIGFsc28gaW5jbHVkZSBgdnhmc19pZ2V0YCB0byBiZSBleHRyYSBzdXJlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBgVlhGU19GU2AgaXMgdGhlIG9ubHkgb25lLiBPa2F5LCB3YWl0IGEgbWludXRlLCBgVlhGU19GU2AgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQkxPQ0tgIGlzIGEgY29tbW9uIHN1YnN5c3RlbSBjb25maWcuIFdoaWxlIGl0J3MgcHJvYmFibHkgYWx3YXlzIGVuYWJsZWQsIGl0J3MgZ29vZCBwcmFjdGljZSB0byBpbmNsdWRlIHBhcmVudHMuIEknbGwgc3RpY2sgd2l0aCBqdXN0IGluY2x1ZGluZyBgVlhGU19GU2AgZm9yIG5vdy5cblxuUmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgYHZ4ZnNfZmluZF9lbnRyeWAgYW5kIGB2eGZzX3JlYWRkaXJgLiBgdnhmc19maW5kX2VudHJ5YCBpcyBzdGF0aWMgYW5kIGdldHMgY2FsbGVkIGZyb20gYHZ4ZnNfaW5vZGVfYnlfbmFtZWAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgYHZ4ZnNfbG9va3VwYC4gVGhpcyBjb25maXJtcyB0aGF0IGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFyZSBpbmRlZWQgdGhlIGNvcmUgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBmb2N1cyBvbi5cblxuT2theSwgbGV0IG1lIGp1c3QgcXVpY2tseSByZXZpZXcgYGZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTozNC45MjU4MDU0MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgQ2hyaXN0b3BoIEhlbGx3aWcuXFxuICAgNDpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgS3J6eXN6dG9mIEJsYXN6a293c2tpXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0LypcXG4gICA4OlxcdCAqIFZlcml0YXMgZmlsZXN5c3RlbSBkcml2ZXIgLSBsb29rdXAgYW5kIG90aGVyIGRpcmVjdG9yeSByZWxhdGVkIGNvZGUuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlnaG1lbS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0I2luY2x1ZGUgXFxcInZ4ZnMuaFxcXCJcXG4gIDE5OlxcdCNpbmNsdWRlIFxcXCJ2eGZzX2Rpci5oXFxcIlxcbiAgMjA6XFx0I2luY2x1ZGUgXFxcInZ4ZnNfaW5vZGUuaFxcXCJcXG4gIDIxOlxcdCNpbmNsdWRlIFxcXCJ2eGZzX2V4dGVybi5oXFxcIlxcbiAgMjI6XFx0XFxuICAyMzpcXHQvKlxcbiAgMjQ6XFx0ICogTnVtYmVyIG9mIFZ4RlMgYmxvY2tzIHBlciBwYWdlLlxcbiAgMjU6XFx0ICovXFxuICAyNjpcXHQjZGVmaW5lIFZYRlNfQkxPQ0tfUEVSX1BBR0Uoc2JwKSAgKChQQUdFX1NJWkUgLyAoc2JwKS1cXHUwMDNlc19ibG9ja3NpemUpKVxcbiAgMjc6XFx0XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcXHR2eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCB1bnNpZ25lZCBpbnQpO1xcbiAgMzA6XFx0c3RhdGljIGludFxcdFxcdHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX2lub2RlX29wcyA9IHtcXG4gIDMzOlxcdFxcdC5sb29rdXAgPVxcdFxcdHZ4ZnNfbG9va3VwLFxcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9vcGVyYXRpb25zID0ge1xcbiAgMzc6XFx0XFx0Lmxsc2VlayA9XFx0XFx0Z2VuZXJpY19maWxlX2xsc2VlayxcXG4gIDM4OlxcdFxcdC5yZWFkID1cXHRcXHRcXHRnZW5lcmljX3JlYWRfZGlyLFxcbiAgMzk6XFx0XFx0Lml0ZXJhdGVfc2hhcmVkID1cXHR2eGZzX3JlYWRkaXIsXFxuICA0MDpcXHRcXHQuc2V0bGVhc2UgPVxcdFxcdGdlbmVyaWNfc2V0bGVhc2UsXFxuICA0MTpcXHR9O1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXG4gIDQ0OlxcdC8qKlxcbiAgNDU6XFx0ICogdnhmc19maW5kX2VudHJ5IC0gZmluZCBhIG1hdGhpbmcgZGlyZWN0b3J5IGVudHJ5IGZvciBhIGRlbnRyeVxcbiAgNDY6XFx0ICogQGlwOlxcdFxcdGRpcmVjdG9yeSBpbm9kZVxcbiAgNDc6XFx0ICogQGRwOlxcdFxcdGRlbnRyeSBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIGEgZGlyZWN0XFxuICA0ODpcXHQgKiBAcHBwOlxcdGdldHMgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVybiB2YWx1ZSBzaXRzIGluXFxuICA0OTpcXHQgKlxcbiAgNTA6XFx0ICogRGVzY3JpcHRpb246XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA4OjExOjM0LjkyNTkzMTE0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQ0MDg0Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIFZYRlMgTW9kdWxlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHJldmlld2luZyB0aGUgVlhGUyBjb2RlIGFuZCB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgYW5hbHl6ZSBpdHMgYmVoYXZpb3IuIEkgbm90aWNlZCB0aGF0IGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgd2l0aGluIHRoZSBtb2R1bGUuIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0IHRoYXQsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGV2ZW4gdGhvdWdoIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIGFzc2lnbmVkIHRvIGdsb2JhbCBzdHJ1Y3RzLCBzcGVjaWZpY2FsbHkgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYC4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGNhbid0IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCB0aGVyZWZvcmUgaGF2ZSBkaXN0aW5jdCwgcmVhZGlseSBpZGVudGlmaWFibGUgc3ltYm9sIGFkZHJlc3Nlcy4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgY2FuZGlkYXRlcyB0byBzZXJ2ZSBhcyBGb2N1c1N5bWJvbHMsIGFsbG93aW5nIG1lIHRvIHRhcmdldCBzcGVjaWZpYyBleGVjdXRpb24gcGF0aHMuXG5cblRoZXJlZm9yZSwgSSdsbCBkZWZpbml0ZWx5IGJlIHVzaW5nIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gQWx0aG91Z2ggSSBjb3VsZCBhbHNvIGNvbnNpZGVyIGB2eGZzX2lnZXRgIHNpbmNlIGl0J3MgYSBub24tc3RhdGljIGVudHJ5IHBvaW50LCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCBzZWVtIGxpa2UgdGhlIG1vcmUgZGlyZWN0IGNob2ljZXMgZ2l2ZW4gdGhlaXIgcm9sZSBpbiBjYWxsaW5nIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgVlhGU19GU2AgaXMgdGhlIG9idmlvdXMgb25lLCBvZiBjb3Vyc2UsIHRoYXQncyBhIGdpdmVuLiBgQkxPQ0tgIHNlZW1zIHN0YW5kYXJkIGVub3VnaC4gQnV0IEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlcmUgYXJlbid0IGFueSBvdGhlciBvYnNjdXJlIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBhY2NvdW50IGZvciB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgcGljdHVyZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTo0MS4yNzAwMTc3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNzEzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcmVldnhmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL0tjb25maWc9Mj1jb25maWcgVlhGU19GU1xcbmZzL2ZyZWV2eGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRnJlZVZ4RlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoVkVSSVRBUyBWeEZTKFRNKSBjb21wYXRpYmxlKVxcXCJcXG5mcy9mcmVldnhmcy9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2ZyZWV2eGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6NDEuMzExMDkzMTc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDA0NTc3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZ4ZnNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgYWxsIGFib3V0IGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiBgdnhmc19maW5kX2VudHJ5YCBhbmQgYHZ4ZnNfcmVhZGRpcmAuIE5vIG90aGVyIGNoYW5nZXMgYXJlIGludm9sdmVkLCB3aGljaCBtYWtlcyB0aGluZ3Mgc2ltcGxlci4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgZml4LCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIGJ1Zy4gR2l2ZW4gaXRzIG5hdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBpbnRlZ3JpdHksIGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgaGVyZS5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmbGFnIGl0IGFzIHN1Y2guIEknbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gRm9jdXNpbmcgdGhlIGZ1enppbmcgZWZmb3J0IGlzIGFsc28gaW1wb3J0YW50LiBJ4oCZbGwgbWFrZSBzdXJlIHRoZSBmdXp6ZXIgaGl0cyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHNvIEnigJlsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYFtcInZ4ZnNfbG9va3VwXCIsIFwidnhmc19yZWFkZGlyXCJdYC4gSSdsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgVlhGU19GU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIHdpdGggYEVuYWJsZUNvbmZpZ3M6IFtcIlZYRlNfRlNcIl1gLCBzaW5jZSB0aGlzIGlzIGEgZmlsZXN5c3RlbSBkcml2ZXIuXG5cbk15IHJlYXNvbmluZyBmb3IgdGhlc2Ugc2V0dGluZ3MgaXMgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhY2tsZXMgYm91bmRzIGNoZWNraW5nIGR1cmluZyBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiB0aGUgYGZyZWV2eGZzYCBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNsZWFybHkgaW52b2x2ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCB0byB1bmNvdmVyIGFueSBsYXRlbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMiwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTo0Ni40MTE1NTM4MjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjczMjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ4ZnNfbG9va3VwXCIsXG4gICAgXCJ2eGZzX3JlYWRkaXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiBmcmVldnhmcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGZzX2xvb2t1cFwiLFxuICAgIFwidnhmc19yZWFkZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gZnJlZXZ4ZnMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 07:08:36 +0000 UTC FinishedAt: 2026-08-04 08:11:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ff226ef519115e017dbcebb0ef1142081f449b95", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ff226ef519115e017dbcebb0ef1142081f449b95", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXFS_FS" ], "series_id": "a8befdeb-27d9-42f0-804f-0921e93f01e5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vxfs_lookup", "vxfs_readdir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGZzX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt2eGZzX3JlYWRkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gZnJlZXZ4ZnMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJlMDM0NTdjMGQwNTA2MzBhNzEzM2JjNDg4NTMwNDMyN2M3MGMwMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA4OjEwOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXG5pbmRleCAxMzhlMDhkZTk3NmVhLi41MGM0MjhjNjMxMjYyIDEwMDY0NFxuLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY1xuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXG4gXG4gXHRcdHdoaWxlIChwZ19vZnMgXHUwMDNjIFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgcG9zIFx1MDAzYyBsaW1pdCkge1xuIFx0XHRcdHN0cnVjdCB2eGZzX2RpcmVjdCAqZGU7XG4mIzQzO1x0XHRcdGludCByZWNsZW4sIG5sZW47XG4gXG4gXHRcdFx0aWYgKChwb3MgXHUwMDI2IChic2l6ZSAtIDEpKSBcdTAwM2MgNCkge1xuIFx0XHRcdFx0c3RydWN0IHZ4ZnNfZGlyYmxrICpkYnAgPVxuQEAgLTg3LDYgJiM0Mzs4OCwxNCBAQCB2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKVxuIFxuIFx0XHRcdFx0cG9zICYjNDM7PSBvdmVyaGVhZDtcbiBcdFx0XHRcdHBnX29mcyAmIzQzOz0gb3ZlcmhlYWQ7XG4mIzQzO1x0XHRcdFx0aWYgKHBnX29mcyBcdTAwM2U9IFBBR0VfU0laRSlcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHQvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovXG4mIzQzO1x0XHRcdGlmIChwZ19vZnMgJiM0MzsgVlhGU19OQU1FTUlOIFx1MDAzZSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mcztcbiYjNDM7XHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0ZGUgPSAoc3RydWN0IHZ4ZnNfZGlyZWN0ICopKGthZGRyICYjNDM7IHBnX29mcyk7XG4gXG5AQCAtOTYsMTIgJiM0MzsxMDUsMjUgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRwZ19vZnMgJiM0Mzs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuLVx0XHRcdHBvcyAmIzQzOz0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4mIzQzO1x0XHRcdC8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqL1xuJiM0MztcdFx0XHRyZWNsZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJlY2xlbiBcdTAwM2MgVlhGU19OQU1FTUlOIHx8XG4mIzQzO1x0XHRcdCAgICBwZ19vZnMgJiM0MzsgcmVjbGVuIFx1MDAzZSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mcztcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cGdfb2ZzICYjNDM7PSByZWNsZW47XG4mIzQzO1x0XHRcdHBvcyAmIzQzOz0gcmVjbGVuO1xuIFx0XHRcdGlmICghZGUtXHUwMDNlZF9pbm8pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAobmFtZWxlbiAhPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbikpXG4mIzQzO1x0XHRcdC8qIHRoZSBuYW1lIG11c3QgZml0IGluIHRoZSByZWNvcmQgKi9cbiYjNDM7XHRcdFx0bmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9uYW1lbGVuKTtcbiYjNDM7XHRcdFx0aWYgKFZYRlNfTkFNRU1JTiAmIzQzOyBubGVuIFx1MDAzZSByZWNsZW4pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobmFtZWxlbiAhPSBubGVuKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKCFtZW1jbXAobmFtZSwgZGUtXHUwMDNlZF9uYW1lLCBuYW1lbGVuKSkge1xuIFx0XHRcdFx0KnBwcCA9IHBwO1xuQEAgLTIxOCw3ICYjNDM7MjQwLDcgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdHN0cnVjdCBwYWdlICpwcDtcbiBcdFx0Y2hhciAqa2FkZHI7XG4gXHRcdGludCBwZ19vZnMgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4tXHRcdGludCByYyA9IDA7XG4mIzQzO1x0XHRib29sIGZ1bGwgPSBmYWxzZTtcbiBcbiBcdFx0cHAgPSB2eGZzX2dldF9wYWdlKGlwLVx1MDAzZWlfbWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdFx0aWYgKElTX0VSUihwcCkpXG5AQCAtMjI4LDYgJiM0MzsyNTAsNyBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcbiBcdFx0d2hpbGUgKHBnX29mcyBcdTAwM2MgUEFHRV9TSVpFIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNjIGxpbWl0KSB7XG4gXHRcdFx0c3RydWN0IHZ4ZnNfZGlyZWN0ICpkZTtcbiYjNDM7XHRcdFx0aW50IHJlY2xlbiwgbmxlbjtcbiBcbiBcdFx0XHRpZiAoKHBvcyBcdTAwMjYgKGJzaXplIC0gMSkpIFx1MDAzYyA0KSB7XG4gXHRcdFx0XHRzdHJ1Y3Qgdnhmc19kaXJibGsgKmRicCA9XG5AQCAtMjM3LDYgJiM0MzsyNjAsMTQgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXG4gXHRcdFx0XHRwb3MgJiM0Mzs9IG92ZXJoZWFkO1xuIFx0XHRcdFx0cGdfb2ZzICYjNDM7PSBvdmVyaGVhZDtcbiYjNDM7XHRcdFx0XHRpZiAocGdfb2ZzIFx1MDAzZT0gUEFHRV9TSVpFKVxuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIHRoZSBlbnRyeSBoZWFkZXIgbXVzdCBmaXQgaW4gdGhlIHBhZ2UgKi9cbiYjNDM7XHRcdFx0aWYgKHBnX29mcyAmIzQzOyBWWEZTX05BTUVNSU4gXHUwMDNlIFBBR0VfU0laRSkge1xuJiM0MztcdFx0XHRcdHBvcyAmIzQzOz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgJiM0MzsgcGdfb2ZzKTtcbiBcbkBAIC0yNDYsMjMgJiM0MzsyNzcsMzUgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4tXHRcdFx0cGdfb2ZzICYjNDM7PSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbi1cdFx0XHRwb3MgJiM0Mzs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuJiM0MztcdFx0XHQvKiBhbmQgc28gbXVzdCB0aGUgd2hvbGUgcmVjb3JkLCBoZWFkZXIgaW5jbHVkZWQgKi9cbiYjNDM7XHRcdFx0cmVjbGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4mIzQzO1x0XHRcdGlmIChyZWNsZW4gXHUwMDNjIFZYRlNfTkFNRU1JTiB8fFxuJiM0MztcdFx0XHQgICAgcGdfb2ZzICYjNDM7IHJlY2xlbiBcdTAwM2UgUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRcdFx0cG9zICYjNDM7PSBQQUdFX1NJWkUgLSBwZ19vZnM7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHBnX29mcyAmIzQzOz0gcmVjbGVuO1xuJiM0MztcdFx0XHRwb3MgJiM0Mzs9IHJlY2xlbjtcbiBcdFx0XHRpZiAoIWRlLVx1MDAzZWRfaW5vKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0cmMgPSBkaXJfZW1pdChjdHgsIGRlLVx1MDAzZWRfbmFtZSxcbi1cdFx0XHRcdFx0ZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX25hbWVsZW4pLFxuLVx0XHRcdFx0XHRmczMyX3RvX2NwdShzYmksIGRlLVx1MDAzZWRfaW5vKSxcbi1cdFx0XHRcdFx0RFRfVU5LTk9XTik7XG4tXHRcdFx0aWYgKCFyYykge1xuJiM0MztcdFx0XHQvKiB0aGUgbmFtZSBtdXN0IGZpdCBpbiB0aGUgcmVjb3JkICovXG4mIzQzO1x0XHRcdG5sZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbik7XG4mIzQzO1x0XHRcdGlmIChWWEZTX05BTUVNSU4gJiM0MzsgbmxlbiBcdTAwM2UgcmVjbGVuKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFkaXJfZW1pdChjdHgsIGRlLVx1MDAzZWRfbmFtZSwgbmxlbixcbiYjNDM7XHRcdFx0XHQgICAgICBmczMyX3RvX2NwdShzYmksIGRlLVx1MDAzZWRfaW5vKSxcbiYjNDM7XHRcdFx0XHQgICAgICBEVF9VTktOT1dOKSkge1xuIFx0XHRcdFx0LyogdGhlIGRpciBlbnRyeSB3YXMgbm90IHJlYWQsIGZpeCBwb3MuICovXG4tXHRcdFx0XHRwb3MgLT0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4mIzQzO1x0XHRcdFx0cG9zIC09IHJlY2xlbjtcbiYjNDM7XHRcdFx0XHRmdWxsID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHR2eGZzX3B1dF9wYWdlKHBwKTtcbi1cdFx0aWYgKCFyYylcbiYjNDM7XHRcdGlmIChmdWxsKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWWEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnhmc19sb29rdXAmIzM0OywKICAgICYjMzQ7dnhmc19yZWFkZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGRpcmVjdG9yeSBlbnRyeSBwYXJzaW5nIGluIGZyZWV2eGZzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZTAzNDU3YzBkMDUwNjMwYTcxMzNiYzQ4ODUzMDQzMjdjNzBjMDI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAwODoxMDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jCmluZGV4IDEzOGUwOGRlOTc2ZWEuLjUwYzQyOGM2MzEyNjIgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYwpAQCAtNzgsNiAmIzQzOzc4LDcgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcCkKIAogCQl3aGlsZSAocGdfb2ZzICZsdDsgUEFHRV9TSVpFICZhbXA7JmFtcDsgcG9zICZsdDsgbGltaXQpIHsKIAkJCXN0cnVjdCB2eGZzX2RpcmVjdCAqZGU7CiYjNDM7CQkJaW50IHJlY2xlbiwgbmxlbjsKIAogCQkJaWYgKChwb3MgJmFtcDsgKGJzaXplIC0gMSkpICZsdDsgNCkgewogCQkJCXN0cnVjdCB2eGZzX2RpcmJsayAqZGJwID0KQEAgLTg3LDYgJiM0Mzs4OCwxNCBAQCB2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKQogCiAJCQkJcG9zICYjNDM7PSBvdmVyaGVhZDsKIAkJCQlwZ19vZnMgJiM0Mzs9IG92ZXJoZWFkOwomIzQzOwkJCQlpZiAocGdfb2ZzICZndDs9IFBBR0VfU0laRSkKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovCiYjNDM7CQkJaWYgKHBnX29mcyAmIzQzOyBWWEZTX05BTUVNSU4gJmd0OyBQQUdFX1NJWkUpIHsKJiM0MzsJCQkJcG9zICYjNDM7PSBQQUdFX1NJWkUgLSBwZ19vZnM7CiYjNDM7CQkJCWJyZWFrOwogCQkJfQogCQkJZGUgPSAoc3RydWN0IHZ4ZnNfZGlyZWN0ICopKGthZGRyICYjNDM7IHBnX29mcyk7CiAKQEAgLTk2LDEyICYjNDM7MTA1LDI1IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApCiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCXBnX29mcyAmIzQzOz0gZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9yZWNsZW4pOwotCQkJcG9zICYjNDM7PSBmczE2X3RvX2NwdShzYmksIGRlLSZndDtkX3JlY2xlbik7CiYjNDM7CQkJLyogYW5kIHNvIG11c3QgdGhlIHdob2xlIHJlY29yZCwgaGVhZGVyIGluY2x1ZGVkICovCiYjNDM7CQkJcmVjbGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9yZWNsZW4pOwomIzQzOwkJCWlmIChyZWNsZW4gJmx0OyBWWEZTX05BTUVNSU4gfHwKJiM0MzsJCQkgICAgcGdfb2ZzICYjNDM7IHJlY2xlbiAmZ3Q7IFBBR0VfU0laRSkgewomIzQzOwkJCQlwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mczsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXBnX29mcyAmIzQzOz0gcmVjbGVuOwomIzQzOwkJCXBvcyAmIzQzOz0gcmVjbGVuOwogCQkJaWYgKCFkZS0mZ3Q7ZF9pbm8pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChuYW1lbGVuICE9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfbmFtZWxlbikpCiYjNDM7CQkJLyogdGhlIG5hbWUgbXVzdCBmaXQgaW4gdGhlIHJlY29yZCAqLwomIzQzOwkJCW5sZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLSZndDtkX25hbWVsZW4pOwomIzQzOwkJCWlmIChWWEZTX05BTUVNSU4gJiM0MzsgbmxlbiAmZ3Q7IHJlY2xlbikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJaWYgKG5hbWVsZW4gIT0gbmxlbikKIAkJCQljb250aW51ZTsKIAkJCWlmICghbWVtY21wKG5hbWUsIGRlLSZndDtkX25hbWUsIG5hbWVsZW4pKSB7CiAJCQkJKnBwcCA9IHBwOwpAQCAtMjE4LDcgJiM0MzsyNDAsNyBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIAkJc3RydWN0IHBhZ2UgKnBwOwogCQljaGFyICprYWRkcjsKIAkJaW50IHBnX29mcyA9IHBvcyAmYW1wOyB+UEFHRV9NQVNLOwotCQlpbnQgcmMgPSAwOwomIzQzOwkJYm9vbCBmdWxsID0gZmFsc2U7CiAKIAkJcHAgPSB2eGZzX2dldF9wYWdlKGlwLSZndDtpX21hcHBpbmcsIHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAkJaWYgKElTX0VSUihwcCkpCkBAIC0yMjgsNiAmIzQzOzI1MCw3IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCiAJCXdoaWxlIChwZ19vZnMgJmx0OyBQQUdFX1NJWkUgJmFtcDsmYW1wOyBwb3MgJmx0OyBsaW1pdCkgewogCQkJc3RydWN0IHZ4ZnNfZGlyZWN0ICpkZTsKJiM0MzsJCQlpbnQgcmVjbGVuLCBubGVuOwogCiAJCQlpZiAoKHBvcyAmYW1wOyAoYnNpemUgLSAxKSkgJmx0OyA0KSB7CiAJCQkJc3RydWN0IHZ4ZnNfZGlyYmxrICpkYnAgPQpAQCAtMjM3LDYgJiM0MzsyNjAsMTQgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCiAKIAkJCQlwb3MgJiM0Mzs9IG92ZXJoZWFkOwogCQkJCXBnX29mcyAmIzQzOz0gb3ZlcmhlYWQ7CiYjNDM7CQkJCWlmIChwZ19vZnMgJmd0Oz0gUEFHRV9TSVpFKQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qIHRoZSBlbnRyeSBoZWFkZXIgbXVzdCBmaXQgaW4gdGhlIHBhZ2UgKi8KJiM0MzsJCQlpZiAocGdfb2ZzICYjNDM7IFZYRlNfTkFNRU1JTiAmZ3Q7IFBBR0VfU0laRSkgewomIzQzOwkJCQlwb3MgJiM0Mzs9IFBBR0VfU0laRSAtIHBnX29mczsKJiM0MzsJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgJiM0MzsgcGdfb2ZzKTsKIApAQCAtMjQ2LDIzICYjNDM7Mjc3LDM1IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlwZ19vZnMgJiM0Mzs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfcmVjbGVuKTsKLQkJCXBvcyAmIzQzOz0gZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9yZWNsZW4pOwomIzQzOwkJCS8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqLwomIzQzOwkJCXJlY2xlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfcmVjbGVuKTsKJiM0MzsJCQlpZiAocmVjbGVuICZsdDsgVlhGU19OQU1FTUlOIHx8CiYjNDM7CQkJICAgIHBnX29mcyAmIzQzOyByZWNsZW4gJmd0OyBQQUdFX1NJWkUpIHsKJiM0MzsJCQkJcG9zICYjNDM7PSBQQUdFX1NJWkUgLSBwZ19vZnM7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlwZ19vZnMgJiM0Mzs9IHJlY2xlbjsKJiM0MzsJCQlwb3MgJiM0Mzs9IHJlY2xlbjsKIAkJCWlmICghZGUtJmd0O2RfaW5vKQogCQkJCWNvbnRpbnVlOwogCi0JCQlyYyA9IGRpcl9lbWl0KGN0eCwgZGUtJmd0O2RfbmFtZSwKLQkJCQkJZnMxNl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9uYW1lbGVuKSwKLQkJCQkJZnMzMl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9pbm8pLAotCQkJCQlEVF9VTktOT1dOKTsKLQkJCWlmICghcmMpIHsKJiM0MzsJCQkvKiB0aGUgbmFtZSBtdXN0IGZpdCBpbiB0aGUgcmVjb3JkICovCiYjNDM7CQkJbmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtJmd0O2RfbmFtZWxlbik7CiYjNDM7CQkJaWYgKFZYRlNfTkFNRU1JTiAmIzQzOyBubGVuICZndDsgcmVjbGVuKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRpcl9lbWl0KGN0eCwgZGUtJmd0O2RfbmFtZSwgbmxlbiwKJiM0MzsJCQkJICAgICAgZnMzMl90b19jcHUoc2JpLCBkZS0mZ3Q7ZF9pbm8pLAomIzQzOwkJCQkgICAgICBEVF9VTktOT1dOKSkgewogCQkJCS8qIHRoZSBkaXIgZW50cnkgd2FzIG5vdCByZWFkLCBmaXggcG9zLiAqLwotCQkJCXBvcyAtPSBmczE2X3RvX2NwdShzYmksIGRlLSZndDtkX3JlY2xlbik7CiYjNDM7CQkJCXBvcyAtPSByZWNsZW47CiYjNDM7CQkJCWZ1bGwgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXZ4ZnNfcHV0X3BhZ2UocHApOwotCQlpZiAoIXJjKQomIzQzOwkJaWYgKGZ1bGwpCiAJCQlicmVhazsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGcmVldnhmcyBGaWxlc3lzdGVtIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyeSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBgdnhmc19maW5kX2VudHJ5YCBhbmQgYHZ4ZnNfcmVhZGRpcmAuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHNvbWUgYm91bmRzIGNoZWNraW5nLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gSXQmIzM5O3MgbG9va2luZyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciBhY2Nlc3MgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBkaXJlY3RvcnkgZW50cmllcyB3aXRoaW4gdGhlIGZyZWV2eGZzIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91IHdhbnQgdG8gY2F0Y2guCgpMZXQgbWUgYnJlYWsgZG93biB0aGUgY2hlY2tzIHRoZXkmIzM5O3ZlIGFkZGVkOiBJdCYjMzk7cyBjaGVja2luZyBjb25kaXRpb25zIGludm9sdmluZyBgcGdfb2ZzYCwgYHJlY2xlbmAsIGBQQUdFX1NJWkVgLCBgVlhGU19OQU1FTUlOYCwgYW5kIGBubGVuYC4gVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGUgcGFnZSBidWZmZXIgYW5kIHRoZSBkaXJlY3RvcnkgZW50cnkgaXRzZWxmLiBJIGNhbiBzZWUgd2hhdCB0aGV5JiMzOTtyZSBkb2luZzogYHBnX29mcyAmIzQzOyBWWEZTX05BTUVNSU4gJmd0OyBQQUdFX1NJWkVgLCBgcmVjbGVuICZsdDsgVlhGU19OQU1FTUlOYCwgYHBnX29mcyAmIzQzOyByZWNsZW4gJmd0OyBQQUdFX1NJWkVgLCBhbmQgYFZYRlNfTkFNRU1JTiAmIzQzOyBubGVuICZndDsgcmVjbGVuYC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGEgc3VwZXJmaWNpYWwgb25lLiBJdCBtb2RpZmllcyB0aGUgY29yZSBiZWhhdmlvdXIgb2YgdGhlIGZpbGVzeXN0ZW0gZHJpdmVyLiBDb25zZXF1ZW50bHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBhYnNvbHV0ZWx5IG5lZWRzIGZ1enppbmcuIEEgc29saWQgZnV6emluZyBjYW1wYWlnbiB3aWxsIGJlIGtleSB0byBlbnN1cmluZyB0aGUgZml4IGlzIHJvYnVzdC4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGV2ZW4gdGVzdCB0aGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGZyZWV2eGZzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZnMvZnJlZXZ4ZnMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJIG5lZWQgdG8gZW5hYmxlIHRoaXMgZmlsZXN5c3RlbSBzbyBJIGNhbiBhY3R1YWxseSBydW4gc29tZSB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlhGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZnJlZXZ4ZnMvS2NvbmZpZzoyOmNvbmZpZyBWWEZTX0ZTXG5mcy9mcmVldnhmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqRGVsdmluZyBpbnRvIHRoZSBWWEZTX0ZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCBpcyBgVlhGU19GU2AuIFJpZ2h0LiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyIGludG8gYWN0dWFsbHkgKmRvaW5nKiBhbnl0aGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBoYXMgYW55IGNhc2NhZGluZyBlZmZlY3RzLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgcmVsYXRlZCBzZXR0aW5ncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBtaWdodCB0cmlwIG92ZXI/IEkgbmVlZCB0byBjaGVjayBmb3IgdXBzdHJlYW0gaW1wbGljYXRpb25zLiBUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGNvdmVyIGFsbCBiYXNlcyBiZWZvcmUgZXZlbiBjb25zaWRlcmluZyBtYWtpbmcgYW55IGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcmVldnhmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFZYRlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyZWVWeEZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKFZFUklUQVMgVnhGUyhUTSkgY29tcGF0aWJsZSlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBGcmVlVnhGUyBpcyBhIGZpbGUgc3lzdGVtIGRyaXZlciB0aGF0IHN1cHBvcnQgdGhlIFZFUklUQVMgVnhGUyhUTSlcbiAgIDg6XHRcdCAgZmlsZSBzeXN0ZW0gZm9ybWF0LiAgVkVSSVRBUyBWeEZTKFRNKSBpcyB0aGUgc3RhbmRhcmQgZmlsZSBzeXN0ZW1cbiAgIDk6XHRcdCAgb2YgU0NPIFVuaXhXYXJlIChhbmQgcG9zc2libHkgb3RoZXJzKSBhbmQgb3B0aW9uYWxseSBhdmFpbGFibGVcbiAgMTA6XHRcdCAgZm9yIFN1bnNvZnQgU29sYXJpcywgSFAtVVggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuIEhvd2V2ZXJcbiAgMTE6XHRcdCAgdGhlc2UgcGFydGljdWxhciBPUyBpbXBsZW1lbnRhdGlvbnMgb2YgdnhmcyBtYXkgZGlmZmVyIGluIG9uLWRpc2tcbiAgMTI6XHRcdCAgZGF0YSBlbmRpYW5uZXNzIGFuZC9vciBzdXBlcmJsb2NrIG9mZnNldC4gVGhlIHZ4ZnMgbW9kdWxlIGhhcyBiZWVuXG4gIDEzOlx0XHQgIHRlc3RlZCB3aXRoIFNDTyBVbml4V2FyZSBhbmQgSFAtVVggQi4xMC4yMCAocGEtcmlzYyAxLjEgYXJjaC4pXG4gIDE0Olx0XHQgIEN1cnJlbnRseSBvbmx5IHJlYWRvbmx5IGFjY2VzcyBpcyBzdXBwb3J0ZWQgYW5kIFZ4RlggdmVyc2lvbnNcbiAgMTU6XHRcdCAgMiwgMyBhbmQgNC4gVGVzdHMgd2VyZSBwZXJmb3JtZWQgd2l0aCBIUC1VWCBWeEZTIHZlcnNpb24gMy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgTk9URTogdGhlIGZpbGUgc3lzdGVtIHR5cGUgYXMgdXNlZCBieSBtb3VudCgxKSwgbW91bnQoMikgYW5kXG4gIDE4Olx0XHQgIGZzdGFiKDUpIGlzICYjMzk7dnhmcyYjMzk7IGFzIGl0IGRlc2NyaWJlcyB0aGUgZmlsZSBzeXN0ZW0gZm9ybWF0LCBub3RcbiAgMTk6XHRcdCAgdGhlIGFjdHVhbCBkcml2ZXIuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbGlrZSBJIHdvdWxkIGluIG15IG93biB3b3JrOgoKKipBbmFseXppbmcgdGhlIFZYRlMgRmlsZSBTeXN0ZW0gQ29kZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgc3BlY2lmaWMgZmlsZSBzeXN0ZW0gbW9kaWZpY2F0aW9uLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcG9pbnRpbmcgZGlyZWN0bHkgdG8gdGhlIGBCTE9DS2AgY29tcG9uZW50LiBNYWtlcyBzZW5zZSwgcHJvYmFibHkgcmVsYXRlZCB0byBibG9jay1sZXZlbCBvcGVyYXRpb25zIHdpdGhpbiBWWEZTLiBUaGUgY29uZmlndXJhdGlvbiBpbiB1c2UgaXMgYFZYRlNfRlNgIHdoaWNoIGlzIGEgZ29vZCByZW1pbmRlci4KClRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gYHZ4ZnNfZmluZF9lbnRyeWAgaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgd2l0aCBgdnhmc19sb29rdXBgLiBUaGF0IG1lYW5zIGFueSBjaGFuZ2VzIHRoZXJlIGNvdWxkIHJpcHBsZSB1cCB0aGUgY2FsbCBjaGFpbi4gYHZ4ZnNfcmVhZGRpcmAgaXMgdGhlIHN0YW5kYXJkIGNhbGxiYWNrIGZvciByZWFkaW5nIGVudHJpZXMgZnJvbSBhIFZYRlMgZGlyZWN0b3J5LgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgdnhmc19maW5kX2VudHJ5YCBpcyBiZWluZyB1c2VkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGZzX2ZpbmRfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MzY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDQtLyoqXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjQ1OiAqIHZ4ZnNfZmluZF9lbnRyeSAtIGZpbmQgYSBtYXRoaW5nIGRpcmVjdG9yeSBlbnRyeSBmb3IgYSBkZW50cnlcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDYtICogQGlwOlx0XHRkaXJlY3RvcnkgaW5vZGVcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTUwLSAqIERlc2NyaXB0aW9uOlxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzo1MTogKiAgIHZ4ZnNfZmluZF9lbnRyeSBmaW5kcyBhIFx1MDAyNnN0cnVjdCB2eGZzX2RpcmVjdCBmb3IgdGhlIFZGUyBkaXJlY3RvcnlcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNTItICogICBjYWNoZSBlbnRyeSBAZHAuICBAcHBwIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVyblxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9NTg9c3RhdGljIHN0cnVjdCB2eGZzX2RpcmVjdCAqXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjU5OnZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTYwLXtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1Nj12eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTYxLVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxNjI6XHRkZSA9IHZ4ZnNfZmluZF9lbnRyeShkaXAsIGRwLCBcdTAwMjZwcCk7XG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE2My1cdGlmIChkZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBmbG93OgoKKipBbmFseXppbmcgdGhlIGB2eGZzYCBGaWxlc3lzdGVtIExvb2t1cCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB2eGZzYCBoYW5kbGVzIGxvb2t1cHMuIFJpZ2h0IG5vdywgSSYjMzk7dmUgZ290IG15IGV5ZXMgb24gYHZ4ZnNfZmluZF9lbnRyeWAuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGF0JiMzOTtzIGEgaGVscGZ1bCBzdGFydGluZyBwb2ludCwgaXQgbWVhbnMgSSBkb24mIzM5O3QgaGF2ZSB0byB0cmFjZSBpdCBmcm9tIHRvbyBmYXIgYWZpZWxkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBgdnhmc19maW5kX2VudHJ5YCBpcyBjYWxsZWQgYnkgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAuIE5vdywgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXMgY2xlYXJseSB0aGUgYnJpZGdlIGZ1bmN0aW9uIGhlcmUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBBbmQgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBgdnhmc19sb29rdXBgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBzdGFydHMuIFNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgZHJpdmVuIHRocm91Z2ggdGhlIGB2eGZzX2xvb2t1cGAgZnVuY3Rpb24uIFNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIGB2eGZzX2xvb2t1cGAgYW5kIHVuZGVyc3RhbmQgaG93IGl0IHVzZXMgdGhlIG90aGVyIGZ1bmN0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGhpZXJhcmNoeSBmb3IgYSBmaWxlc3lzdGVtIGxvb2t1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhmc19sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjgtXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjI5OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcdHZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7XG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMwLXN0YXRpYyBpbnRcdFx0dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTMyPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX2lub2RlX29wcyA9IHtcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MzM6XHQubG9va3VwID1cdFx0dnhmc19sb29rdXAsXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM0LX07XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0xNTY9dnhmc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcClcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE3Mi0vKipcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTczOiAqIHZ4ZnNfbG9va3VwIC0gbG9va3VwIHBhdGhuYW1lIGNvbXBvbmVudFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNzQtICogQGRpcDpcdGRpciBpbiB3aGljaCB3ZSBsb29rdXBcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE3OC0gKiBEZXNjcmlwdGlvbjpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTc5OiAqICAgdnhmc19sb29rdXAgdHJpZXMgdG8gbG9va3VwIHRoZSBwYXRobmFtZSBjb21wb25lbnQgZGVzY3JpYmVkXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE4MC0gKiAgIGJ5IEBkcCBpbiBAZGlwLlxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTg3OnZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBGdW5jdGlvbiBFbnRyeSBQb2ludHMgaW4gdGhlIFZYRlMgRmlsZXN5c3RlbSBEcml2ZXIqKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgdGhlIFZYRlMgZmlsZXN5c3RlbSBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCB3ZXJlIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB3ZSYjMzk7ZCBiZSBjYWxsaW5nLCB0aGUga2V5IGludGVyZmFjZXMuIEhvd2V2ZXIsIGhhbmcgb24uLi4gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29kZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogYXJlIHRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSBkZWNsYXJlZCBhcyBzdGF0aWM/IEEgc3RhdGljIGRlY2xhcmF0aW9uIHdvdWxkIG1lYW4gdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSBhbmQgbm90IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUuIEhtbSwgbGV0IG1lIGNvbmZpcm0gdGhlaXIgc3RhdGljIGRlc2lnbmF0aW9uLi4uIGFuZCBgdnhmc19yZWFkZGlyYCBhcyB3ZWxsLiBSaWdodCwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZXNlIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGZzX3JlYWRkaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9Mjk9c3RhdGljIHN0cnVjdCBkZW50cnkgKlx0dnhmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MzA6c3RhdGljIGludFx0XHR2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMS1cbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTM2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnhmc19kaXJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM4LVx0LnJlYWQgPVx0XHRcdGdlbmVyaWNfcmVhZF9kaXIsXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjM5Olx0Lml0ZXJhdGVfc2hhcmVkID1cdHZ4ZnNfcmVhZGRpcixcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDAtXHQuc2V0bGVhc2UgPVx0XHRnZW5lcmljX3NldGxlYXNlLFxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg3PXZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjAxLS8qKlxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyMDI6ICogdnhmc19yZWFkZGlyIC0gcmVhZCBhIGRpcmVjdG9yeVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMDMtICogQGZwOlx0XHR0aGUgZGlyZWN0b3J5IHRvIHJlYWRcbi0tXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTIwNi0gKiBEZXNjcmlwdGlvbjpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjA3OiAqICAgdnhmc19yZWFkZGlyIGZpbGxzIEByZXRwIHdpdGggZGlyZWN0b3J5IGVudHJpZXMgZnJvbSBAZnBcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjA4LSAqICAgdXNpbmcgdGhlIFZGUyBzdXBwbGllZCBjYWxsYmFjayBAZmlsbGVyLlxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MjEzPXN0YXRpYyBpbnRcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjE0OnZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA1CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU3RhdGljIEZ1bmN0aW9uIFVzYWdlIGluIEZyZWVWeEZTIERpcmVjdG9yeSBPcGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIHRoaW5nczogdGhlIGRpcmVjdG9yeSBpbm9kZSBvcGVyYXRpb25zIChgdnhmc19kaXJfaW5vZGVfb3BzYCkgYW5kIHRoZSBtb3JlIGdlbmVyYWwgZGlyZWN0b3J5IG9wZXJhdGlvbnMgKGB2eGZzX2Rpcl9vcGVyYXRpb25zYCkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBib3RoIG9mIHRoZW0gYXBwZWFyIHRvIGJlIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCByYWlzZXMgYSBxdWVzdGlvbiBhYm91dCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBGcmVlVnhGUyBmaWxlc3lzdGVtIGNvZGUuCgpUaGUgZmFjdCB0aGV5JiMzOTtyZSBzdGF0aWMgc3VnZ2VzdHMgZW5jYXBzdWxhdGlvbiwgdGhhdCB0aGV5IGFyZSBub3QgZGlyZWN0bHkgZXhwb3NlZCBvdXRzaWRlIHRoZWlyIGRlZmluZWQgbW9kdWxlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gYmVjb21lczogYXJlIHRoZXNlIHN0YXRpYyBpbXBsZW1lbnRhdGlvbnMgdXNlZCBpbnRlcm5hbGx5LCBvciBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AgdGhhdCBjYWxsIHRoZW0/IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbHNpdGVzIG9mIHRoaXMgbW9kdWxlIHRvIGJlIGNlcnRhaW4gaWYgdGhlcmUgaXMgYW55IHB1YmxpYyB1c2Ugb2YgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50LiBVbmRlcnN0YW5kaW5nIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGV4cG9ydGFibGUgaW50ZXJmYWNlcyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTU4PXN0YXRpYyBzdHJ1Y3Qgdnhmc19kaXJlY3QgKlxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzo1OTp2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy02MC17XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0xNTU9c3RhdGljIGlub190XG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE1Njp2eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNTcte1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTg3OnZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xODgte1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MjEzPXN0YXRpYyBpbnRcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjE0OnZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTY29wZSBvZiBgdnhmc19sb29rdXAuY2AgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBub3RpY2luZyBpcyB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGdlbmVyYWxseSBpbXBsaWVzIHRoZXkmIzM5O3JlIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSwgY29uZmluZWQgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBCdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gSSBzZWUgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCBkZWNsYXJlZCBoZXJlLCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGV5IGFyZSB1c2VkIGVsc2V3aGVyZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIGF0IHRoZWlyIHBvdGVudGlhbCBicm9hZGVyIGFwcGxpY2FiaWxpdHksIG1heWJlIGV2ZW4gZXhwb3J0ZWQgZnVuY3Rpb25hbGl0eS4gSSBjYW4mIzM5O3QgYXNzdW1lIGFueXRoaW5nLiBUaW1lIHRvIGNvbmZpcm0gb3IgZGlzcGVsIHRoaXMgaW1tZWRpYXRlbHkuIExldCYjMzk7cyB0cmFjZSB0aGVpciB1c2FnZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgbXkgaW5pdGlhbCBpbnRlcm5hbC1vbmx5IGFzc3VtcHRpb24gaXMgY29ycmVjdCBvciBpZiB0aGV5JiMzOTtyZSBhY3R1YWxseSBpbnRlcmZhY2UgY29tcG9uZW50cy4gTmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgYXJlIHV0aWxpemVkIGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhmc19kaXJfaW5vZGVfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzQ9ZXh0ZXJuIHZvaWRcdFx0XHR2eGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM2LS8qIHZ4ZnNfbG9va3VwLmMgKi9cbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zXHR2eGZzX2Rpcl9pbm9kZV9vcHM7XG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM4LWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zXHR2eGZzX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0yNTE9dnhmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCBpbm9fdCBpbm8pXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI3OS1cdH0gZWxzZSBpZiAoU19JU0RJUihpcC1cdTAwM2VpX21vZGUpKSB7XG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MjgwOlx0XHRpcC1cdTAwM2VpX29wID0gXHUwMDI2dnhmc19kaXJfaW5vZGVfb3BzO1xuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI4MS1cdFx0aXAtXHUwMDNlaV9mb3AgPSBcdTAwMjZ2eGZzX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MzA9c3RhdGljIGludFx0XHR2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MzI6Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdnhmc19kaXJfaW5vZGVfb3BzID0ge1xuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMy1cdC5sb29rdXAgPVx0XHR2eGZzX2xvb2t1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBTeW1ib2wgVmlzaWJpbGl0eSBpbiBGcmVldnhmcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAgZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIEZyZWV2eGZzLiBUaGUgaW5zdHJ1Y3Rpb25zIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYXJlIHByZXR0eSBjbGVhcjogZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBpc3N1ZSBpcywgSSYjMzk7bSB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgd2hlbiB0aGUgY29tcGlsZXIgaXMgZG9uZSBpdCB1c2VzIHRoZSBjb3JyZWN0IHN5bWJvbHMuCgpJIHNlZSB0aGF0IGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgICpzaG91bGQqIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzLCBzaW5jZSB0aGV5JiMzOTtyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzLiBJIGtub3cgdGhhdCBpZiB0aGV5IHdlcmUgZnVsbHkgaW5saW5lZCwgdGhleSB3b3VsZG4mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBCdXQsIGJlY2F1c2UgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSB0aGVtIGNvbXBsZXRlbHkuCgpCdXQgd2FpdCwgYXJlIHRoZXJlIG90aGVyIG9wdGlvbnM/IE1heWJlIHRoZXJlIGFyZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gRnJlZXZ4ZnMgdGhhdCAqY291bGQqIHNlcnZlIHRoZSBwdXJwb3NlLCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlIHRvIHVzZT8gYHZ4ZnNfaWdldGAgYW5kIGB2eGZzX2ZpbGxfc3VwZXJgIHNwcmluZyB0byBtaW5kIGFzIHBvc3NpYmlsaXRpZXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZW0gb3V0IGluIHRoZSBzb3VyY2UgY29kZSBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4ZnNfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcmVldnhmcy92eGZzX3N1cGVyLmM9MTI1PXN0YXRpYyBpbnQgdnhmc190cnlfc2JfbWFnaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbi0tXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMTY5LS8qKlxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jOjE3MDogKiB2eGZzX2ZpbGxfc3VwZXIgLSByZWFkIHN1cGVyYmxvY2sgaW50byBtZW1vcnkgYW5kIGluaXRpYWxpemUgZmlsZXN5c3RlbVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE3MS0gKiBAc2JwOlx0XHRWRlMgc3VwZXJibG9jayAodG8gZmlsbClcbi0tXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMTgzLSAqL1xuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jOjE4NDpzdGF0aWMgaW50IHZ4ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE4NS17XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jPTI4Nz1zdGF0aWMgaW50IHZ4ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI4OC17XG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6Mjg5Olx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIHZ4ZnNfZmlsbF9zdXBlcik7XG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMjkwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBTdGF0aWMgRnVuY3Rpb24gQ29udGV4dCoqCgpPa2F5LCBzbyBgdnhmc19maWxsX3N1cGVyYCBpcyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGluIGl0cyBjb250ZXh0LiBHaXZlbiB0aGF0LCBsZXQgbWUgcGl2b3QgbXkgZm9jdXMgdG8gaXRzIHBvdGVudGlhbCBjb3VudGVycGFydCwgYHZ4ZnNfaWdldGAuIEl0IGlzIGNyaXRpY2FsIHRvIGdyYXNwIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGZpbGUgc3lzdGVtIGRlc2lnbi4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaWYgYHZ4ZnNfaWdldGAgaXMgYWxzbyBzdGF0aWMuIElmIGl0IGlzLCB0aGlzIG1lYW5zIGJvdGggZnVuY3Rpb25zIGFyZSBsaWtlbHkgc2NvcGVkIG9ubHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgZmlsZXN5c3RlbSBtb2R1bGUuIFRoaXMgaW1wbGllcyB0aGF0IG15IGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGZvY3VzZWQgc3BlY2lmaWNhbGx5IG9uIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBgdnhmc19pZ2V0YCBvciBgdnhmc19maWxsX3N1cGVyYC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgZnVuY3Rpb25zLCBpZiBgdnhmc19pZ2V0YCBpcyBhbHNvIHN0YXRpYywgdGhpcyBoZWxwcyBtZSBxdWlja2x5IHVuZGVyc3RhbmQgc2NvcGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZmlsZXN5c3RlbSBkZXNpZ24gaXMgbGlrZWx5IG1vZHVsYXIgYW5kIGludGVybmFsIHRvIHRoZSBWWEZTIGltcGxlbWVudGF0aW9uLiBOb3cgbGV0JiMzOTtzIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhmc19pZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzI9ZXh0ZXJuIHN0cnVjdCBpbm9kZVx0XHQqdnhmc19zdGlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6MzM6ZXh0ZXJuIHN0cnVjdCBpbm9kZVx0XHQqdnhmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7XG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM0LWV4dGVybiB2b2lkXHRcdFx0dnhmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTc2PXN0YXRpYyBpbmxpbmUgdm9pZCBkaXAydmlwX2NweShzdHJ1Y3Qgdnhmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTEzMS0gKiBOT1RFOlxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjEzMjogKiAgV2hpbGUgX192eGZzX2lnZXQgdXNlcyB0aGUgcGFnZWNhY2hlIHZ4ZnNfYmxraWdldCB1c2VzIHRoZVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTEzMy0gKiAgYnVmZmVyY2FjaGUuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIHRoZVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0xMzc9dnhmc19ibGtpZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCB1X2xvbmcgZXh0ZW50LCBpbm9fdCBpbm8pXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTE3Mi0vKipcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYzoxNzM6ICogX192eGZzX2lnZXQgLSBnZW5lcmljIGZpbmQgaW5vZGUgZmFjaWxpdHlcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xNzQtICogQGlsaXN0cDpcdFx0aW5vZGUgbGlzdFxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0xODM9c3RhdGljIGludFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjE4NDpfX3Z4ZnNfaWdldChzdHJ1Y3QgaW5vZGUgKmlsaXN0cCwgc3RydWN0IHZ4ZnNfaW5vZGVfaW5mbyAqdmlwLCBpbm9fdCBpbm8pXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMTg1LXtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM9MjIyPXZ4ZnNfc3RpZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCBpbm9fdCBpbm8pXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTIzMS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYzoyMzI6XHRlcnJvciA9IF9fdnhmc19pZ2V0KFZYRlNfU0JJKHNicCktXHUwMDNldnNpX3N0aWxpc3QsIFZYRlNfSU5PKGlub2RlKSwgaW5vKTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yMzMtXHRpZiAoZXJyb3IpIHtcbi0tXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMjQxLS8qKlxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI0MjogKiB2eGZzX2lnZXQgLSBnZXQgYW4gaW5vZGVcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNDMtICogQHNicDpcdHRoZSBzdXBlcmJsb2NrIHRvIGdldCB0aGUgaW5vZGUgZm9yXG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTI1MD1zdHJ1Y3QgaW5vZGUgKlxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI1MTp2eGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGlub190IGlubylcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNTIte1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNjQtXHR2aXAgPSBWWEZTX0lOTyhpcCk7XG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MjY1Olx0ZXJyb3IgPSBfX3Z4ZnNfaWdldChWWEZTX1NCSShzYnApLVx1MDAzZXZzaV9pbGlzdCwgdmlwLCBpbm8pO1xuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI2Ni1cdGlmIChlcnJvcikge1xuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg3PXZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk2LVx0aWYgKGlubylcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MTk3Olx0XHRpcCA9IHZ4ZnNfaWdldChkaXAtXHUwMDNlaV9zYiwgaW5vKTtcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk4LVx0cmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlwLCBkcCk7XG4tLVxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jPTE4ND1zdGF0aWMgaW50IHZ4ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYy0yNjAtXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MjYxOlx0cm9vdCA9IHZ4ZnNfaWdldChzYnAsIFZYRlNfUk9PVF9JTk8pO1xuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI2Mi1cdGlmIChJU19FUlIocm9vdCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVlhGUyBTeW1ib2wgSW5jbHVzaW9uKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGB2eGZzX2lnZXRgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgc28gdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdXNpb24gZm9yIEZvY3VzU3ltYm9scy4gTm93LCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCDigJMgdGhleSYjMzk7cmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlICp1c2VkKiBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgbm90IGlubGluZWQuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBmYXZvciBub24tc3RhdGljLCAqbm9uLWlubGluZWQqIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgY2FuZGlkYXRlcyEgSSYjMzk7bGwgYWJzb2x1dGVseSBpbmNsdWRlIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgLiBJJiMzOTtsbCBhbHNvIGluY2x1ZGUgYHZ4ZnNfaWdldGAgdG8gYmUgZXh0cmEgc3VyZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBgVlhGU19GU2AgaXMgdGhlIG9ubHkgb25lLiBPa2F5LCB3YWl0IGEgbWludXRlLCBgVlhGU19GU2AgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQkxPQ0tgIGlzIGEgY29tbW9uIHN1YnN5c3RlbSBjb25maWcuIFdoaWxlIGl0JiMzOTtzIHByb2JhYmx5IGFsd2F5cyBlbmFibGVkLCBpdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIGluY2x1ZGUgcGFyZW50cy4gSSYjMzk7bGwgc3RpY2sgd2l0aCBqdXN0IGluY2x1ZGluZyBgVlhGU19GU2AgZm9yIG5vdy4KClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBwYXRjaCB0b3VjaGVzIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gYHZ4ZnNfZmluZF9lbnRyeWAgaXMgc3RhdGljIGFuZCBnZXRzIGNhbGxlZCBmcm9tIGB2eGZzX2lub2RlX2J5X25hbWVgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGJ5IGB2eGZzX2xvb2t1cGAuIFRoaXMgY29uZmlybXMgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCBhcmUgaW5kZWVkIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24uCgpPa2F5LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlldyBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIENocmlzdG9waCBIZWxsd2lnLlxuICAgNDpcdCAqIENvcHlyaWdodCAoYykgMjAxNiBLcnp5c3p0b2YgQmxhc3prb3dza2lcbiAgIDU6XHQgKi9cbiAgIDY6XHRcbiAgIDc6XHQvKlxuICAgODpcdCAqIFZlcml0YXMgZmlsZXN5c3RlbSBkcml2ZXIgLSBsb29rdXAgYW5kIG90aGVyIGRpcmVjdG9yeSByZWxhdGVkIGNvZGUuXG4gICA5Olx0ICovXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcJiMzNDt2eGZzLmhcJiMzNDtcbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDt2eGZzX2Rpci5oXCYjMzQ7XG4gIDIwOlx0I2luY2x1ZGUgXCYjMzQ7dnhmc19pbm9kZS5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7dnhmc19leHRlcm4uaFwmIzM0O1xuICAyMjpcdFxuICAyMzpcdC8qXG4gIDI0Olx0ICogTnVtYmVyIG9mIFZ4RlMgYmxvY2tzIHBlciBwYWdlLlxuICAyNTpcdCAqL1xuICAyNjpcdCNkZWZpbmUgVlhGU19CTE9DS19QRVJfUEFHRShzYnApICAoKFBBR0VfU0laRSAvIChzYnApLVx1MDAzZXNfYmxvY2tzaXplKSlcbiAgMjc6XHRcbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqXHR2eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCB1bnNpZ25lZCBpbnQpO1xuICAzMDpcdHN0YXRpYyBpbnRcdFx0dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcbiAgMzE6XHRcbiAgMzI6XHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9pbm9kZV9vcHMgPSB7XG4gIDMzOlx0XHQubG9va3VwID1cdFx0dnhmc19sb29rdXAsXG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX29wZXJhdGlvbnMgPSB7XG4gIDM3Olx0XHQubGxzZWVrID1cdFx0Z2VuZXJpY19maWxlX2xsc2VlayxcbiAgMzg6XHRcdC5yZWFkID1cdFx0XHRnZW5lcmljX3JlYWRfZGlyLFxuICAzOTpcdFx0Lml0ZXJhdGVfc2hhcmVkID1cdHZ4ZnNfcmVhZGRpcixcbiAgNDA6XHRcdC5zZXRsZWFzZSA9XHRcdGdlbmVyaWNfc2V0bGVhc2UsXG4gIDQxOlx0fTtcbiAgNDI6XHRcbiAgNDM6XHRcbiAgNDQ6XHQvKipcbiAgNDU6XHQgKiB2eGZzX2ZpbmRfZW50cnkgLSBmaW5kIGEgbWF0aGluZyBkaXJlY3RvcnkgZW50cnkgZm9yIGEgZGVudHJ5XG4gIDQ2Olx0ICogQGlwOlx0XHRkaXJlY3RvcnkgaW5vZGVcbiAgNDc6XHQgKiBAZHA6XHRcdGRlbnRyeSBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIGEgZGlyZWN0XG4gIDQ4Olx0ICogQHBwcDpcdGdldHMgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVybiB2YWx1ZSBzaXRzIGluXG4gIDQ5Olx0ICpcbiAgNTA6XHQgKiBEZXNjcmlwdGlvbjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgVlhGUyBNb2R1bGUgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhlIFZYRlMgY29kZSBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGFuYWx5emUgaXRzIGJlaGF2aW9yLiBJIG5vdGljZWQgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiB0aGUgbW9kdWxlLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IGNvbmNlcm5lZCBhYm91dCB0aGF0LCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGdsb2JhbCBzdHJ1Y3RzLCBzcGVjaWZpY2FsbHkgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYC4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGNhbiYjMzk7dCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgdGhlcmVmb3JlIGhhdmUgZGlzdGluY3QsIHJlYWRpbHkgaWRlbnRpZmlhYmxlIHN5bWJvbCBhZGRyZXNzZXMuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMgdG8gc2VydmUgYXMgRm9jdXNTeW1ib2xzLCBhbGxvd2luZyBtZSB0byB0YXJnZXQgc3BlY2lmaWMgZXhlY3V0aW9uIHBhdGhzLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGJlIHVzaW5nIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gQWx0aG91Z2ggSSBjb3VsZCBhbHNvIGNvbnNpZGVyIGB2eGZzX2lnZXRgIHNpbmNlIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCwgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAgc2VlbSBsaWtlIHRoZSBtb3JlIGRpcmVjdCBjaG9pY2VzIGdpdmVuIHRoZWlyIHJvbGUgaW4gY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZS4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYFZYRlNfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgb2YgY291cnNlLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIGBCTE9DS2Agc2VlbXMgc3RhbmRhcmQgZW5vdWdoLiBCdXQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBvYnNjdXJlIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBhY2NvdW50IGZvciB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgcGljdHVyZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZyZWV2eGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnJlZXZ4ZnMvS2NvbmZpZz0yPWNvbmZpZyBWWEZTX0ZTXG5mcy9mcmVldnhmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXCYjMzQ7XG5mcy9mcmVldnhmcy9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIEJMT0NLXG5mcy9mcmVldnhmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MzIKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZ4ZnNgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgZml4aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMgd2l0aGluIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gTm8gb3RoZXIgY2hhbmdlcyBhcmUgaW52b2x2ZWQsIHdoaWNoIG1ha2VzIHRoaW5ncyBzaW1wbGVyLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBmaXgsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgYnVnLiBHaXZlbiBpdHMgbmF0dXJlIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGludGVncml0eSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZCBoZXJlLgoKSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmxhZyBpdCBhcyBzdWNoLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBGb2N1c2luZyB0aGUgZnV6emluZyBlZmZvcnQgaXMgYWxzbyBpbXBvcnRhbnQuIEnigJlsbCBtYWtlIHN1cmUgdGhlIGZ1enplciBoaXRzIHRoZSByZWxldmFudCBmdW5jdGlvbnMgc28gSeKAmWxsIHNldCBgRm9jdXNTeW1ib2xzYCB0byBgWyYjMzQ7dnhmc19sb29rdXAmIzM0OywgJiMzNDt2eGZzX3JlYWRkaXImIzM0O11gLiBJJiMzOTtsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgVlhGU19GU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIHdpdGggYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O1ZYRlNfRlMmIzM0O11gLCBzaW5jZSB0aGlzIGlzIGEgZmlsZXN5c3RlbSBkcml2ZXIuCgpNeSByZWFzb25pbmcgZm9yIHRoZXNlIHNldHRpbmdzIGlzIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YWNrbGVzIGJvdW5kcyBjaGVja2luZyBkdXJpbmcgZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gdGhlIGBmcmVldnhmc2AgZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjbGVhcmx5IGludm9sdmVzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBmaWxlc3lzdGVtIGl0c2VsZiwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgdG8gdW5jb3ZlciBhbnkgbGF0ZW50IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGZzX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt2eGZzX3JlYWRkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gZnJlZXZ4ZnMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4ZnNfbG9va3VwJiMzNDssCiAgICAmIzM0O3Z4ZnNfcmVhZGRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiBmcmVldnhmcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTA6NDguNDA3ODExNjc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwODA0ODU1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ4ZnNfbG9va3VwXCIsXG4gICAgXCJ2eGZzX3JlYWRkaXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiBmcmVldnhmcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo0OC40MDc4MTY3OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQyOTE5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZTAzNDU3YzBkMDUwNjMwYTcxMzNiYzQ4ODUzMDQzMjdjNzBjMDI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDg6MTA6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcXG5pbmRleCAxMzhlMDhkZTk3NmVhLi41MGM0MjhjNjMxMjYyIDEwMDY0NFxcbi0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcXG4rKysgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXFxuQEAgLTc4LDYgKzc4LDcgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcXG4gXFxuIFxcdFxcdHdoaWxlIChwZ19vZnMgXFx1MDAzYyBQQUdFX1NJWkUgXFx1MDAyNlxcdTAwMjYgcG9zIFxcdTAwM2MgbGltaXQpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHZ4ZnNfZGlyZWN0ICpkZTtcXG4rXFx0XFx0XFx0aW50IHJlY2xlbiwgbmxlbjtcXG4gXFxuIFxcdFxcdFxcdGlmICgocG9zIFxcdTAwMjYgKGJzaXplIC0gMSkpIFxcdTAwM2MgNCkge1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgdnhmc19kaXJibGsgKmRicCA9XFxuQEAgLTg3LDYgKzg4LDE0IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXFxuIFxcbiBcXHRcXHRcXHRcXHRwb3MgKz0gb3ZlcmhlYWQ7XFxuIFxcdFxcdFxcdFxcdHBnX29mcyArPSBvdmVyaGVhZDtcXG4rXFx0XFx0XFx0XFx0aWYgKHBnX29mcyBcXHUwMDNlPSBQQUdFX1NJWkUpXFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovXFxuK1xcdFxcdFxcdGlmIChwZ19vZnMgKyBWWEZTX05BTUVNSU4gXFx1MDAzZSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZGUgPSAoc3RydWN0IHZ4ZnNfZGlyZWN0ICopKGthZGRyICsgcGdfb2ZzKTtcXG4gXFxuQEAgLTk2LDEyICsxMDUsMjUgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdHBnX29mcyArPSBmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX3JlY2xlbik7XFxuLVxcdFxcdFxcdHBvcyArPSBmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX3JlY2xlbik7XFxuK1xcdFxcdFxcdC8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqL1xcbitcXHRcXHRcXHRyZWNsZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX3JlY2xlbik7XFxuK1xcdFxcdFxcdGlmIChyZWNsZW4gXFx1MDAzYyBWWEZTX05BTUVNSU4gfHxcXG4rXFx0XFx0XFx0ICAgIHBnX29mcyArIHJlY2xlbiBcXHUwMDNlIFBBR0VfU0laRSkge1xcbitcXHRcXHRcXHRcXHRwb3MgKz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cGdfb2ZzICs9IHJlY2xlbjtcXG4rXFx0XFx0XFx0cG9zICs9IHJlY2xlbjtcXG4gXFx0XFx0XFx0aWYgKCFkZS1cXHUwMDNlZF9pbm8pXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0aWYgKG5hbWVsZW4gIT0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9uYW1lbGVuKSlcXG4rXFx0XFx0XFx0LyogdGhlIG5hbWUgbXVzdCBmaXQgaW4gdGhlIHJlY29yZCAqL1xcbitcXHRcXHRcXHRubGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9uYW1lbGVuKTtcXG4rXFx0XFx0XFx0aWYgKFZYRlNfTkFNRU1JTiArIG5sZW4gXFx1MDAzZSByZWNsZW4pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKG5hbWVsZW4gIT0gbmxlbilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdGlmICghbWVtY21wKG5hbWUsIGRlLVxcdTAwM2VkX25hbWUsIG5hbWVsZW4pKSB7XFxuIFxcdFxcdFxcdFxcdCpwcHAgPSBwcDtcXG5AQCAtMjE4LDcgKzI0MCw3IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcHA7XFxuIFxcdFxcdGNoYXIgKmthZGRyO1xcbiBcXHRcXHRpbnQgcGdfb2ZzID0gcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG4tXFx0XFx0aW50IHJjID0gMDtcXG4rXFx0XFx0Ym9vbCBmdWxsID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRwcCA9IHZ4ZnNfZ2V0X3BhZ2UoaXAtXFx1MDAzZWlfbWFwcGluZywgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBwKSlcXG5AQCAtMjI4LDYgKzI1MCw3IEBAIHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbiBcXG4gXFx0XFx0d2hpbGUgKHBnX29mcyBcXHUwMDNjIFBBR0VfU0laRSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzYyBsaW1pdCkge1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgdnhmc19kaXJlY3QgKmRlO1xcbitcXHRcXHRcXHRpbnQgcmVjbGVuLCBubGVuO1xcbiBcXG4gXFx0XFx0XFx0aWYgKChwb3MgXFx1MDAyNiAoYnNpemUgLSAxKSkgXFx1MDAzYyA0KSB7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCB2eGZzX2RpcmJsayAqZGJwID1cXG5AQCAtMjM3LDYgKzI2MCwxNCBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdFxcdFxcdFxcdHBvcyArPSBvdmVyaGVhZDtcXG4gXFx0XFx0XFx0XFx0cGdfb2ZzICs9IG92ZXJoZWFkO1xcbitcXHRcXHRcXHRcXHRpZiAocGdfb2ZzIFxcdTAwM2U9IFBBR0VfU0laRSlcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qIHRoZSBlbnRyeSBoZWFkZXIgbXVzdCBmaXQgaW4gdGhlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0aWYgKHBnX29mcyArIFZYRlNfTkFNRU1JTiBcXHUwMDNlIFBBR0VfU0laRSkge1xcbitcXHRcXHRcXHRcXHRwb3MgKz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgKyBwZ19vZnMpO1xcbiBcXG5AQCAtMjQ2LDIzICsyNzcsMzUgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRwZ19vZnMgKz0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbi1cXHRcXHRcXHRwb3MgKz0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbitcXHRcXHRcXHQvKiBhbmQgc28gbXVzdCB0aGUgd2hvbGUgcmVjb3JkLCBoZWFkZXIgaW5jbHVkZWQgKi9cXG4rXFx0XFx0XFx0cmVjbGVuID0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbitcXHRcXHRcXHRpZiAocmVjbGVuIFxcdTAwM2MgVlhGU19OQU1FTUlOIHx8XFxuK1xcdFxcdFxcdCAgICBwZ19vZnMgKyByZWNsZW4gXFx1MDAzZSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHBnX29mcyArPSByZWNsZW47XFxuK1xcdFxcdFxcdHBvcyArPSByZWNsZW47XFxuIFxcdFxcdFxcdGlmICghZGUtXFx1MDAzZWRfaW5vKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHJjID0gZGlyX2VtaXQoY3R4LCBkZS1cXHUwMDNlZF9uYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRmczE2X3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX25hbWVsZW4pLFxcbi1cXHRcXHRcXHRcXHRcXHRmczMyX3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX2lubyksXFxuLVxcdFxcdFxcdFxcdFxcdERUX1VOS05PV04pO1xcbi1cXHRcXHRcXHRpZiAoIXJjKSB7XFxuK1xcdFxcdFxcdC8qIHRoZSBuYW1lIG11c3QgZml0IGluIHRoZSByZWNvcmQgKi9cXG4rXFx0XFx0XFx0bmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXFx1MDAzZWRfbmFtZWxlbik7XFxuK1xcdFxcdFxcdGlmIChWWEZTX05BTUVNSU4gKyBubGVuIFxcdTAwM2UgcmVjbGVuKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cXHUwMDNlZF9uYW1lLCBubGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICBmczMyX3RvX2NwdShzYmksIGRlLVxcdTAwM2VkX2lubyksXFxuK1xcdFxcdFxcdFxcdCAgICAgIERUX1VOS05PV04pKSB7XFxuIFxcdFxcdFxcdFxcdC8qIHRoZSBkaXIgZW50cnkgd2FzIG5vdCByZWFkLCBmaXggcG9zLiAqL1xcbi1cXHRcXHRcXHRcXHRwb3MgLT0gZnMxNl90b19jcHUoc2JpLCBkZS1cXHUwMDNlZF9yZWNsZW4pO1xcbitcXHRcXHRcXHRcXHRwb3MgLT0gcmVjbGVuO1xcbitcXHRcXHRcXHRcXHRmdWxsID0gdHJ1ZTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHR2eGZzX3B1dF9wYWdlKHBwKTtcXG4tXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0aWYgKGZ1bGwpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo0OS43ODI3NTM5ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NjcwNTUzNTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhmc19sb29rdXBcIixcbiAgICBcInZ4ZnNfcmVhZGRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGRpcmVjdG9yeSBlbnRyeSBwYXJzaW5nIGluIGZyZWV2eGZzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlMDM0NTdjMGQwNTA2MzBhNzEzM2JjNDg4NTMwNDMyN2M3MGMwMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA4OjEwOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcbmluZGV4IDEzOGUwOGRlOTc2ZWEuLjUwYzQyOGM2MzEyNjIgMTAwNjQ0XG4tLS0gYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXG4rKysgYi9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXG5AQCAtNzgsNiArNzgsNyBAQCB2eGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGRlbnRyeSAqZHAsIHN0cnVjdCBwYWdlICoqcHBwKVxuIFxuIFx0XHR3aGlsZSAocGdfb2ZzIFx1MDAzYyBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IHBvcyBcdTAwM2MgbGltaXQpIHtcbiBcdFx0XHRzdHJ1Y3Qgdnhmc19kaXJlY3QgKmRlO1xuK1x0XHRcdGludCByZWNsZW4sIG5sZW47XG4gXG4gXHRcdFx0aWYgKChwb3MgXHUwMDI2IChic2l6ZSAtIDEpKSBcdTAwM2MgNCkge1xuIFx0XHRcdFx0c3RydWN0IHZ4ZnNfZGlyYmxrICpkYnAgPVxuQEAgLTg3LDYgKzg4LDE0IEBAIHZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXG4gXG4gXHRcdFx0XHRwb3MgKz0gb3ZlcmhlYWQ7XG4gXHRcdFx0XHRwZ19vZnMgKz0gb3ZlcmhlYWQ7XG4rXHRcdFx0XHRpZiAocGdfb2ZzIFx1MDAzZT0gUEFHRV9TSVpFKVxuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0LyogdGhlIGVudHJ5IGhlYWRlciBtdXN0IGZpdCBpbiB0aGUgcGFnZSAqL1xuK1x0XHRcdGlmIChwZ19vZnMgKyBWWEZTX05BTUVNSU4gXHUwMDNlIFBBR0VfU0laRSkge1xuK1x0XHRcdFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcbitcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRkZSA9IChzdHJ1Y3Qgdnhmc19kaXJlY3QgKikoa2FkZHIgKyBwZ19vZnMpO1xuIFxuQEAgLTk2LDEyICsxMDUsMjUgQEAgdnhmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBkZW50cnkgKmRwLCBzdHJ1Y3QgcGFnZSAqKnBwcClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRwZ19vZnMgKz0gZnMxNl90b19jcHUoc2JpLCBkZS1cdTAwM2VkX3JlY2xlbik7XG4tXHRcdFx0cG9zICs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuK1x0XHRcdC8qIGFuZCBzbyBtdXN0IHRoZSB3aG9sZSByZWNvcmQsIGhlYWRlciBpbmNsdWRlZCAqL1xuK1x0XHRcdHJlY2xlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuK1x0XHRcdGlmIChyZWNsZW4gXHUwMDNjIFZYRlNfTkFNRU1JTiB8fFxuK1x0XHRcdCAgICBwZ19vZnMgKyByZWNsZW4gXHUwMDNlIFBBR0VfU0laRSkge1xuK1x0XHRcdFx0cG9zICs9IFBBR0VfU0laRSAtIHBnX29mcztcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRwZ19vZnMgKz0gcmVjbGVuO1xuK1x0XHRcdHBvcyArPSByZWNsZW47XG4gXHRcdFx0aWYgKCFkZS1cdTAwM2VkX2lubylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChuYW1lbGVuICE9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9uYW1lbGVuKSlcbitcdFx0XHQvKiB0aGUgbmFtZSBtdXN0IGZpdCBpbiB0aGUgcmVjb3JkICovXG4rXHRcdFx0bmxlbiA9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9uYW1lbGVuKTtcbitcdFx0XHRpZiAoVlhGU19OQU1FTUlOICsgbmxlbiBcdTAwM2UgcmVjbGVuKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0aWYgKG5hbWVsZW4gIT0gbmxlbilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmICghbWVtY21wKG5hbWUsIGRlLVx1MDAzZWRfbmFtZSwgbmFtZWxlbikpIHtcbiBcdFx0XHRcdCpwcHAgPSBwcDtcbkBAIC0yMTgsNyArMjQwLDcgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdHN0cnVjdCBwYWdlICpwcDtcbiBcdFx0Y2hhciAqa2FkZHI7XG4gXHRcdGludCBwZ19vZnMgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4tXHRcdGludCByYyA9IDA7XG4rXHRcdGJvb2wgZnVsbCA9IGZhbHNlO1xuIFxuIFx0XHRwcCA9IHZ4ZnNfZ2V0X3BhZ2UoaXAtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0XHRpZiAoSVNfRVJSKHBwKSlcbkBAIC0yMjgsNiArMjUwLDcgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXG4gXHRcdHdoaWxlIChwZ19vZnMgXHUwMDNjIFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgcG9zIFx1MDAzYyBsaW1pdCkge1xuIFx0XHRcdHN0cnVjdCB2eGZzX2RpcmVjdCAqZGU7XG4rXHRcdFx0aW50IHJlY2xlbiwgbmxlbjtcbiBcbiBcdFx0XHRpZiAoKHBvcyBcdTAwMjYgKGJzaXplIC0gMSkpIFx1MDAzYyA0KSB7XG4gXHRcdFx0XHRzdHJ1Y3Qgdnhmc19kaXJibGsgKmRicCA9XG5AQCAtMjM3LDYgKzI2MCwxNCBAQCB2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcbiBcdFx0XHRcdHBvcyArPSBvdmVyaGVhZDtcbiBcdFx0XHRcdHBnX29mcyArPSBvdmVyaGVhZDtcbitcdFx0XHRcdGlmIChwZ19vZnMgXHUwMDNlPSBQQUdFX1NJWkUpXG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiB0aGUgZW50cnkgaGVhZGVyIG11c3QgZml0IGluIHRoZSBwYWdlICovXG4rXHRcdFx0aWYgKHBnX29mcyArIFZYRlNfTkFNRU1JTiBcdTAwM2UgUEFHRV9TSVpFKSB7XG4rXHRcdFx0XHRwb3MgKz0gUEFHRV9TSVpFIC0gcGdfb2ZzO1xuK1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHRcdGRlID0gKHN0cnVjdCB2eGZzX2RpcmVjdCAqKShrYWRkciArIHBnX29mcyk7XG4gXG5AQCAtMjQ2LDIzICsyNzcsMzUgQEAgdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4tXHRcdFx0cGdfb2ZzICs9IGZzMTZfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9yZWNsZW4pO1xuLVx0XHRcdHBvcyArPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbitcdFx0XHQvKiBhbmQgc28gbXVzdCB0aGUgd2hvbGUgcmVjb3JkLCBoZWFkZXIgaW5jbHVkZWQgKi9cbitcdFx0XHRyZWNsZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbitcdFx0XHRpZiAocmVjbGVuIFx1MDAzYyBWWEZTX05BTUVNSU4gfHxcbitcdFx0XHQgICAgcGdfb2ZzICsgcmVjbGVuIFx1MDAzZSBQQUdFX1NJWkUpIHtcbitcdFx0XHRcdHBvcyArPSBQQUdFX1NJWkUgLSBwZ19vZnM7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0cGdfb2ZzICs9IHJlY2xlbjtcbitcdFx0XHRwb3MgKz0gcmVjbGVuO1xuIFx0XHRcdGlmICghZGUtXHUwMDNlZF9pbm8pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRyYyA9IGRpcl9lbWl0KGN0eCwgZGUtXHUwMDNlZF9uYW1lLFxuLVx0XHRcdFx0XHRmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbiksXG4tXHRcdFx0XHRcdGZzMzJfdG9fY3B1KHNiaSwgZGUtXHUwMDNlZF9pbm8pLFxuLVx0XHRcdFx0XHREVF9VTktOT1dOKTtcbi1cdFx0XHRpZiAoIXJjKSB7XG4rXHRcdFx0LyogdGhlIG5hbWUgbXVzdCBmaXQgaW4gdGhlIHJlY29yZCAqL1xuK1x0XHRcdG5sZW4gPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfbmFtZWxlbik7XG4rXHRcdFx0aWYgKFZYRlNfTkFNRU1JTiArIG5sZW4gXHUwMDNlIHJlY2xlbilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cdTAwM2VkX25hbWUsIG5sZW4sXG4rXHRcdFx0XHQgICAgICBmczMyX3RvX2NwdShzYmksIGRlLVx1MDAzZWRfaW5vKSxcbitcdFx0XHRcdCAgICAgIERUX1VOS05PV04pKSB7XG4gXHRcdFx0XHQvKiB0aGUgZGlyIGVudHJ5IHdhcyBub3QgcmVhZCwgZml4IHBvcy4gKi9cbi1cdFx0XHRcdHBvcyAtPSBmczE2X3RvX2NwdShzYmksIGRlLVx1MDAzZWRfcmVjbGVuKTtcbitcdFx0XHRcdHBvcyAtPSByZWNsZW47XG4rXHRcdFx0XHRmdWxsID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHR2eGZzX3B1dF9wYWdlKHBwKTtcbi1cdFx0aWYgKCFyYylcbitcdFx0aWYgKGZ1bGwpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo0OS43ODI3NTUwNDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE3Njg5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZyZWV2eGZzIEZpbGVzeXN0ZW0gU2VjdXJpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyeSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gVGhlIHBhdGNoIGltcGxlbWVudHMgc29tZSBib3VuZHMgY2hlY2tpbmcsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCdzIGxvb2tpbmcgZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgYWNjZXNzIGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgZGlyZWN0b3J5IGVudHJpZXMgd2l0aGluIHRoZSBmcmVldnhmcyBmaWxlc3lzdGVtLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHlvdSB3YW50IHRvIGNhdGNoLlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgY2hlY2tzIHRoZXkndmUgYWRkZWQ6IEl0J3MgY2hlY2tpbmcgY29uZGl0aW9ucyBpbnZvbHZpbmcgYHBnX29mc2AsIGByZWNsZW5gLCBgUEFHRV9TSVpFYCwgYFZYRlNfTkFNRU1JTmAsIGFuZCBgbmxlbmAuIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNpemUgYW5kIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UgYnVmZmVyIGFuZCB0aGUgZGlyZWN0b3J5IGVudHJ5IGl0c2VsZi4gSSBjYW4gc2VlIHdoYXQgdGhleSdyZSBkb2luZzogYHBnX29mcyArIFZYRlNfTkFNRU1JTiBcdTAwM2UgUEFHRV9TSVpFYCwgYHJlY2xlbiBcdTAwM2MgVlhGU19OQU1FTUlOYCwgYHBnX29mcyArIHJlY2xlbiBcdTAwM2UgUEFHRV9TSVpFYCwgYW5kIGBWWEZTX05BTUVNSU4gKyBubGVuIFx1MDAzZSByZWNsZW5gLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBhIHN1cGVyZmljaWFsIG9uZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmVoYXZpb3VyIG9mIHRoZSBmaWxlc3lzdGVtIGRyaXZlci4gQ29uc2VxdWVudGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRoYXQgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLiBBIHNvbGlkIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBiZSBrZXkgdG8gZW5zdXJpbmcgdGhlIGZpeCBpcyByb2J1c3QuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGV2ZW4gdGVzdCB0aGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGZyZWV2eGZzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBmcy9mcmVldnhmcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGZpbGVzeXN0ZW0gc28gSSBjYW4gYWN0dWFsbHkgcnVuIHNvbWUgdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo1NS4wMDA0NDY3NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0OTczMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZYRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcmVldnhmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZnJlZXZ4ZnMvS2NvbmZpZzoyOmNvbmZpZyBWWEZTX0ZTXFxuZnMvZnJlZXZ4ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo1NS4wNDE5NDk4ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE4NTA4OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgVlhGU19GUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBsb29raW5nIGF0IGlzIGBWWEZTX0ZTYC4gUmlnaHQuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJlZm9yZSBJIGdldCBhbnkgZnVydGhlciBpbnRvIGFjdHVhbGx5ICpkb2luZyogYW55dGhpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFueSBjYXNjYWRpbmcgZWZmZWN0cy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIHJlbGF0ZWQgc2V0dGluZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbWlnaHQgdHJpcCBvdmVyPyBJIG5lZWQgdG8gY2hlY2sgZm9yIHVwc3RyZWFtIGltcGxpY2F0aW9ucy4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzLiBHb3R0YSBjb3ZlciBhbGwgYmFzZXMgYmVmb3JlIGV2ZW4gY29uc2lkZXJpbmcgbWFraW5nIGFueSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTA6NTguMDYwNDYxOTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnJlZXZ4ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFZYRlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlVnhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChWRVJJVEFTIFZ4RlMoVE0pIGNvbXBhdGlibGUpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIEZyZWVWeEZTIGlzIGEgZmlsZSBzeXN0ZW0gZHJpdmVyIHRoYXQgc3VwcG9ydCB0aGUgVkVSSVRBUyBWeEZTKFRNKVxcbiAgIDg6XFx0XFx0ICBmaWxlIHN5c3RlbSBmb3JtYXQuICBWRVJJVEFTIFZ4RlMoVE0pIGlzIHRoZSBzdGFuZGFyZCBmaWxlIHN5c3RlbVxcbiAgIDk6XFx0XFx0ICBvZiBTQ08gVW5peFdhcmUgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGFuZCBvcHRpb25hbGx5IGF2YWlsYWJsZVxcbiAgMTA6XFx0XFx0ICBmb3IgU3Vuc29mdCBTb2xhcmlzLCBIUC1VWCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gSG93ZXZlclxcbiAgMTE6XFx0XFx0ICB0aGVzZSBwYXJ0aWN1bGFyIE9TIGltcGxlbWVudGF0aW9ucyBvZiB2eGZzIG1heSBkaWZmZXIgaW4gb24tZGlza1xcbiAgMTI6XFx0XFx0ICBkYXRhIGVuZGlhbm5lc3MgYW5kL29yIHN1cGVyYmxvY2sgb2Zmc2V0LiBUaGUgdnhmcyBtb2R1bGUgaGFzIGJlZW5cXG4gIDEzOlxcdFxcdCAgdGVzdGVkIHdpdGggU0NPIFVuaXhXYXJlIGFuZCBIUC1VWCBCLjEwLjIwIChwYS1yaXNjIDEuMSBhcmNoLilcXG4gIDE0OlxcdFxcdCAgQ3VycmVudGx5IG9ubHkgcmVhZG9ubHkgYWNjZXNzIGlzIHN1cHBvcnRlZCBhbmQgVnhGWCB2ZXJzaW9uc1xcbiAgMTU6XFx0XFx0ICAyLCAzIGFuZCA0LiBUZXN0cyB3ZXJlIHBlcmZvcm1lZCB3aXRoIEhQLVVYIFZ4RlMgdmVyc2lvbiAzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIE5PVEU6IHRoZSBmaWxlIHN5c3RlbSB0eXBlIGFzIHVzZWQgYnkgbW91bnQoMSksIG1vdW50KDIpIGFuZFxcbiAgMTg6XFx0XFx0ICBmc3RhYig1KSBpcyAndnhmcycgYXMgaXQgZGVzY3JpYmVzIHRoZSBmaWxlIHN5c3RlbSBmb3JtYXQsIG5vdFxcbiAgMTk6XFx0XFx0ICB0aGUgYWN0dWFsIGRyaXZlci5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMDo1OC4wNjA1MjI1MjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzNjQ0OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxpa2UgSSB3b3VsZCBpbiBteSBvd24gd29yazpcblxuKipBbmFseXppbmcgdGhlIFZYRlMgRmlsZSBTeXN0ZW0gQ29kZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBhIHNwZWNpZmljIGZpbGUgc3lzdGVtIG1vZGlmaWNhdGlvbiwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHBvaW50aW5nIGRpcmVjdGx5IHRvIHRoZSBgQkxPQ0tgIGNvbXBvbmVudC4gTWFrZXMgc2Vuc2UsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYmxvY2stbGV2ZWwgb3BlcmF0aW9ucyB3aXRoaW4gVlhGUy4gVGhlIGNvbmZpZ3VyYXRpb24gaW4gdXNlIGlzIGBWWEZTX0ZTYCB3aGljaCBpcyBhIGdvb2QgcmVtaW5kZXIuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGB2eGZzX2ZpbmRfZW50cnlgIGFuZCBgdnhmc19yZWFkZGlyYC4gYHZ4ZnNfZmluZF9lbnRyeWAgaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyBpdCdzIHRpZ2h0bHkgY291cGxlZCB3aXRoIGB2eGZzX2xvb2t1cGAuIFRoYXQgbWVhbnMgYW55IGNoYW5nZXMgdGhlcmUgY291bGQgcmlwcGxlIHVwIHRoZSBjYWxsIGNoYWluLiBgdnhmc19yZWFkZGlyYCBpcyB0aGUgc3RhbmRhcmQgY2FsbGJhY2sgZm9yIHJlYWRpbmcgZW50cmllcyBmcm9tIGEgVlhGUyBkaXJlY3RvcnkuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYHZ4ZnNfZmluZF9lbnRyeWAgaXMgYmVpbmcgdXNlZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlLiBMZXQgbWUgcXVpY2tseSBqdW1wIGludG8gYGZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNgIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBhc3Nlc3MgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA4OjExOjAyLjM4NDE3MDI5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIyOTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2ZpbmRfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTM2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnhmc19kaXJfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNDQtLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzo0NTogKiB2eGZzX2ZpbmRfZW50cnkgLSBmaW5kIGEgbWF0aGluZyBkaXJlY3RvcnkgZW50cnkgZm9yIGEgZGVudHJ5XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy00Ni0gKiBAaXA6XFx0XFx0ZGlyZWN0b3J5IGlub2RlXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTUwLSAqIERlc2NyaXB0aW9uOlxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6NTE6ICogICB2eGZzX2ZpbmRfZW50cnkgZmluZHMgYSBcXHUwMDI2c3RydWN0IHZ4ZnNfZGlyZWN0IGZvciB0aGUgVkZTIGRpcmVjdG9yeVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtNTItICogICBjYWNoZSBlbnRyeSBAZHAuICBAcHBwIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVyblxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz01OD1zdGF0aWMgc3RydWN0IHZ4ZnNfZGlyZWN0ICpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjU5OnZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy02MC17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1Nj12eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNjEtXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxNjI6XFx0ZGUgPSB2eGZzX2ZpbmRfZW50cnkoZGlwLCBkcCwgXFx1MDAyNnBwKTtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE2My1cXHRpZiAoZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MDIuNDI3NDA0NjYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0ODIzMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlIGZsb3c6XG5cbioqQW5hbHl6aW5nIHRoZSBgdnhmc2AgRmlsZXN5c3RlbSBMb29rdXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHZ4ZnNgIGhhbmRsZXMgbG9va3Vwcy4gUmlnaHQgbm93LCBJJ3ZlIGdvdCBteSBleWVzIG9uIGB2eGZzX2ZpbmRfZW50cnlgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQncyBhIGhlbHBmdWwgc3RhcnRpbmcgcG9pbnQsIGl0IG1lYW5zIEkgZG9uJ3QgaGF2ZSB0byB0cmFjZSBpdCBmcm9tIHRvbyBmYXIgYWZpZWxkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBgdnhmc19maW5kX2VudHJ5YCBpcyBjYWxsZWQgYnkgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAuIE5vdywgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXMgY2xlYXJseSB0aGUgYnJpZGdlIGZ1bmN0aW9uIGhlcmUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBBbmQgYHZ4ZnNfaW5vZGVfYnlfbmFtZWAgaXRzZWxmIGlzIGNhbGxlZCBieSBgdnhmc19sb29rdXBgLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIHN0YXJ0cy4gU28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBkcml2ZW4gdGhyb3VnaCB0aGUgYHZ4ZnNfbG9va3VwYCBmdW5jdGlvbi4gU2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGlnIGludG8gYHZ4ZnNfbG9va3VwYCBhbmQgdW5kZXJzdGFuZCBob3cgaXQgdXNlcyB0aGUgb3RoZXIgZnVuY3Rpb25zIEkganVzdCBtZW50aW9uZWQuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgaGllcmFyY2h5IGZvciBhIGZpbGVzeXN0ZW0gbG9va3VwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MDUuOTc1NjM5NTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUyMjE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjgtXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyOTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqXFx0dnhmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMwLXN0YXRpYyBpbnRcXHRcXHR2eGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0zMj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzozMzpcXHQubG9va3VwID1cXHRcXHR2eGZzX2xvb2t1cCxcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM0LX07XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1Nj12eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNzItLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxNzM6ICogdnhmc19sb29rdXAgLSBsb29rdXAgcGF0aG5hbWUgY29tcG9uZW50XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xNzQtICogQGRpcDpcXHRkaXIgaW4gd2hpY2ggd2UgbG9va3VwXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE3OC0gKiBEZXNjcmlwdGlvbjpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE3OTogKiAgIHZ4ZnNfbG9va3VwIHRyaWVzIHRvIGxvb2t1cCB0aGUgcGF0aG5hbWUgY29tcG9uZW50IGRlc2NyaWJlZFxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTgwLSAqICAgYnkgQGRwIGluIEBkaXAuXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE4Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxODc6dnhmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0xODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTowNi4wMTcxNjQ1MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NDcyNzc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBFbnRyeSBQb2ludHMgaW4gdGhlIFZYRlMgRmlsZXN5c3RlbSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIG5haWwgZG93biB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBWWEZTIGZpbGVzeXN0ZW0gZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAgd2VyZSB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbnMgd2UnZCBiZSBjYWxsaW5nLCB0aGUga2V5IGludGVyZmFjZXMuIEhvd2V2ZXIsIGhhbmcgb24uLi4gbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYz8gQSBzdGF0aWMgZGVjbGFyYXRpb24gd291bGQgbWVhbiB0aGV5J3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUgYW5kIG5vdCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlLiBIbW0sIGxldCBtZSBjb25maXJtIHRoZWlyIHN0YXRpYyBkZXNpZ25hdGlvbi4uLiBhbmQgYHZ4ZnNfcmVhZGRpcmAgYXMgd2VsbC4gUmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA4OjExOjA5LjY4MTg5NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTI1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4ZnNfcmVhZGRpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9Mjk9c3RhdGljIHN0cnVjdCBkZW50cnkgKlxcdHZ4ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzozMDpzdGF0aWMgaW50XFx0XFx0dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMxLVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz0zNj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTM4LVxcdC5yZWFkID1cXHRcXHRcXHRnZW5lcmljX3JlYWRfZGlyLFxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6Mzk6XFx0Lml0ZXJhdGVfc2hhcmVkID1cXHR2eGZzX3JlYWRkaXIsXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy00MC1cXHQuc2V0bGVhc2UgPVxcdFxcdGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE4Nz12eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcCwgc3RydWN0IGRlbnRyeSAqZHAsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMjAxLS8qKlxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM6MjAyOiAqIHZ4ZnNfcmVhZGRpciAtIHJlYWQgYSBkaXJlY3RvcnlcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTIwMy0gKiBAZnA6XFx0XFx0dGhlIGRpcmVjdG9yeSB0byByZWFkXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTIwNi0gKiBEZXNjcmlwdGlvbjpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjIwNzogKiAgIHZ4ZnNfcmVhZGRpciBmaWxscyBAcmV0cCB3aXRoIGRpcmVjdG9yeSBlbnRyaWVzIGZyb20gQGZwXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMDgtICogICB1c2luZyB0aGUgVkZTIHN1cHBsaWVkIGNhbGxiYWNrIEBmaWxsZXIuXFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTIxMz1zdGF0aWMgaW50XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyMTQ6dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTowOS43MjM4MjM2NzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDM4MDQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTdGF0aWMgRnVuY3Rpb24gVXNhZ2UgaW4gRnJlZVZ4RlMgRGlyZWN0b3J5IE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdHdvIHRoaW5nczogdGhlIGRpcmVjdG9yeSBpbm9kZSBvcGVyYXRpb25zIChgdnhmc19kaXJfaW5vZGVfb3BzYCkgYW5kIHRoZSBtb3JlIGdlbmVyYWwgZGlyZWN0b3J5IG9wZXJhdGlvbnMgKGB2eGZzX2Rpcl9vcGVyYXRpb25zYCkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBib3RoIG9mIHRoZW0gYXBwZWFyIHRvIGJlIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiB0aGUgRnJlZVZ4RlMgZmlsZXN5c3RlbSBjb2RlLlxuXG5UaGUgZmFjdCB0aGV5J3JlIHN0YXRpYyBzdWdnZXN0cyBlbmNhcHN1bGF0aW9uLCB0aGF0IHRoZXkgYXJlIG5vdCBkaXJlY3RseSBleHBvc2VkIG91dHNpZGUgdGhlaXIgZGVmaW5lZCBtb2R1bGUuIEhvd2V2ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBiZWNvbWVzOiBhcmUgdGhlc2Ugc3RhdGljIGltcGxlbWVudGF0aW9ucyB1c2VkIGludGVybmFsbHksIG9yIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jYCB0aGF0IGNhbGwgdGhlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsc2l0ZXMgb2YgdGhpcyBtb2R1bGUgdG8gYmUgY2VydGFpbiBpZiB0aGVyZSBpcyBhbnkgcHVibGljIHVzZSBvZiB0aGlzIGludGVybmFsIGZ1bmN0aW9uYWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBpbXBvcnRhbnQuIFVuZGVyc3RhbmRpbmcgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGZpbGVzeXN0ZW0ncyBleHBvcnRhYmxlIGludGVyZmFjZXMgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MTQuMDE4MjA2NzczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA0NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYz01OD1zdGF0aWMgc3RydWN0IHZ4ZnNfZGlyZWN0ICpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjU5OnZ4ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZGVudHJ5ICpkcCwgc3RydWN0IHBhZ2UgKipwcHApXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy02MC17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE1NT1zdGF0aWMgaW5vX3RcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE1Njp2eGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXAsIHN0cnVjdCBkZW50cnkgKmRwKVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTU3LXtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MTg2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjE4Nzp2eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcCwgc3RydWN0IGRlbnRyeSAqZHAsIHVuc2lnbmVkIGludCBmbGFncylcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTE4OC17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTIxMz1zdGF0aWMgaW50XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoyMTQ6dnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0yMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMToxNC4wNjAyNTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzM4OTI0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTY29wZSBvZiBgdnhmc19sb29rdXAuY2AgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBmcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jYC4gVGhlIGZpcnN0IHRoaW5nIEknbSBub3RpY2luZyBpcyB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGdlbmVyYWxseSBpbXBsaWVzIHRoZXkncmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5LCBjb25maW5lZCB0byB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCB3YWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBJIHNlZSBgdnhmc19kaXJfaW5vZGVfb3BzYCBhbmQgYHZ4ZnNfZGlyX29wZXJhdGlvbnNgIGRlY2xhcmVkIGhlcmUsIGFuZCBJIGhhdmUgYSBmZWVsaW5nIHRoZXkgYXJlIHVzZWQgZWxzZXdoZXJlLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgdGhlaXIgcG90ZW50aWFsIGJyb2FkZXIgYXBwbGljYWJpbGl0eSwgbWF5YmUgZXZlbiBleHBvcnRlZCBmdW5jdGlvbmFsaXR5LiBJIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gVGltZSB0byBjb25maXJtIG9yIGRpc3BlbCB0aGlzIGltbWVkaWF0ZWx5LiBMZXQncyB0cmFjZSB0aGVpciB1c2FnZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgbXkgaW5pdGlhbCBpbnRlcm5hbC1vbmx5IGFzc3VtcHRpb24gaXMgY29ycmVjdCBvciBpZiB0aGV5J3JlIGFjdHVhbGx5IGludGVyZmFjZSBjb21wb25lbnRzLiBOZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSBhcmUgdXRpbGl6ZWQgaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MTguMjM0MTUwMzE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg0NDE3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2Rpcl9pbm9kZV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzQ9ZXh0ZXJuIHZvaWRcXHRcXHRcXHR2eGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmgtMzYtLyogdnhmc19sb29rdXAuYyAqL1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6Mzc6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zXFx0dnhmc19kaXJfaW5vZGVfb3BzO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmgtMzgtZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnNcXHR2eGZzX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTI1MT12eGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGlub190IGlubylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNzktXFx0fSBlbHNlIGlmIChTX0lTRElSKGlwLVxcdTAwM2VpX21vZGUpKSB7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI4MDpcXHRcXHRpcC1cXHUwMDNlaV9vcCA9IFxcdTAwMjZ2eGZzX2Rpcl9pbm9kZV9vcHM7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI4MS1cXHRcXHRpcC1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2dnhmc19kaXJfb3BlcmF0aW9ucztcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmM9MzA9c3RhdGljIGludFxcdFxcdHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYy0zMS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jOjMyOmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX2lub2RlX29wcyA9IHtcXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jLTMzLVxcdC5sb29rdXAgPVxcdFxcdHZ4ZnNfbG9va3VwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMToxOC4yNzQ5OTc3MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4NTY2Nzc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBTeW1ib2wgVmlzaWJpbGl0eSBpbiBGcmVldnhmcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBGcmVldnhmcy4gVGhlIGluc3RydWN0aW9ucyBJJ3ZlIGJlZW4gZ2l2ZW4gYXJlIHByZXR0eSBjbGVhcjogZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBpc3N1ZSBpcywgSSdtIHRyeWluZyB0byBlbnN1cmUgdGhhdCB3aGVuIHRoZSBjb21waWxlciBpcyBkb25lIGl0IHVzZXMgdGhlIGNvcnJlY3Qgc3ltYm9scy5cblxuSSBzZWUgdGhhdCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCAqc2hvdWxkKiBoYXZlIGRpc3RpbmN0IGFkZHJlc3Nlcywgc2luY2UgdGhleSdyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzLiBJIGtub3cgdGhhdCBpZiB0aGV5IHdlcmUgZnVsbHkgaW5saW5lZCwgdGhleSB3b3VsZG4ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCwgYmVjYXVzZSB0aGV5J3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHRoZSBjb21waWxlciAqY2FuJ3QqIGlubGluZSB0aGVtIGNvbXBsZXRlbHkuXG5cbkJ1dCB3YWl0LCBhcmUgdGhlcmUgb3RoZXIgb3B0aW9ucz8gTWF5YmUgdGhlcmUgYXJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBGcmVldnhmcyB0aGF0ICpjb3VsZCogc2VydmUgdGhlIHB1cnBvc2UsIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gdXNlPyBgdnhmc19pZ2V0YCBhbmQgYHZ4ZnNfZmlsbF9zdXBlcmAgc3ByaW5nIHRvIG1pbmQgYXMgcG9zc2liaWxpdGllcy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlbSBvdXQgaW4gdGhlIHNvdXJjZSBjb2RlIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMToyMy44NjA2NjczOTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzU3OTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2ZpbGxfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYz0xMjU9c3RhdGljIGludCB2eGZzX3RyeV9zYl9tYWdpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE2OS0vKipcXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MTcwOiAqIHZ4ZnNfZmlsbF9zdXBlciAtIHJlYWQgc3VwZXJibG9jayBpbnRvIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBmaWxlc3lzdGVtXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE3MS0gKiBAc2JwOlxcdFxcdFZGUyBzdXBlcmJsb2NrICh0byBmaWxsKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE4My0gKi9cXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MTg0OnN0YXRpYyBpbnQgdnhmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2JwLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTE4NS17XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM9Mjg3PXN0YXRpYyBpbnQgdnhmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI4OC17XFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jOjI4OTpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgdnhmc19maWxsX3N1cGVyKTtcXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMjkwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MjQuMTc4MjUyMjc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDE0NDE1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBTdGF0aWMgRnVuY3Rpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIGB2eGZzX2ZpbGxfc3VwZXJgIGlzIGZsYWdnZWQgYXMgYHN0YXRpY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gaXRzIGNvbnRleHQuIEdpdmVuIHRoYXQsIGxldCBtZSBwaXZvdCBteSBmb2N1cyB0byBpdHMgcG90ZW50aWFsIGNvdW50ZXJwYXJ0LCBgdnhmc19pZ2V0YC4gSXQgaXMgY3JpdGljYWwgdG8gZ3Jhc3AgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgZmlsZSBzeXN0ZW0gZGVzaWduLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIGB2eGZzX2lnZXRgIGlzIGFsc28gc3RhdGljLiBJZiBpdCBpcywgdGhpcyBtZWFucyBib3RoIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHNjb3BlZCBvbmx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGVzeXN0ZW0gbW9kdWxlLiBUaGlzIGltcGxpZXMgdGhhdCBteSBpbnZlc3RpZ2F0aW9uIHNob3VsZCBiZSBmb2N1c2VkIHNwZWNpZmljYWxseSBvbiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYHZ4ZnNfaWdldGAgb3IgYHZ4ZnNfZmlsbF9zdXBlcmAuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgZnVuY3Rpb25zLCBpZiBgdnhmc19pZ2V0YCBpcyBhbHNvIHN0YXRpYywgdGhpcyBoZWxwcyBtZSBxdWlja2x5IHVuZGVyc3RhbmQgc2NvcGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZmlsZXN5c3RlbSBkZXNpZ24gaXMgbGlrZWx5IG1vZHVsYXIgYW5kIGludGVybmFsIHRvIHRoZSBWWEZTIGltcGxlbWVudGF0aW9uLiBOb3cgbGV0J3Mgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MjcuNjE5Njk1ODk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc5NDU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGZzX2lnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnJlZXZ4ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg9MzI9ZXh0ZXJuIHN0cnVjdCBpbm9kZVxcdFxcdCp2eGZzX3N0aWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmg6MzM6ZXh0ZXJuIHN0cnVjdCBpbm9kZVxcdFxcdCp2eGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTtcXG5mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oLTM0LWV4dGVybiB2b2lkXFx0XFx0XFx0dnhmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM9NzY9c3RhdGljIGlubGluZSB2b2lkIGRpcDJ2aXBfY3B5KHN0cnVjdCB2eGZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xMzEtICogTk9URTpcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MTMyOiAqICBXaGlsZSBfX3Z4ZnNfaWdldCB1c2VzIHRoZSBwYWdlY2FjaGUgdnhmc19ibGtpZ2V0IHVzZXMgdGhlXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTEzMy0gKiAgYnVmZmVyY2FjaGUuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIHRoZVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jPTEzNz12eGZzX2Jsa2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIHVfbG9uZyBleHRlbnQsIGlub190IGlubylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xNzItLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjE3MzogKiBfX3Z4ZnNfaWdldCAtIGdlbmVyaWMgZmluZCBpbm9kZSBmYWNpbGl0eVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0xNzQtICogQGlsaXN0cDpcXHRcXHRpbm9kZSBsaXN0XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM9MTgzPXN0YXRpYyBpbnRcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MTg0Ol9fdnhmc19pZ2V0KHN0cnVjdCBpbm9kZSAqaWxpc3RwLCBzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvICp2aXAsIGlub190IGlubylcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMTg1LXtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0yMjI9dnhmc19zdGlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGlub190IGlubylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yMzEtXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjIzMjpcXHRlcnJvciA9IF9fdnhmc19pZ2V0KFZYRlNfU0JJKHNicCktXFx1MDAzZXZzaV9zdGlsaXN0LCBWWEZTX0lOTyhpbm9kZSksIGlubyk7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTIzMy1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNDEtLyoqXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI0MjogKiB2eGZzX2lnZXQgLSBnZXQgYW4gaW5vZGVcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmMtMjQzLSAqIEBzYnA6XFx0dGhlIHN1cGVyYmxvY2sgdG8gZ2V0IHRoZSBpbm9kZSBmb3JcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYz0yNTA9c3RydWN0IGlub2RlICpcXG5mcy9mcmVldnhmcy92eGZzX2lub2RlLmM6MjUxOnZ4ZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgaW5vX3QgaW5vKVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNTIte1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jLTI2NC1cXHR2aXAgPSBWWEZTX0lOTyhpcCk7XFxuZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jOjI2NTpcXHRlcnJvciA9IF9fdnhmc19pZ2V0KFZYRlNfU0JJKHNicCktXFx1MDAzZXZzaV9pbGlzdCwgdmlwLCBpbm8pO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYy0yNjYtXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jPTE4Nz12eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcCwgc3RydWN0IGRlbnRyeSAqZHAsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk2LVxcdGlmIChpbm8pXFxuZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYzoxOTc6XFx0XFx0aXAgPSB2eGZzX2lnZXQoZGlwLVxcdTAwM2VpX3NiLCBpbm8pO1xcbmZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMtMTk4LVxcdHJldHVybiBkX3NwbGljZV9hbGlhcyhpcCwgZHApO1xcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jPTE4ND1zdGF0aWMgaW50IHZ4ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNicCwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jLTI2MC1cXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmM6MjYxOlxcdHJvb3QgPSB2eGZzX2lnZXQoc2JwLCBWWEZTX1JPT1RfSU5PKTtcXG5mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMtMjYyLVxcdGlmIChJU19FUlIocm9vdCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6MjcuNjYzNDkzNjM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjIzMDg5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVlhGUyBTeW1ib2wgSW5jbHVzaW9uKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHZ4ZnNfaWdldGAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBzbyB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgaW5jbHVzaW9uIGZvciBGb2N1c1N5bWJvbHMuIE5vdywgYHZ4ZnNfbG9va3VwYCBhbmQgYHZ4ZnNfcmVhZGRpcmAg4oCTIHRoZXkncmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkncmUgKnVzZWQqIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgdnhmc19kaXJfaW5vZGVfb3BzYCBhbmQgYHZ4ZnNfZGlyX29wZXJhdGlvbnNgLCB3aGljaCBtZWFucyB0aGV5J3JlIG5vdCBpbmxpbmVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gZmF2b3Igbm9uLXN0YXRpYywgKm5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMhIEknbGwgYWJzb2x1dGVseSBpbmNsdWRlIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgLiBJJ2xsIGFsc28gaW5jbHVkZSBgdnhmc19pZ2V0YCB0byBiZSBleHRyYSBzdXJlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBgVlhGU19GU2AgaXMgdGhlIG9ubHkgb25lLiBPa2F5LCB3YWl0IGEgbWludXRlLCBgVlhGU19GU2AgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQkxPQ0tgIGlzIGEgY29tbW9uIHN1YnN5c3RlbSBjb25maWcuIFdoaWxlIGl0J3MgcHJvYmFibHkgYWx3YXlzIGVuYWJsZWQsIGl0J3MgZ29vZCBwcmFjdGljZSB0byBpbmNsdWRlIHBhcmVudHMuIEknbGwgc3RpY2sgd2l0aCBqdXN0IGluY2x1ZGluZyBgVlhGU19GU2AgZm9yIG5vdy5cblxuUmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgYHZ4ZnNfZmluZF9lbnRyeWAgYW5kIGB2eGZzX3JlYWRkaXJgLiBgdnhmc19maW5kX2VudHJ5YCBpcyBzdGF0aWMgYW5kIGdldHMgY2FsbGVkIGZyb20gYHZ4ZnNfaW5vZGVfYnlfbmFtZWAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgYHZ4ZnNfbG9va3VwYC4gVGhpcyBjb25maXJtcyB0aGF0IGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFyZSBpbmRlZWQgdGhlIGNvcmUgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBmb2N1cyBvbi5cblxuT2theSwgbGV0IG1lIGp1c3QgcXVpY2tseSByZXZpZXcgYGZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTozNC45MjU4MDU0MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgQ2hyaXN0b3BoIEhlbGx3aWcuXFxuICAgNDpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgS3J6eXN6dG9mIEJsYXN6a293c2tpXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0LypcXG4gICA4OlxcdCAqIFZlcml0YXMgZmlsZXN5c3RlbSBkcml2ZXIgLSBsb29rdXAgYW5kIG90aGVyIGRpcmVjdG9yeSByZWxhdGVkIGNvZGUuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlnaG1lbS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0I2luY2x1ZGUgXFxcInZ4ZnMuaFxcXCJcXG4gIDE5OlxcdCNpbmNsdWRlIFxcXCJ2eGZzX2Rpci5oXFxcIlxcbiAgMjA6XFx0I2luY2x1ZGUgXFxcInZ4ZnNfaW5vZGUuaFxcXCJcXG4gIDIxOlxcdCNpbmNsdWRlIFxcXCJ2eGZzX2V4dGVybi5oXFxcIlxcbiAgMjI6XFx0XFxuICAyMzpcXHQvKlxcbiAgMjQ6XFx0ICogTnVtYmVyIG9mIFZ4RlMgYmxvY2tzIHBlciBwYWdlLlxcbiAgMjU6XFx0ICovXFxuICAyNjpcXHQjZGVmaW5lIFZYRlNfQkxPQ0tfUEVSX1BBR0Uoc2JwKSAgKChQQUdFX1NJWkUgLyAoc2JwKS1cXHUwMDNlc19ibG9ja3NpemUpKVxcbiAgMjc6XFx0XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpcXHR2eGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCB1bnNpZ25lZCBpbnQpO1xcbiAgMzA6XFx0c3RhdGljIGludFxcdFxcdHZ4ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfZGlyX2lub2RlX29wcyA9IHtcXG4gIDMzOlxcdFxcdC5sb29rdXAgPVxcdFxcdHZ4ZnNfbG9va3VwLFxcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2eGZzX2Rpcl9vcGVyYXRpb25zID0ge1xcbiAgMzc6XFx0XFx0Lmxsc2VlayA9XFx0XFx0Z2VuZXJpY19maWxlX2xsc2VlayxcXG4gIDM4OlxcdFxcdC5yZWFkID1cXHRcXHRcXHRnZW5lcmljX3JlYWRfZGlyLFxcbiAgMzk6XFx0XFx0Lml0ZXJhdGVfc2hhcmVkID1cXHR2eGZzX3JlYWRkaXIsXFxuICA0MDpcXHRcXHQuc2V0bGVhc2UgPVxcdFxcdGdlbmVyaWNfc2V0bGVhc2UsXFxuICA0MTpcXHR9O1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXG4gIDQ0OlxcdC8qKlxcbiAgNDU6XFx0ICogdnhmc19maW5kX2VudHJ5IC0gZmluZCBhIG1hdGhpbmcgZGlyZWN0b3J5IGVudHJ5IGZvciBhIGRlbnRyeVxcbiAgNDY6XFx0ICogQGlwOlxcdFxcdGRpcmVjdG9yeSBpbm9kZVxcbiAgNDc6XFx0ICogQGRwOlxcdFxcdGRlbnRyeSBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIGEgZGlyZWN0XFxuICA0ODpcXHQgKiBAcHBwOlxcdGdldHMgZmlsbGVkIHdpdGggdGhlIHBhZ2UgdGhlIHJldHVybiB2YWx1ZSBzaXRzIGluXFxuICA0OTpcXHQgKlxcbiAgNTA6XFx0ICogRGVzY3JpcHRpb246XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA4OjExOjM0LjkyNTkzMTE0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQ0MDg0Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIFZYRlMgTW9kdWxlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHJldmlld2luZyB0aGUgVlhGUyBjb2RlIGFuZCB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgYW5hbHl6ZSBpdHMgYmVoYXZpb3IuIEkgbm90aWNlZCB0aGF0IGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgd2l0aGluIHRoZSBtb2R1bGUuIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0IHRoYXQsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGV2ZW4gdGhvdWdoIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIGFzc2lnbmVkIHRvIGdsb2JhbCBzdHJ1Y3RzLCBzcGVjaWZpY2FsbHkgYHZ4ZnNfZGlyX2lub2RlX29wc2AgYW5kIGB2eGZzX2Rpcl9vcGVyYXRpb25zYC4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGNhbid0IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCB0aGVyZWZvcmUgaGF2ZSBkaXN0aW5jdCwgcmVhZGlseSBpZGVudGlmaWFibGUgc3ltYm9sIGFkZHJlc3Nlcy4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgY2FuZGlkYXRlcyB0byBzZXJ2ZSBhcyBGb2N1c1N5bWJvbHMsIGFsbG93aW5nIG1lIHRvIHRhcmdldCBzcGVjaWZpYyBleGVjdXRpb24gcGF0aHMuXG5cblRoZXJlZm9yZSwgSSdsbCBkZWZpbml0ZWx5IGJlIHVzaW5nIGB2eGZzX2xvb2t1cGAgYW5kIGB2eGZzX3JlYWRkaXJgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gQWx0aG91Z2ggSSBjb3VsZCBhbHNvIGNvbnNpZGVyIGB2eGZzX2lnZXRgIHNpbmNlIGl0J3MgYSBub24tc3RhdGljIGVudHJ5IHBvaW50LCBgdnhmc19sb29rdXBgIGFuZCBgdnhmc19yZWFkZGlyYCBzZWVtIGxpa2UgdGhlIG1vcmUgZGlyZWN0IGNob2ljZXMgZ2l2ZW4gdGhlaXIgcm9sZSBpbiBjYWxsaW5nIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgVlhGU19GU2AgaXMgdGhlIG9idmlvdXMgb25lLCBvZiBjb3Vyc2UsIHRoYXQncyBhIGdpdmVuLiBgQkxPQ0tgIHNlZW1zIHN0YW5kYXJkIGVub3VnaC4gQnV0IEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlcmUgYXJlbid0IGFueSBvdGhlciBvYnNjdXJlIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBhY2NvdW50IGZvciB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgcGljdHVyZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTo0MS4yNzAwMTc3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNzEzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcmVldnhmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZyZWV2eGZzL0tjb25maWc9Mj1jb25maWcgVlhGU19GU1xcbmZzL2ZyZWV2eGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRnJlZVZ4RlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoVkVSSVRBUyBWeEZTKFRNKSBjb21wYXRpYmxlKVxcXCJcXG5mcy9mcmVldnhmcy9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmZzL2ZyZWV2eGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDg6MTE6NDEuMzExMDkzMTc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDA0NTc3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZ4ZnNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgYWxsIGFib3V0IGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiBgdnhmc19maW5kX2VudHJ5YCBhbmQgYHZ4ZnNfcmVhZGRpcmAuIE5vIG90aGVyIGNoYW5nZXMgYXJlIGludm9sdmVkLCB3aGljaCBtYWtlcyB0aGluZ3Mgc2ltcGxlci4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgZml4LCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIGJ1Zy4gR2l2ZW4gaXRzIG5hdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBpbnRlZ3JpdHksIGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgaGVyZS5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmbGFnIGl0IGFzIHN1Y2guIEknbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gRm9jdXNpbmcgdGhlIGZ1enppbmcgZWZmb3J0IGlzIGFsc28gaW1wb3J0YW50LiBJ4oCZbGwgbWFrZSBzdXJlIHRoZSBmdXp6ZXIgaGl0cyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHNvIEnigJlsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYFtcInZ4ZnNfbG9va3VwXCIsIFwidnhmc19yZWFkZGlyXCJdYC4gSSdsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgVlhGU19GU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIHdpdGggYEVuYWJsZUNvbmZpZ3M6IFtcIlZYRlNfRlNcIl1gLCBzaW5jZSB0aGlzIGlzIGEgZmlsZXN5c3RlbSBkcml2ZXIuXG5cbk15IHJlYXNvbmluZyBmb3IgdGhlc2Ugc2V0dGluZ3MgaXMgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhY2tsZXMgYm91bmRzIGNoZWNraW5nIGR1cmluZyBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiB0aGUgYGZyZWV2eGZzYCBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNsZWFybHkgaW52b2x2ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCB0byB1bmNvdmVyIGFueSBsYXRlbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMiwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwODoxMTo0Ni40MTE1NTM4MjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjczMjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ4ZnNfbG9va3VwXCIsXG4gICAgXCJ2eGZzX3JlYWRkaXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBkaXJlY3RvcnkgZW50cnkgcGFyc2luZyBpbiBmcmVldnhmcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGZzX2xvb2t1cFwiLFxuICAgIFwidnhmc19yZWFkZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gZGlyZWN0b3J5IGVudHJ5IHBhcnNpbmcgaW4gZnJlZXZ4ZnMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[1] Phase: Succeeded StartedAt: 2026-08-04 08:11:57 +0000 UTC FinishedAt: 2026-08-04 08:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 08:11:57 +0000 UTC FinishedAt: 2026-08-04 08:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2] Phase: Succeeded StartedAt: 2026-08-04 08:11:57 +0000 UTC FinishedAt: 2026-08-04 09:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 08:11:57 +0000 UTC FinishedAt: 2026-08-04 09:47:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 08:11:57 +0000 UTC FinishedAt: 2026-08-04 08:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 08:11:57 +0000 UTC FinishedAt: 2026-08-04 08:12:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowdzdhm/series-workflowdzdhm-convert-artifact-578067963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 08:12:07 +0000 UTC FinishedAt: 2026-08-04 08:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 08:12:07 +0000 UTC FinishedAt: 2026-08-04 08:33:53 +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:*4e18bc28-086c-49aa-95db-35d70a9e5828,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-workflowdzdhm/series-workflowdzdhm-convert-artifact-578067963/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": "757d42bf-d3b2-4b67-8844-29a86fd72c5b", "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-workflowdzdhm/series-workflowdzdhm-build-action-913788217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 08:12:07 +0000 UTC FinishedAt: 2026-08-04 08:33:43 +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:*4e18bc28-086c-49aa-95db-35d70a9e5828,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-workflowdzdhm/series-workflowdzdhm-convert-artifact-578067963/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": "757d42bf-d3b2-4b67-8844-29a86fd72c5b", "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-workflowdzdhm/series-workflowdzdhm-build-action-913788217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 08:33:53 +0000 UTC FinishedAt: 2026-08-04 08:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 08:33:53 +0000 UTC FinishedAt: 2026-08-04 08:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 08:33:53 +0000 UTC FinishedAt: 2026-08-04 08:34:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 08:33:53 +0000 UTC FinishedAt: 2026-08-04 08:33:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowdzdhm/series-workflowdzdhm-convert-artifact-3695275090/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 08:34:03 +0000 UTC FinishedAt: 2026-08-04 08:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 08:34:03 +0000 UTC FinishedAt: 2026-08-04 08:35:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*757d42bf-d3b2-4b67-8844-29a86fd72c5b,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-workflowdzdhm/series-workflowdzdhm-build-action-913788217/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-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 08:36:02 +0000 UTC FinishedAt: 2026-08-04 08:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 08:36:02 +0000 UTC FinishedAt: 2026-08-04 08:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 08:36:02 +0000 UTC FinishedAt: 2026-08-04 08:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 08:36:02 +0000 UTC FinishedAt: 2026-08-04 08:55:33 +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:*4e18bc28-086c-49aa-95db-35d70a9e5828,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-workflowdzdhm/series-workflowdzdhm-convert-artifact-3695275090/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": "23a675fa-b8e0-46b6-896f-33ae1a35cd43", "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-workflowdzdhm/series-workflowdzdhm-build-action-547351270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 08:36:02 +0000 UTC FinishedAt: 2026-08-04 08:55:23 +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:*4e18bc28-086c-49aa-95db-35d70a9e5828,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-workflowdzdhm/series-workflowdzdhm-convert-artifact-3695275090/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": "23a675fa-b8e0-46b6-896f-33ae1a35cd43", "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-workflowdzdhm/series-workflowdzdhm-build-action-547351270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 08:55:33 +0000 UTC FinishedAt: 2026-08-04 08:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 08:55:33 +0000 UTC FinishedAt: 2026-08-04 08:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 08:55:33 +0000 UTC FinishedAt: 2026-08-04 08:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 08:55:33 +0000 UTC FinishedAt: 2026-08-04 08:57:26 +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:*23a675fa-b8e0-46b6-896f-33ae1a35cd43,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-workflowdzdhm/series-workflowdzdhm-build-action-547351270/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-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 09:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 09:47:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},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:*757d42bf-d3b2-4b67-8844-29a86fd72c5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a675fa-b8e0-46b6-896f-33ae1a35cd43,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-workflowdzdhm/series-workflowdzdhm-build-action-913788217/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-workflowdzdhm/series-workflowdzdhm-build-action-547351270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 08:58:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 08:57:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},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-workflowdzdhm/series-workflowdzdhm-convert-artifact-3178829479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 08:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 08:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 08:57:36 +0000 UTC FinishedAt: 2026-08-04 08:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 08:58:16 +0000 UTC FinishedAt: 2026-08-04 09:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzdhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vxfs_lookup","vxfs_readdir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff226ef519115e017dbcebb0ef1142081f449b95","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXFS_FS"],"series_id":"a8befdeb-27d9-42f0-804f-0921e93f01e5","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 08:58:16 +0000 UTC FinishedAt: 2026-08-04 09:47:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*757d42bf-d3b2-4b67-8844-29a86fd72c5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a675fa-b8e0-46b6-896f-33ae1a35cd43,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-workflowdzdhm/series-workflowdzdhm-build-action-913788217/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-workflowdzdhm/series-workflowdzdhm-build-action-547351270/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-workflowdzdhm/series-workflowdzdhm-convert-artifact-3178829479/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,}